MessageGroups.h 3.62 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114
#pragma once

#include <string>

namespace ROSBridge {

namespace MessageGroups {

typedef std::string StringType;

template<typename Group, typename SubGroup, typename...MoreSubGroups>
struct MessageGroup {
    static StringType label() {return _label<Group, SubGroup, MoreSubGroups...>();}

    template<typename G, typename SubG, typename...MoreSubG>
    static StringType _label() {return G::label()+ "/" + _label<SubG, MoreSubG...>(); }
    template<typename G>
    static StringType _label() {return G::label(); }
};

//!
//! \note Each class belonging to a ROS message group must derive from \class MessageBaseClass.

namespace detail {

//!
//! \brief The EmptyGroup struct is used by the \class MessageBaseClass base class.
//!
//! The EmptyGroup struct is used by the \class MessageBaseClass base class. Passing a class using this
//! group will to the \class JsonFactory will lead to a compile-time error.
struct EmptyGroup        {
    static StringType label() {return "";}
};
}


struct GeometryMsgs {

    static StringType label() {return "geometry_msgs";}
    //!
    //! \brief The Point32Group struct is used the mark a class as a ROS Point32 message.
    //!
    //! The Point32Group struct is used the mark a class as a ROS Point32 message.
    struct Point32Group {
        static StringType label() {return "Point32";}
    };

    //!
    //! \brief The GeoPointGroup struct is used the mark a class as a ROS geographic_msgs/GeoPoint message.
    //!
    //! The GeoPointGroup struct is used the mark a class as a ROS geographic_msgs/GeoPoint message.
    struct GeoPointGroup {
        static StringType label() {return "GeoPoint";}
    };


    //!
    //! \brief The PolygonGroup struct is used the mark a class as a ROS Polygon message.
    //!
    //! The PolygonGroup struct is used the mark a class as a ROS Polygon message.
    struct PolygonGroup {
        static StringType label() {return "Polygon";}
    };

    //!
    //! \brief The PolygonStampedGroup struct is used the mark a class as a ROS PolygonStamped message.
    //!
    //! The PolygonStampedGroup struct is used the mark a class as a ROS PolygonStamped message.
    struct PolygonStampedGroup {
        static StringType label() {return "PolygonStamped";}
    };
};

struct JSKRecognitionMsgs {

    static StringType label() {return "jsk_recognition_msgs";}

    //!
    //! \brief The PolygonArrayGroup struct is used the mark a class as a ROS PolygonArray message.
    //!
    //! The PolygonArrayGroup struct is used the mark a class as a ROS PolygonArray message.
    struct PolygonArrayGroup {
        static StringType label() {return "PolygonArray";}
    };
};


typedef MessageGroup<detail::EmptyGroup,
                     detail::EmptyGroup>
        EmptyGroup;

typedef MessageGroups::MessageGroup<MessageGroups::GeometryMsgs,
                                    MessageGroups::GeometryMsgs::Point32Group>
        Point32Group;

typedef MessageGroups::MessageGroup<MessageGroups::GeometryMsgs,
                                    MessageGroups::GeometryMsgs::GeoPointGroup>
        GeoPointGroup;

typedef MessageGroups::MessageGroup<MessageGroups::GeometryMsgs,
                                    MessageGroups::GeometryMsgs::PolygonGroup>
        PolygonGroup;

typedef MessageGroups::MessageGroup<MessageGroups::GeometryMsgs,
                                    MessageGroups::GeometryMsgs::PolygonStampedGroup>
        PolygonStampedGroup;

typedef MessageGroups::MessageGroup<MessageGroups::JSKRecognitionMsgs,
                                    MessageGroups::JSKRecognitionMsgs::PolygonArrayGroup>
        PolygonArrayGroup;

} // end namespace MessageGroups

} // end namespace ros_bridge