complete motor

Dependencies:   BufferedSerial motor_sn7544

Committer:
Jeonghoon
Date:
Thu Nov 21 11:39:20 2019 +0000
Revision:
13:3ac8d2472417
Parent:
11:2228e8931266
complete motor

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Jeonghoon 11:2228e8931266 1 /*
Jeonghoon 11:2228e8931266 2 * Copyright (C) 2009, Willow Garage, Inc.
Jeonghoon 11:2228e8931266 3 *
Jeonghoon 11:2228e8931266 4 * Redistribution and use in source and binary forms, with or without
Jeonghoon 11:2228e8931266 5 * modification, are permitted provided that the following conditions are met:
Jeonghoon 11:2228e8931266 6 * * Redistributions of source code must retain the above copyright notice,
Jeonghoon 11:2228e8931266 7 * this list of conditions and the following disclaimer.
Jeonghoon 11:2228e8931266 8 * * Redistributions in binary form must reproduce the above copyright
Jeonghoon 11:2228e8931266 9 * notice, this list of conditions and the following disclaimer in the
Jeonghoon 11:2228e8931266 10 * documentation and/or other materials provided with the distribution.
Jeonghoon 11:2228e8931266 11 * * Neither the names of Willow Garage, Inc. nor the names of its
Jeonghoon 11:2228e8931266 12 * contributors may be used to endorse or promote products derived from
Jeonghoon 11:2228e8931266 13 * this software without specific prior written permission.
Jeonghoon 11:2228e8931266 14 *
Jeonghoon 11:2228e8931266 15 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
Jeonghoon 11:2228e8931266 16 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
Jeonghoon 11:2228e8931266 17 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
Jeonghoon 11:2228e8931266 18 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
Jeonghoon 11:2228e8931266 19 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
Jeonghoon 11:2228e8931266 20 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
Jeonghoon 11:2228e8931266 21 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
Jeonghoon 11:2228e8931266 22 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
Jeonghoon 11:2228e8931266 23 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
Jeonghoon 11:2228e8931266 24 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
Jeonghoon 11:2228e8931266 25 * POSSIBILITY OF SUCH DAMAGE.
Jeonghoon 11:2228e8931266 26 */
Jeonghoon 11:2228e8931266 27
Jeonghoon 11:2228e8931266 28 #ifndef ROSLIB_MESSAGE_TRAITS_H
Jeonghoon 11:2228e8931266 29 #define ROSLIB_MESSAGE_TRAITS_H
Jeonghoon 11:2228e8931266 30
Jeonghoon 11:2228e8931266 31 #include "message_forward.h"
Jeonghoon 11:2228e8931266 32
Jeonghoon 11:2228e8931266 33 #include <ros/time.h>
Jeonghoon 11:2228e8931266 34
Jeonghoon 11:2228e8931266 35 #include <string>
Jeonghoon 11:2228e8931266 36 #include <boost/utility/enable_if.hpp>
Jeonghoon 11:2228e8931266 37 #include <boost/type_traits/remove_const.hpp>
Jeonghoon 11:2228e8931266 38 #include <boost/type_traits/remove_reference.hpp>
Jeonghoon 11:2228e8931266 39
Jeonghoon 11:2228e8931266 40 namespace std_msgs
Jeonghoon 11:2228e8931266 41 {
Jeonghoon 11:2228e8931266 42 ROS_DECLARE_MESSAGE(Header)
Jeonghoon 11:2228e8931266 43 }
Jeonghoon 11:2228e8931266 44
Jeonghoon 11:2228e8931266 45 #define ROS_IMPLEMENT_SIMPLE_TOPIC_TRAITS(msg, md5sum, datatype, definition) \
Jeonghoon 11:2228e8931266 46 namespace ros \
Jeonghoon 11:2228e8931266 47 { \
Jeonghoon 11:2228e8931266 48 namespace message_traits \
Jeonghoon 11:2228e8931266 49 { \
Jeonghoon 11:2228e8931266 50 template<> struct MD5Sum<msg> \
Jeonghoon 11:2228e8931266 51 { \
Jeonghoon 11:2228e8931266 52 static const char* value() { return md5sum; } \
Jeonghoon 11:2228e8931266 53 static const char* value(const msg&) { return value(); } \
Jeonghoon 11:2228e8931266 54 }; \
Jeonghoon 11:2228e8931266 55 template<> struct DataType<msg> \
Jeonghoon 11:2228e8931266 56 { \
Jeonghoon 11:2228e8931266 57 static const char* value() { return datatype; } \
Jeonghoon 11:2228e8931266 58 static const char* value(const msg&) { return value(); } \
Jeonghoon 11:2228e8931266 59 }; \
Jeonghoon 11:2228e8931266 60 template<> struct Definition<msg> \
Jeonghoon 11:2228e8931266 61 { \
Jeonghoon 11:2228e8931266 62 static const char* value() { return definition; } \
Jeonghoon 11:2228e8931266 63 static const char* value(const msg&) { return value(); } \
Jeonghoon 11:2228e8931266 64 }; \
Jeonghoon 11:2228e8931266 65 } \
Jeonghoon 11:2228e8931266 66 }
Jeonghoon 11:2228e8931266 67
Jeonghoon 11:2228e8931266 68
Jeonghoon 11:2228e8931266 69 namespace ros
Jeonghoon 11:2228e8931266 70 {
Jeonghoon 11:2228e8931266 71 namespace message_traits
Jeonghoon 11:2228e8931266 72 {
Jeonghoon 11:2228e8931266 73
Jeonghoon 11:2228e8931266 74 /**
Jeonghoon 11:2228e8931266 75 * \brief Base type for compile-type true/false tests. Compatible with Boost.MPL. classes inheriting from this type
Jeonghoon 11:2228e8931266 76 * are \b true values.
Jeonghoon 11:2228e8931266 77 */
Jeonghoon 11:2228e8931266 78 struct TrueType
Jeonghoon 11:2228e8931266 79 {
Jeonghoon 11:2228e8931266 80 static const bool value = true;
Jeonghoon 11:2228e8931266 81 typedef TrueType type;
Jeonghoon 11:2228e8931266 82 };
Jeonghoon 11:2228e8931266 83
Jeonghoon 11:2228e8931266 84 /**
Jeonghoon 11:2228e8931266 85 * \brief Base type for compile-type true/false tests. Compatible with Boost.MPL. classes inheriting from this type
Jeonghoon 11:2228e8931266 86 * are \b false values.
Jeonghoon 11:2228e8931266 87 */
Jeonghoon 11:2228e8931266 88 struct FalseType
Jeonghoon 11:2228e8931266 89 {
Jeonghoon 11:2228e8931266 90 static const bool value = false;
Jeonghoon 11:2228e8931266 91 typedef FalseType type;
Jeonghoon 11:2228e8931266 92 };
Jeonghoon 11:2228e8931266 93
Jeonghoon 11:2228e8931266 94 /**
Jeonghoon 11:2228e8931266 95 * \brief A simple datatype is one that can be memcpy'd directly in array form, i.e. it's a POD, fixed-size type and
Jeonghoon 11:2228e8931266 96 * sizeof(M) == sum(serializationLength(M:a...))
Jeonghoon 11:2228e8931266 97 */
Jeonghoon 11:2228e8931266 98 template<typename M> struct IsSimple : public FalseType {};
Jeonghoon 11:2228e8931266 99 /**
Jeonghoon 11:2228e8931266 100 * \brief A fixed-size datatype is one whose size is constant, i.e. it has no variable-length arrays or strings
Jeonghoon 11:2228e8931266 101 */
Jeonghoon 11:2228e8931266 102 template<typename M> struct IsFixedSize : public FalseType {};
Jeonghoon 11:2228e8931266 103 /**
Jeonghoon 11:2228e8931266 104 * \brief HasHeader informs whether or not there is a header that gets serialized as the first thing in the message
Jeonghoon 11:2228e8931266 105 */
Jeonghoon 11:2228e8931266 106 template<typename M> struct HasHeader : public FalseType {};
Jeonghoon 11:2228e8931266 107
Jeonghoon 11:2228e8931266 108 /**
Jeonghoon 11:2228e8931266 109 * \brief Am I message or not
Jeonghoon 11:2228e8931266 110 */
Jeonghoon 11:2228e8931266 111 template<typename M> struct IsMessage : public FalseType {};
Jeonghoon 11:2228e8931266 112
Jeonghoon 11:2228e8931266 113 /**
Jeonghoon 11:2228e8931266 114 * \brief Specialize to provide the md5sum for a message
Jeonghoon 11:2228e8931266 115 */
Jeonghoon 11:2228e8931266 116 template<typename M>
Jeonghoon 11:2228e8931266 117 struct MD5Sum
Jeonghoon 11:2228e8931266 118 {
Jeonghoon 11:2228e8931266 119 static const char* value()
Jeonghoon 11:2228e8931266 120 {
Jeonghoon 11:2228e8931266 121 return M::__s_getMD5Sum().c_str();
Jeonghoon 11:2228e8931266 122 }
Jeonghoon 11:2228e8931266 123
Jeonghoon 11:2228e8931266 124 static const char* value(const M& m)
Jeonghoon 11:2228e8931266 125 {
Jeonghoon 11:2228e8931266 126 return m.__getMD5Sum().c_str();
Jeonghoon 11:2228e8931266 127 }
Jeonghoon 11:2228e8931266 128 };
Jeonghoon 11:2228e8931266 129
Jeonghoon 11:2228e8931266 130 /**
Jeonghoon 11:2228e8931266 131 * \brief Specialize to provide the datatype for a message
Jeonghoon 11:2228e8931266 132 */
Jeonghoon 11:2228e8931266 133 template<typename M>
Jeonghoon 11:2228e8931266 134 struct DataType
Jeonghoon 11:2228e8931266 135 {
Jeonghoon 11:2228e8931266 136 static const char* value()
Jeonghoon 11:2228e8931266 137 {
Jeonghoon 11:2228e8931266 138 return M::__s_getDataType().c_str();
Jeonghoon 11:2228e8931266 139 }
Jeonghoon 11:2228e8931266 140
Jeonghoon 11:2228e8931266 141 static const char* value(const M& m)
Jeonghoon 11:2228e8931266 142 {
Jeonghoon 11:2228e8931266 143 return m.__getDataType().c_str();
Jeonghoon 11:2228e8931266 144 }
Jeonghoon 11:2228e8931266 145 };
Jeonghoon 11:2228e8931266 146
Jeonghoon 11:2228e8931266 147 /**
Jeonghoon 11:2228e8931266 148 * \brief Specialize to provide the definition for a message
Jeonghoon 11:2228e8931266 149 */
Jeonghoon 11:2228e8931266 150 template<typename M>
Jeonghoon 11:2228e8931266 151 struct Definition
Jeonghoon 11:2228e8931266 152 {
Jeonghoon 11:2228e8931266 153 static const char* value()
Jeonghoon 11:2228e8931266 154 {
Jeonghoon 11:2228e8931266 155 return M::__s_getMessageDefinition().c_str();
Jeonghoon 11:2228e8931266 156 }
Jeonghoon 11:2228e8931266 157
Jeonghoon 11:2228e8931266 158 static const char* value(const M& m)
Jeonghoon 11:2228e8931266 159 {
Jeonghoon 11:2228e8931266 160 return m.__getMessageDefinition().c_str();
Jeonghoon 11:2228e8931266 161 }
Jeonghoon 11:2228e8931266 162 };
Jeonghoon 11:2228e8931266 163
Jeonghoon 11:2228e8931266 164 /**
Jeonghoon 11:2228e8931266 165 * \brief Header trait. In the default implementation pointer()
Jeonghoon 11:2228e8931266 166 * returns &m.header if HasHeader<M>::value is true, otherwise returns NULL
Jeonghoon 11:2228e8931266 167 */
Jeonghoon 11:2228e8931266 168 template<typename M, typename Enable = void>
Jeonghoon 11:2228e8931266 169 struct Header
Jeonghoon 11:2228e8931266 170 {
Jeonghoon 11:2228e8931266 171 static std_msgs::Header* pointer(M& m) { (void)m; return 0; }
Jeonghoon 11:2228e8931266 172 static std_msgs::Header const* pointer(const M& m) { (void)m; return 0; }
Jeonghoon 11:2228e8931266 173 };
Jeonghoon 11:2228e8931266 174
Jeonghoon 11:2228e8931266 175 template<typename M>
Jeonghoon 11:2228e8931266 176 struct Header<M, typename boost::enable_if<HasHeader<M> >::type >
Jeonghoon 11:2228e8931266 177 {
Jeonghoon 11:2228e8931266 178 static std_msgs::Header* pointer(M& m) { return &m.header; }
Jeonghoon 11:2228e8931266 179 static std_msgs::Header const* pointer(const M& m) { return &m.header; }
Jeonghoon 11:2228e8931266 180 };
Jeonghoon 11:2228e8931266 181
Jeonghoon 11:2228e8931266 182 /**
Jeonghoon 11:2228e8931266 183 * \brief FrameId trait. In the default implementation pointer()
Jeonghoon 11:2228e8931266 184 * returns &m.header.frame_id if HasHeader<M>::value is true, otherwise returns NULL. value()
Jeonghoon 11:2228e8931266 185 * does not exist, and causes a compile error
Jeonghoon 11:2228e8931266 186 */
Jeonghoon 11:2228e8931266 187 template<typename M, typename Enable = void>
Jeonghoon 11:2228e8931266 188 struct FrameId
Jeonghoon 11:2228e8931266 189 {
Jeonghoon 11:2228e8931266 190 static std::string* pointer(M& m) { (void)m; return 0; }
Jeonghoon 11:2228e8931266 191 static std::string const* pointer(const M& m) { (void)m; return 0; }
Jeonghoon 11:2228e8931266 192 };
Jeonghoon 11:2228e8931266 193
Jeonghoon 11:2228e8931266 194 template<typename M>
Jeonghoon 11:2228e8931266 195 struct FrameId<M, typename boost::enable_if<HasHeader<M> >::type >
Jeonghoon 11:2228e8931266 196 {
Jeonghoon 11:2228e8931266 197 static std::string* pointer(M& m) { return &m.header.frame_id; }
Jeonghoon 11:2228e8931266 198 static std::string const* pointer(const M& m) { return &m.header.frame_id; }
Jeonghoon 11:2228e8931266 199 static std::string value(const M& m) { return m.header.frame_id; }
Jeonghoon 11:2228e8931266 200 };
Jeonghoon 11:2228e8931266 201
Jeonghoon 11:2228e8931266 202 /**
Jeonghoon 11:2228e8931266 203 * \brief TimeStamp trait. In the default implementation pointer()
Jeonghoon 11:2228e8931266 204 * returns &m.header.stamp if HasHeader<M>::value is true, otherwise returns NULL. value()
Jeonghoon 11:2228e8931266 205 * does not exist, and causes a compile error
Jeonghoon 11:2228e8931266 206 */
Jeonghoon 11:2228e8931266 207 template<typename M, typename Enable = void>
Jeonghoon 11:2228e8931266 208 struct TimeStamp
Jeonghoon 11:2228e8931266 209 {
Jeonghoon 11:2228e8931266 210 static ros::Time* pointer(M& m) { (void)m; return 0; }
Jeonghoon 11:2228e8931266 211 static ros::Time const* pointer(const M& m) { (void)m; return 0; }
Jeonghoon 11:2228e8931266 212 };
Jeonghoon 11:2228e8931266 213
Jeonghoon 11:2228e8931266 214 template<typename M>
Jeonghoon 11:2228e8931266 215 struct TimeStamp<M, typename boost::enable_if<HasHeader<M> >::type >
Jeonghoon 11:2228e8931266 216 {
Jeonghoon 11:2228e8931266 217 static ros::Time* pointer(typename boost::remove_const<M>::type &m) { return &m.header.stamp; }
Jeonghoon 11:2228e8931266 218 static ros::Time const* pointer(const M& m) { return &m.header.stamp; }
Jeonghoon 11:2228e8931266 219 static ros::Time value(const M& m) { return m.header.stamp; }
Jeonghoon 11:2228e8931266 220 };
Jeonghoon 11:2228e8931266 221
Jeonghoon 11:2228e8931266 222 /**
Jeonghoon 11:2228e8931266 223 * \brief returns MD5Sum<M>::value();
Jeonghoon 11:2228e8931266 224 */
Jeonghoon 11:2228e8931266 225 template<typename M>
Jeonghoon 11:2228e8931266 226 inline const char* md5sum()
Jeonghoon 11:2228e8931266 227 {
Jeonghoon 11:2228e8931266 228 return MD5Sum<typename boost::remove_reference<typename boost::remove_const<M>::type>::type>::value();
Jeonghoon 11:2228e8931266 229 }
Jeonghoon 11:2228e8931266 230
Jeonghoon 11:2228e8931266 231 /**
Jeonghoon 11:2228e8931266 232 * \brief returns DataType<M>::value();
Jeonghoon 11:2228e8931266 233 */
Jeonghoon 11:2228e8931266 234 template<typename M>
Jeonghoon 11:2228e8931266 235 inline const char* datatype()
Jeonghoon 11:2228e8931266 236 {
Jeonghoon 11:2228e8931266 237 return DataType<typename boost::remove_reference<typename boost::remove_const<M>::type>::type>::value();
Jeonghoon 11:2228e8931266 238 }
Jeonghoon 11:2228e8931266 239
Jeonghoon 11:2228e8931266 240 /**
Jeonghoon 11:2228e8931266 241 * \brief returns Definition<M>::value();
Jeonghoon 11:2228e8931266 242 */
Jeonghoon 11:2228e8931266 243 template<typename M>
Jeonghoon 11:2228e8931266 244 inline const char* definition()
Jeonghoon 11:2228e8931266 245 {
Jeonghoon 11:2228e8931266 246 return Definition<typename boost::remove_reference<typename boost::remove_const<M>::type>::type>::value();
Jeonghoon 11:2228e8931266 247 }
Jeonghoon 11:2228e8931266 248
Jeonghoon 11:2228e8931266 249 /**
Jeonghoon 11:2228e8931266 250 * \brief returns MD5Sum<M>::value(m);
Jeonghoon 11:2228e8931266 251 */
Jeonghoon 11:2228e8931266 252 template<typename M>
Jeonghoon 11:2228e8931266 253 inline const char* md5sum(const M& m)
Jeonghoon 11:2228e8931266 254 {
Jeonghoon 11:2228e8931266 255 return MD5Sum<typename boost::remove_reference<typename boost::remove_const<M>::type>::type>::value(m);
Jeonghoon 11:2228e8931266 256 }
Jeonghoon 11:2228e8931266 257
Jeonghoon 11:2228e8931266 258 /**
Jeonghoon 11:2228e8931266 259 * \brief returns DataType<M>::value(m);
Jeonghoon 11:2228e8931266 260 */
Jeonghoon 11:2228e8931266 261 template<typename M>
Jeonghoon 11:2228e8931266 262 inline const char* datatype(const M& m)
Jeonghoon 11:2228e8931266 263 {
Jeonghoon 11:2228e8931266 264 return DataType<typename boost::remove_reference<typename boost::remove_const<M>::type>::type>::value(m);
Jeonghoon 11:2228e8931266 265 }
Jeonghoon 11:2228e8931266 266
Jeonghoon 11:2228e8931266 267 /**
Jeonghoon 11:2228e8931266 268 * \brief returns Definition<M>::value(m);
Jeonghoon 11:2228e8931266 269 */
Jeonghoon 11:2228e8931266 270 template<typename M>
Jeonghoon 11:2228e8931266 271 inline const char* definition(const M& m)
Jeonghoon 11:2228e8931266 272 {
Jeonghoon 11:2228e8931266 273 return Definition<typename boost::remove_reference<typename boost::remove_const<M>::type>::type>::value(m);
Jeonghoon 11:2228e8931266 274 }
Jeonghoon 11:2228e8931266 275
Jeonghoon 11:2228e8931266 276 /**
Jeonghoon 11:2228e8931266 277 * \brief returns Header<M>::pointer(m);
Jeonghoon 11:2228e8931266 278 */
Jeonghoon 11:2228e8931266 279 template<typename M>
Jeonghoon 11:2228e8931266 280 inline std_msgs::Header* header(M& m)
Jeonghoon 11:2228e8931266 281 {
Jeonghoon 11:2228e8931266 282 return Header<typename boost::remove_reference<typename boost::remove_const<M>::type>::type>::pointer(m);
Jeonghoon 11:2228e8931266 283 }
Jeonghoon 11:2228e8931266 284
Jeonghoon 11:2228e8931266 285 /**
Jeonghoon 11:2228e8931266 286 * \brief returns Header<M>::pointer(m);
Jeonghoon 11:2228e8931266 287 */
Jeonghoon 11:2228e8931266 288 template<typename M>
Jeonghoon 11:2228e8931266 289 inline std_msgs::Header const* header(const M& m)
Jeonghoon 11:2228e8931266 290 {
Jeonghoon 11:2228e8931266 291 return Header<typename boost::remove_reference<typename boost::remove_const<M>::type>::type>::pointer(m);
Jeonghoon 11:2228e8931266 292 }
Jeonghoon 11:2228e8931266 293
Jeonghoon 11:2228e8931266 294 /**
Jeonghoon 11:2228e8931266 295 * \brief returns FrameId<M>::pointer(m);
Jeonghoon 11:2228e8931266 296 */
Jeonghoon 11:2228e8931266 297 template<typename M>
Jeonghoon 11:2228e8931266 298 inline std::string* frameId(M& m)
Jeonghoon 11:2228e8931266 299 {
Jeonghoon 11:2228e8931266 300 return FrameId<typename boost::remove_reference<typename boost::remove_const<M>::type>::type>::pointer(m);
Jeonghoon 11:2228e8931266 301 }
Jeonghoon 11:2228e8931266 302
Jeonghoon 11:2228e8931266 303 /**
Jeonghoon 11:2228e8931266 304 * \brief returns FrameId<M>::pointer(m);
Jeonghoon 11:2228e8931266 305 */
Jeonghoon 11:2228e8931266 306 template<typename M>
Jeonghoon 11:2228e8931266 307 inline std::string const* frameId(const M& m)
Jeonghoon 11:2228e8931266 308 {
Jeonghoon 11:2228e8931266 309 return FrameId<typename boost::remove_reference<typename boost::remove_const<M>::type>::type>::pointer(m);
Jeonghoon 11:2228e8931266 310 }
Jeonghoon 11:2228e8931266 311
Jeonghoon 11:2228e8931266 312 /**
Jeonghoon 11:2228e8931266 313 * \brief returns TimeStamp<M>::pointer(m);
Jeonghoon 11:2228e8931266 314 */
Jeonghoon 11:2228e8931266 315 template<typename M>
Jeonghoon 11:2228e8931266 316 inline ros::Time* timeStamp(M& m)
Jeonghoon 11:2228e8931266 317 {
Jeonghoon 11:2228e8931266 318 return TimeStamp<typename boost::remove_reference<typename boost::remove_const<M>::type>::type>::pointer(m);
Jeonghoon 11:2228e8931266 319 }
Jeonghoon 11:2228e8931266 320
Jeonghoon 11:2228e8931266 321 /**
Jeonghoon 11:2228e8931266 322 * \brief returns TimeStamp<M>::pointer(m);
Jeonghoon 11:2228e8931266 323 */
Jeonghoon 11:2228e8931266 324 template<typename M>
Jeonghoon 11:2228e8931266 325 inline ros::Time const* timeStamp(const M& m)
Jeonghoon 11:2228e8931266 326 {
Jeonghoon 11:2228e8931266 327 return TimeStamp<typename boost::remove_reference<typename boost::remove_const<M>::type>::type>::pointer(m);
Jeonghoon 11:2228e8931266 328 }
Jeonghoon 11:2228e8931266 329
Jeonghoon 11:2228e8931266 330 /**
Jeonghoon 11:2228e8931266 331 * \brief returns IsSimple<M>::value;
Jeonghoon 11:2228e8931266 332 */
Jeonghoon 11:2228e8931266 333 template<typename M>
Jeonghoon 11:2228e8931266 334 inline bool isSimple()
Jeonghoon 11:2228e8931266 335 {
Jeonghoon 11:2228e8931266 336 return IsSimple<typename boost::remove_reference<typename boost::remove_const<M>::type>::type>::value;
Jeonghoon 11:2228e8931266 337 }
Jeonghoon 11:2228e8931266 338
Jeonghoon 11:2228e8931266 339 /**
Jeonghoon 11:2228e8931266 340 * \brief returns IsFixedSize<M>::value;
Jeonghoon 11:2228e8931266 341 */
Jeonghoon 11:2228e8931266 342 template<typename M>
Jeonghoon 11:2228e8931266 343 inline bool isFixedSize()
Jeonghoon 11:2228e8931266 344 {
Jeonghoon 11:2228e8931266 345 return IsFixedSize<typename boost::remove_reference<typename boost::remove_const<M>::type>::type>::value;
Jeonghoon 11:2228e8931266 346 }
Jeonghoon 11:2228e8931266 347
Jeonghoon 11:2228e8931266 348 /**
Jeonghoon 11:2228e8931266 349 * \brief returns HasHeader<M>::value;
Jeonghoon 11:2228e8931266 350 */
Jeonghoon 11:2228e8931266 351 template<typename M>
Jeonghoon 11:2228e8931266 352 inline bool hasHeader()
Jeonghoon 11:2228e8931266 353 {
Jeonghoon 11:2228e8931266 354 return HasHeader<typename boost::remove_reference<typename boost::remove_const<M>::type>::type>::value;
Jeonghoon 11:2228e8931266 355 }
Jeonghoon 11:2228e8931266 356
Jeonghoon 11:2228e8931266 357 } // namespace message_traits
Jeonghoon 11:2228e8931266 358 } // namespace ros
Jeonghoon 11:2228e8931266 359
Jeonghoon 11:2228e8931266 360 #endif // ROSLIB_MESSAGE_TRAITS_H