$search
00001 //#line 2 "/opt/ros/electric/stacks/driver_common/dynamic_reconfigure/templates/ConfigType.h" 00002 // ********************************************************* 00003 // 00004 // File autogenerated for the laser_scan_splitter package 00005 // by the dynamic_reconfigure package. 00006 // Please do not edit. 00007 // 00008 // ********************************************************/ 00009 00010 /*********************************************************** 00011 * Software License Agreement (BSD License) 00012 * 00013 * Copyright (c) 2008, Willow Garage, Inc. 00014 * All rights reserved. 00015 * 00016 * Redistribution and use in source and binary forms, with or without 00017 * modification, are permitted provided that the following conditions 00018 * are met: 00019 * 00020 * * Redistributions of source code must retain the above copyright 00021 * notice, this list of conditions and the following disclaimer. 00022 * * Redistributions in binary form must reproduce the above 00023 * copyright notice, this list of conditions and the following 00024 * disclaimer in the documentation and/or other materials provided 00025 * with the distribution. 00026 * * Neither the name of the Willow Garage nor the names of its 00027 * contributors may be used to endorse or promote products derived 00028 * from this software without specific prior written permission. 00029 * 00030 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 00031 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 00032 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 00033 * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 00034 * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 00035 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 00036 * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 00037 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 00038 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 00039 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN 00040 * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 00041 * POSSIBILITY OF SUCH DAMAGE. 00042 ***********************************************************/ 00043 00044 // Author: Blaise Gassend 00045 00046 00047 #ifndef __laser_scan_splitter__SPLITTERCONFIG_H__ 00048 #define __laser_scan_splitter__SPLITTERCONFIG_H__ 00049 00050 #include <dynamic_reconfigure/config_tools.h> 00051 #include <limits> 00052 #include <ros/node_handle.h> 00053 #include <dynamic_reconfigure/ConfigDescription.h> 00054 #include <dynamic_reconfigure/ParamDescription.h> 00055 #include <dynamic_reconfigure/config_init_mutex.h> 00056 00057 namespace laser_scan_splitter 00058 { 00059 class SplitterConfigStatics; 00060 00061 class SplitterConfig 00062 { 00063 public: 00064 class AbstractParamDescription : public dynamic_reconfigure::ParamDescription 00065 { 00066 public: 00067 AbstractParamDescription(std::string n, std::string t, uint32_t l, 00068 std::string d, std::string e) 00069 { 00070 name = n; 00071 type = t; 00072 level = l; 00073 description = d; 00074 edit_method = e; 00075 } 00076 00077 virtual void clamp(SplitterConfig &config, const SplitterConfig &max, const SplitterConfig &min) const = 0; 00078 virtual void calcLevel(uint32_t &level, const SplitterConfig &config1, const SplitterConfig &config2) const = 0; 00079 virtual void fromServer(const ros::NodeHandle &nh, SplitterConfig &config) const = 0; 00080 virtual void toServer(const ros::NodeHandle &nh, const SplitterConfig &config) const = 0; 00081 virtual bool fromMessage(const dynamic_reconfigure::Config &msg, SplitterConfig &config) const = 0; 00082 virtual void toMessage(dynamic_reconfigure::Config &msg, const SplitterConfig &config) const = 0; 00083 }; 00084 00085 typedef boost::shared_ptr<AbstractParamDescription> AbstractParamDescriptionPtr; 00086 typedef boost::shared_ptr<const AbstractParamDescription> AbstractParamDescriptionConstPtr; 00087 00088 template <class T> 00089 class ParamDescription : public AbstractParamDescription 00090 { 00091 public: 00092 ParamDescription(std::string name, std::string type, uint32_t level, 00093 std::string description, std::string edit_method, T SplitterConfig::* f) : 00094 AbstractParamDescription(name, type, level, description, edit_method), 00095 field(f) 00096 {} 00097 00098 T (SplitterConfig::* field); 00099 00100 virtual void clamp(SplitterConfig &config, const SplitterConfig &max, const SplitterConfig &min) const 00101 { 00102 if (config.*field > max.*field) 00103 config.*field = max.*field; 00104 00105 if (config.*field < min.*field) 00106 config.*field = min.*field; 00107 } 00108 00109 virtual void calcLevel(uint32_t &comb_level, const SplitterConfig &config1, const SplitterConfig &config2) const 00110 { 00111 if (config1.*field != config2.*field) 00112 comb_level |= level; 00113 } 00114 00115 virtual void fromServer(const ros::NodeHandle &nh, SplitterConfig &config) const 00116 { 00117 nh.getParam(name, config.*field); 00118 } 00119 00120 virtual void toServer(const ros::NodeHandle &nh, const SplitterConfig &config) const 00121 { 00122 nh.setParam(name, config.*field); 00123 } 00124 00125 virtual bool fromMessage(const dynamic_reconfigure::Config &msg, SplitterConfig &config) const 00126 { 00127 return dynamic_reconfigure::ConfigTools::getParameter(msg, name, config.*field); 00128 } 00129 00130 virtual void toMessage(dynamic_reconfigure::Config &msg, const SplitterConfig &config) const 00131 { 00132 dynamic_reconfigure::ConfigTools::appendParameter(msg, name, config.*field); 00133 } 00134 }; 00135 00136 //#line 12 "../cfg/splitter.cfg" 00137 std::string sizes; 00138 //#line 13 "../cfg/splitter.cfg" 00139 std::string topics; 00140 //#line 14 "../cfg/splitter.cfg" 00141 std::string frames; 00142 //#line 138 "/opt/ros/electric/stacks/driver_common/dynamic_reconfigure/templates/ConfigType.h" 00143 00144 bool __fromMessage__(dynamic_reconfigure::Config &msg) 00145 { 00146 const std::vector<AbstractParamDescriptionConstPtr> &__param_descriptions__ = __getParamDescriptions__(); 00147 int count = 0; 00148 for (std::vector<AbstractParamDescriptionConstPtr>::const_iterator i = __param_descriptions__.begin(); i != __param_descriptions__.end(); i++) 00149 if ((*i)->fromMessage(msg, *this)) 00150 count++; 00151 if (count != dynamic_reconfigure::ConfigTools::size(msg)) 00152 { 00153 ROS_ERROR("SplitterConfig::__fromMessage__ called with an unexpected parameter."); 00154 ROS_ERROR("Booleans:"); 00155 for (unsigned int i = 0; i < msg.bools.size(); i++) 00156 ROS_ERROR(" %s", msg.bools[i].name.c_str()); 00157 ROS_ERROR("Integers:"); 00158 for (unsigned int i = 0; i < msg.ints.size(); i++) 00159 ROS_ERROR(" %s", msg.ints[i].name.c_str()); 00160 ROS_ERROR("Doubles:"); 00161 for (unsigned int i = 0; i < msg.doubles.size(); i++) 00162 ROS_ERROR(" %s", msg.doubles[i].name.c_str()); 00163 ROS_ERROR("Strings:"); 00164 for (unsigned int i = 0; i < msg.strs.size(); i++) 00165 ROS_ERROR(" %s", msg.strs[i].name.c_str()); 00166 // @todo Check that there are no duplicates. Make this error more 00167 // explicit. 00168 return false; 00169 } 00170 return true; 00171 } 00172 00173 // This version of __toMessage__ is used during initialization of 00174 // statics when __getParamDescriptions__ can't be called yet. 00175 void __toMessage__(dynamic_reconfigure::Config &msg, const std::vector<AbstractParamDescriptionConstPtr> &__param_descriptions__) const 00176 { 00177 dynamic_reconfigure::ConfigTools::clear(msg); 00178 for (std::vector<AbstractParamDescriptionConstPtr>::const_iterator i = __param_descriptions__.begin(); i != __param_descriptions__.end(); i++) 00179 (*i)->toMessage(msg, *this); 00180 } 00181 00182 void __toMessage__(dynamic_reconfigure::Config &msg) const 00183 { 00184 const std::vector<AbstractParamDescriptionConstPtr> &__param_descriptions__ = __getParamDescriptions__(); 00185 __toMessage__(msg, __param_descriptions__); 00186 } 00187 00188 void __toServer__(const ros::NodeHandle &nh) const 00189 { 00190 const std::vector<AbstractParamDescriptionConstPtr> &__param_descriptions__ = __getParamDescriptions__(); 00191 for (std::vector<AbstractParamDescriptionConstPtr>::const_iterator i = __param_descriptions__.begin(); i != __param_descriptions__.end(); i++) 00192 (*i)->toServer(nh, *this); 00193 } 00194 00195 void __fromServer__(const ros::NodeHandle &nh) 00196 { 00197 const std::vector<AbstractParamDescriptionConstPtr> &__param_descriptions__ = __getParamDescriptions__(); 00198 for (std::vector<AbstractParamDescriptionConstPtr>::const_iterator i = __param_descriptions__.begin(); i != __param_descriptions__.end(); i++) 00199 (*i)->fromServer(nh, *this); 00200 } 00201 00202 void __clamp__() 00203 { 00204 const std::vector<AbstractParamDescriptionConstPtr> &__param_descriptions__ = __getParamDescriptions__(); 00205 const SplitterConfig &__max__ = __getMax__(); 00206 const SplitterConfig &__min__ = __getMin__(); 00207 for (std::vector<AbstractParamDescriptionConstPtr>::const_iterator i = __param_descriptions__.begin(); i != __param_descriptions__.end(); i++) 00208 (*i)->clamp(*this, __max__, __min__); 00209 } 00210 00211 uint32_t __level__(const SplitterConfig &config) const 00212 { 00213 const std::vector<AbstractParamDescriptionConstPtr> &__param_descriptions__ = __getParamDescriptions__(); 00214 uint32_t level = 0; 00215 for (std::vector<AbstractParamDescriptionConstPtr>::const_iterator i = __param_descriptions__.begin(); i != __param_descriptions__.end(); i++) 00216 (*i)->calcLevel(level, config, *this); 00217 return level; 00218 } 00219 00220 static const dynamic_reconfigure::ConfigDescription &__getDescriptionMessage__(); 00221 static const SplitterConfig &__getDefault__(); 00222 static const SplitterConfig &__getMax__(); 00223 static const SplitterConfig &__getMin__(); 00224 static const std::vector<AbstractParamDescriptionConstPtr> &__getParamDescriptions__(); 00225 00226 private: 00227 static const SplitterConfigStatics *__get_statics__(); 00228 }; 00229 00230 template <> // Max and min are ignored for strings. 00231 inline void SplitterConfig::ParamDescription<std::string>::clamp(SplitterConfig &config, const SplitterConfig &max, const SplitterConfig &min) const 00232 { 00233 return; 00234 } 00235 00236 class SplitterConfigStatics 00237 { 00238 friend class SplitterConfig; 00239 00240 SplitterConfigStatics() 00241 { 00242 //#line 12 "../cfg/splitter.cfg" 00243 __min__.sizes = ""; 00244 //#line 12 "../cfg/splitter.cfg" 00245 __max__.sizes = ""; 00246 //#line 12 "../cfg/splitter.cfg" 00247 __default__.sizes = "256 256"; 00248 //#line 12 "../cfg/splitter.cfg" 00249 __param_descriptions__.push_back(SplitterConfig::AbstractParamDescriptionConstPtr(new SplitterConfig::ParamDescription<std::string>("sizes", "str", 0, "Sizes", "", &SplitterConfig::sizes))); 00250 //#line 13 "../cfg/splitter.cfg" 00251 __min__.topics = ""; 00252 //#line 13 "../cfg/splitter.cfg" 00253 __max__.topics = ""; 00254 //#line 13 "../cfg/splitter.cfg" 00255 __default__.topics = "scan1 scan2"; 00256 //#line 13 "../cfg/splitter.cfg" 00257 __param_descriptions__.push_back(SplitterConfig::AbstractParamDescriptionConstPtr(new SplitterConfig::ParamDescription<std::string>("topics", "str", 0, "Topics", "", &SplitterConfig::topics))); 00258 //#line 14 "../cfg/splitter.cfg" 00259 __min__.frames = ""; 00260 //#line 14 "../cfg/splitter.cfg" 00261 __max__.frames = ""; 00262 //#line 14 "../cfg/splitter.cfg" 00263 __default__.frames = "laser laser"; 00264 //#line 14 "../cfg/splitter.cfg" 00265 __param_descriptions__.push_back(SplitterConfig::AbstractParamDescriptionConstPtr(new SplitterConfig::ParamDescription<std::string>("frames", "str", 0, "Frames", "", &SplitterConfig::frames))); 00266 //#line 239 "/opt/ros/electric/stacks/driver_common/dynamic_reconfigure/templates/ConfigType.h" 00267 00268 for (std::vector<SplitterConfig::AbstractParamDescriptionConstPtr>::const_iterator i = __param_descriptions__.begin(); i != __param_descriptions__.end(); i++) 00269 __description_message__.parameters.push_back(**i); 00270 __max__.__toMessage__(__description_message__.max, __param_descriptions__); 00271 __min__.__toMessage__(__description_message__.min, __param_descriptions__); 00272 __default__.__toMessage__(__description_message__.dflt, __param_descriptions__); 00273 } 00274 std::vector<SplitterConfig::AbstractParamDescriptionConstPtr> __param_descriptions__; 00275 SplitterConfig __max__; 00276 SplitterConfig __min__; 00277 SplitterConfig __default__; 00278 dynamic_reconfigure::ConfigDescription __description_message__; 00279 static const SplitterConfigStatics *get_instance() 00280 { 00281 // Split this off in a separate function because I know that 00282 // instance will get initialized the first time get_instance is 00283 // called, and I am guaranteeing that get_instance gets called at 00284 // most once. 00285 static SplitterConfigStatics instance; 00286 return &instance; 00287 } 00288 }; 00289 00290 inline const dynamic_reconfigure::ConfigDescription &SplitterConfig::__getDescriptionMessage__() 00291 { 00292 return __get_statics__()->__description_message__; 00293 } 00294 00295 inline const SplitterConfig &SplitterConfig::__getDefault__() 00296 { 00297 return __get_statics__()->__default__; 00298 } 00299 00300 inline const SplitterConfig &SplitterConfig::__getMax__() 00301 { 00302 return __get_statics__()->__max__; 00303 } 00304 00305 inline const SplitterConfig &SplitterConfig::__getMin__() 00306 { 00307 return __get_statics__()->__min__; 00308 } 00309 00310 inline const std::vector<SplitterConfig::AbstractParamDescriptionConstPtr> &SplitterConfig::__getParamDescriptions__() 00311 { 00312 return __get_statics__()->__param_descriptions__; 00313 } 00314 00315 inline const SplitterConfigStatics *SplitterConfig::__get_statics__() 00316 { 00317 const static SplitterConfigStatics *statics; 00318 00319 if (statics) // Common case 00320 return statics; 00321 00322 boost::mutex::scoped_lock lock(dynamic_reconfigure::__init_mutex__); 00323 00324 if (statics) // In case we lost a race. 00325 return statics; 00326 00327 statics = SplitterConfigStatics::get_instance(); 00328 00329 return statics; 00330 } 00331 00332 00333 } 00334 00335 #endif // __SPLITTERRECONFIGURATOR_H__