MessageGroups.h 4.49 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12
#pragma once

#include <string>

namespace ROSBridge {

namespace MessageGroups {

typedef std::string StringType;

template<typename Group, typename SubGroup, typename...MoreSubGroups>
struct MessageGroup {
Valentin Platzgummer's avatar
Valentin Platzgummer committed
13
    static StringType messageType() {return _full<Group, SubGroup, MoreSubGroups...>();}
14 15

    template<typename G, typename SubG, typename...MoreSubG>
16
    static StringType _full() {return G::label()+ "/" + _full<SubG, MoreSubG...>(); }
17
    template<typename G>
18 19 20
    static StringType _full() {return G::label(); }


Valentin Platzgummer's avatar
Valentin Platzgummer committed
21
    static StringType messageTypeLast() {return _last<Group, SubGroup, MoreSubGroups...>();}
22 23 24 25 26

    template<typename G, typename SubG, typename...MoreSubG>
    static StringType _last() {return _last<SubG, MoreSubG...>(); }
    template<typename G>
    static StringType _last() {return G::label(); }
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
};

//!
//! \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";}

    //!
87
    //! \brief The PolygonArrayGroup struct is used the mark a class as a ROS jsk_recognition_msgs/PolygonArray message.
88
    //!
89
    //! The PolygonArrayGroup struct is used the mark a class as a ROS jsk_recognition_msgs/PolygonArray message.
90 91 92 93 94
    struct PolygonArrayGroup {
        static StringType label() {return "PolygonArray";}
    };
};

95 96 97 98 99 100 101 102 103 104 105 106 107
struct NemoMsgs {

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

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

108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132

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;

133 134 135 136
typedef MessageGroups::MessageGroup<MessageGroups::NemoMsgs,
                                    MessageGroups::NemoMsgs::ProgressGroup>
        ProgressGroup;

137 138 139
} // end namespace MessageGroups

} // end namespace ros_bridge