00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047 #ifndef __pointcloud_to_laserscan__CLOUDSCANCONFIG_H__
00048 #define __pointcloud_to_laserscan__CLOUDSCANCONFIG_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/Group.h>
00056 #include <dynamic_reconfigure/config_init_mutex.h>
00057 #include <boost/any.hpp>
00058
00059 namespace pointcloud_to_laserscan
00060 {
00061 class CloudScanConfigStatics;
00062
00063 class CloudScanConfig
00064 {
00065 public:
00066 class AbstractParamDescription : public dynamic_reconfigure::ParamDescription
00067 {
00068 public:
00069 AbstractParamDescription(std::string n, std::string t, uint32_t l,
00070 std::string d, std::string e)
00071 {
00072 name = n;
00073 type = t;
00074 level = l;
00075 description = d;
00076 edit_method = e;
00077 }
00078
00079 virtual void clamp(CloudScanConfig &config, const CloudScanConfig &max, const CloudScanConfig &min) const = 0;
00080 virtual void calcLevel(uint32_t &level, const CloudScanConfig &config1, const CloudScanConfig &config2) const = 0;
00081 virtual void fromServer(const ros::NodeHandle &nh, CloudScanConfig &config) const = 0;
00082 virtual void toServer(const ros::NodeHandle &nh, const CloudScanConfig &config) const = 0;
00083 virtual bool fromMessage(const dynamic_reconfigure::Config &msg, CloudScanConfig &config) const = 0;
00084 virtual void toMessage(dynamic_reconfigure::Config &msg, const CloudScanConfig &config) const = 0;
00085 virtual void getValue(const CloudScanConfig &config, boost::any &val) const = 0;
00086 };
00087
00088 typedef boost::shared_ptr<AbstractParamDescription> AbstractParamDescriptionPtr;
00089 typedef boost::shared_ptr<const AbstractParamDescription> AbstractParamDescriptionConstPtr;
00090
00091 template <class T>
00092 class ParamDescription : public AbstractParamDescription
00093 {
00094 public:
00095 ParamDescription(std::string name, std::string type, uint32_t level,
00096 std::string description, std::string edit_method, T CloudScanConfig::* f) :
00097 AbstractParamDescription(name, type, level, description, edit_method),
00098 field(f)
00099 {}
00100
00101 T (CloudScanConfig::* field);
00102
00103 virtual void clamp(CloudScanConfig &config, const CloudScanConfig &max, const CloudScanConfig &min) const
00104 {
00105 if (config.*field > max.*field)
00106 config.*field = max.*field;
00107
00108 if (config.*field < min.*field)
00109 config.*field = min.*field;
00110 }
00111
00112 virtual void calcLevel(uint32_t &comb_level, const CloudScanConfig &config1, const CloudScanConfig &config2) const
00113 {
00114 if (config1.*field != config2.*field)
00115 comb_level |= level;
00116 }
00117
00118 virtual void fromServer(const ros::NodeHandle &nh, CloudScanConfig &config) const
00119 {
00120 nh.getParam(name, config.*field);
00121 }
00122
00123 virtual void toServer(const ros::NodeHandle &nh, const CloudScanConfig &config) const
00124 {
00125 nh.setParam(name, config.*field);
00126 }
00127
00128 virtual bool fromMessage(const dynamic_reconfigure::Config &msg, CloudScanConfig &config) const
00129 {
00130 return dynamic_reconfigure::ConfigTools::getParameter(msg, name, config.*field);
00131 }
00132
00133 virtual void toMessage(dynamic_reconfigure::Config &msg, const CloudScanConfig &config) const
00134 {
00135 dynamic_reconfigure::ConfigTools::appendParameter(msg, name, config.*field);
00136 }
00137
00138 virtual void getValue(const CloudScanConfig &config, boost::any &val) const
00139 {
00140 val = config.*field;
00141 }
00142 };
00143
00144 class AbstractGroupDescription : public dynamic_reconfigure::Group
00145 {
00146 public:
00147 AbstractGroupDescription(std::string n, std::string t, int p, int i, bool s)
00148 {
00149 name = n;
00150 type = t;
00151 parent = p;
00152 state = s;
00153 id = i;
00154 }
00155
00156 std::vector<AbstractParamDescriptionConstPtr> abstract_parameters;
00157 bool state;
00158
00159 virtual void toMessage(dynamic_reconfigure::Config &msg, const boost::any &config) const = 0;
00160 virtual bool fromMessage(const dynamic_reconfigure::Config &msg, boost::any &config) const =0;
00161 virtual void updateParams(boost::any &cfg, CloudScanConfig &top) const= 0;
00162 virtual void setInitialState(boost::any &cfg) const = 0;
00163
00164
00165 void convertParams()
00166 {
00167 for(std::vector<AbstractParamDescriptionConstPtr>::const_iterator i = abstract_parameters.begin(); i != abstract_parameters.end(); i++)
00168 {
00169 parameters.push_back(dynamic_reconfigure::ParamDescription(**i));
00170 }
00171 }
00172 };
00173
00174 typedef boost::shared_ptr<AbstractGroupDescription> AbstractGroupDescriptionPtr;
00175 typedef boost::shared_ptr<const AbstractGroupDescription> AbstractGroupDescriptionConstPtr;
00176
00177 template<class T, class PT>
00178 class GroupDescription : public AbstractGroupDescription
00179 {
00180 public:
00181 GroupDescription(std::string name, std::string type, int parent, int id, bool s, T PT::* f) : AbstractGroupDescription(name, type, parent, id, s), field(f)
00182 {
00183 }
00184
00185 GroupDescription(const GroupDescription<T, PT>& g): AbstractGroupDescription(g.name, g.type, g.parent, g.id, g.state), field(g.field), groups(g.groups)
00186 {
00187 parameters = g.parameters;
00188 abstract_parameters = g.abstract_parameters;
00189 }
00190
00191 virtual bool fromMessage(const dynamic_reconfigure::Config &msg, boost::any &cfg) const
00192 {
00193 PT* config = boost::any_cast<PT*>(cfg);
00194 if(!dynamic_reconfigure::ConfigTools::getGroupState(msg, name, (*config).*field))
00195 return false;
00196
00197 for(std::vector<AbstractGroupDescriptionConstPtr>::const_iterator i = groups.begin(); i != groups.end(); i++)
00198 {
00199 boost::any n = &((*config).*field);
00200 if(!(*i)->fromMessage(msg, n))
00201 return false;
00202 }
00203
00204 return true;
00205 }
00206
00207 virtual void setInitialState(boost::any &cfg) const
00208 {
00209 PT* config = boost::any_cast<PT*>(cfg);
00210 T* group = &((*config).*field);
00211 group->state = state;
00212
00213 for(std::vector<AbstractGroupDescriptionConstPtr>::const_iterator i = groups.begin(); i != groups.end(); i++)
00214 {
00215 boost::any n = boost::any(&((*config).*field));
00216 (*i)->setInitialState(n);
00217 }
00218
00219 }
00220
00221 virtual void updateParams(boost::any &cfg, CloudScanConfig &top) const
00222 {
00223 PT* config = boost::any_cast<PT*>(cfg);
00224
00225 T* f = &((*config).*field);
00226 f->setParams(top, abstract_parameters);
00227
00228 for(std::vector<AbstractGroupDescriptionConstPtr>::const_iterator i = groups.begin(); i != groups.end(); i++)
00229 {
00230 boost::any n = &((*config).*field);
00231 (*i)->updateParams(n, top);
00232 }
00233 }
00234
00235 virtual void toMessage(dynamic_reconfigure::Config &msg, const boost::any &cfg) const
00236 {
00237 const PT config = boost::any_cast<PT>(cfg);
00238 dynamic_reconfigure::ConfigTools::appendGroup<T>(msg, name, id, parent, config.*field);
00239
00240 for(std::vector<AbstractGroupDescriptionConstPtr>::const_iterator i = groups.begin(); i != groups.end(); i++)
00241 {
00242 (*i)->toMessage(msg, config.*field);
00243 }
00244 }
00245
00246 T (PT::* field);
00247 std::vector<CloudScanConfig::AbstractGroupDescriptionConstPtr> groups;
00248 };
00249
00250 class DEFAULT
00251 {
00252 public:
00253 DEFAULT()
00254 {
00255 state = true;
00256 name = "Default";
00257 }
00258
00259 void setParams(CloudScanConfig &config, const std::vector<AbstractParamDescriptionConstPtr> params)
00260 {
00261 for (std::vector<AbstractParamDescriptionConstPtr>::const_iterator i = params.begin(); i != params.end(); i++)
00262 {
00263 boost::any val;
00264 (*i)->getValue(config, val);
00265
00266 if("min_height"==(*i)->name){min_height = boost::any_cast<double>(val);}
00267 if("max_height"==(*i)->name){max_height = boost::any_cast<double>(val);}
00268 if("angle_min"==(*i)->name){angle_min = boost::any_cast<double>(val);}
00269 if("angle_max"==(*i)->name){angle_max = boost::any_cast<double>(val);}
00270 if("angle_increment"==(*i)->name){angle_increment = boost::any_cast<double>(val);}
00271 if("scan_time"==(*i)->name){scan_time = boost::any_cast<double>(val);}
00272 if("range_min"==(*i)->name){range_min = boost::any_cast<double>(val);}
00273 if("range_max"==(*i)->name){range_max = boost::any_cast<double>(val);}
00274 if("output_frame_id"==(*i)->name){output_frame_id = boost::any_cast<std::string>(val);}
00275 }
00276 }
00277
00278 double min_height;
00279 double max_height;
00280 double angle_min;
00281 double angle_max;
00282 double angle_increment;
00283 double scan_time;
00284 double range_min;
00285 double range_max;
00286 std::string output_frame_id;
00287
00288 bool state;
00289 std::string name;
00290
00291
00292 }groups;
00293
00294
00295
00296
00297 double min_height;
00298
00299 double max_height;
00300
00301 double angle_min;
00302
00303 double angle_max;
00304
00305 double angle_increment;
00306
00307 double scan_time;
00308
00309 double range_min;
00310
00311 double range_max;
00312
00313 std::string output_frame_id;
00314
00315
00316 bool __fromMessage__(dynamic_reconfigure::Config &msg)
00317 {
00318 const std::vector<AbstractParamDescriptionConstPtr> &__param_descriptions__ = __getParamDescriptions__();
00319 const std::vector<AbstractGroupDescriptionConstPtr> &__group_descriptions__ = __getGroupDescriptions__();
00320
00321 int count = 0;
00322 for (std::vector<AbstractParamDescriptionConstPtr>::const_iterator i = __param_descriptions__.begin(); i != __param_descriptions__.end(); i++)
00323 if ((*i)->fromMessage(msg, *this))
00324 count++;
00325
00326 for (std::vector<AbstractGroupDescriptionConstPtr>::const_iterator i = __group_descriptions__.begin(); i != __group_descriptions__.end(); i ++)
00327 {
00328 if ((*i)->id == 0)
00329 {
00330 boost::any n = boost::any(this);
00331 (*i)->updateParams(n, *this);
00332 (*i)->fromMessage(msg, n);
00333 }
00334 }
00335
00336 if (count != dynamic_reconfigure::ConfigTools::size(msg))
00337 {
00338 ROS_ERROR("CloudScanConfig::__fromMessage__ called with an unexpected parameter.");
00339 ROS_ERROR("Booleans:");
00340 for (unsigned int i = 0; i < msg.bools.size(); i++)
00341 ROS_ERROR(" %s", msg.bools[i].name.c_str());
00342 ROS_ERROR("Integers:");
00343 for (unsigned int i = 0; i < msg.ints.size(); i++)
00344 ROS_ERROR(" %s", msg.ints[i].name.c_str());
00345 ROS_ERROR("Doubles:");
00346 for (unsigned int i = 0; i < msg.doubles.size(); i++)
00347 ROS_ERROR(" %s", msg.doubles[i].name.c_str());
00348 ROS_ERROR("Strings:");
00349 for (unsigned int i = 0; i < msg.strs.size(); i++)
00350 ROS_ERROR(" %s", msg.strs[i].name.c_str());
00351
00352
00353 return false;
00354 }
00355 return true;
00356 }
00357
00358
00359
00360 void __toMessage__(dynamic_reconfigure::Config &msg, const std::vector<AbstractParamDescriptionConstPtr> &__param_descriptions__, const std::vector<AbstractGroupDescriptionConstPtr> &__group_descriptions__) const
00361 {
00362 dynamic_reconfigure::ConfigTools::clear(msg);
00363 for (std::vector<AbstractParamDescriptionConstPtr>::const_iterator i = __param_descriptions__.begin(); i != __param_descriptions__.end(); i++)
00364 (*i)->toMessage(msg, *this);
00365
00366 for (std::vector<AbstractGroupDescriptionConstPtr>::const_iterator i = __group_descriptions__.begin(); i != __group_descriptions__.end(); i++)
00367 {
00368 if((*i)->id == 0)
00369 {
00370 (*i)->toMessage(msg, *this);
00371 }
00372 }
00373 }
00374
00375 void __toMessage__(dynamic_reconfigure::Config &msg) const
00376 {
00377 const std::vector<AbstractParamDescriptionConstPtr> &__param_descriptions__ = __getParamDescriptions__();
00378 const std::vector<AbstractGroupDescriptionConstPtr> &__group_descriptions__ = __getGroupDescriptions__();
00379 __toMessage__(msg, __param_descriptions__, __group_descriptions__);
00380 }
00381
00382 void __toServer__(const ros::NodeHandle &nh) const
00383 {
00384 const std::vector<AbstractParamDescriptionConstPtr> &__param_descriptions__ = __getParamDescriptions__();
00385 for (std::vector<AbstractParamDescriptionConstPtr>::const_iterator i = __param_descriptions__.begin(); i != __param_descriptions__.end(); i++)
00386 (*i)->toServer(nh, *this);
00387 }
00388
00389 void __fromServer__(const ros::NodeHandle &nh)
00390 {
00391 static bool setup=false;
00392
00393 const std::vector<AbstractParamDescriptionConstPtr> &__param_descriptions__ = __getParamDescriptions__();
00394 for (std::vector<AbstractParamDescriptionConstPtr>::const_iterator i = __param_descriptions__.begin(); i != __param_descriptions__.end(); i++)
00395 (*i)->fromServer(nh, *this);
00396
00397 const std::vector<AbstractGroupDescriptionConstPtr> &__group_descriptions__ = __getGroupDescriptions__();
00398 for (std::vector<AbstractGroupDescriptionConstPtr>::const_iterator i = __group_descriptions__.begin(); i != __group_descriptions__.end(); i++){
00399 if (!setup && (*i)->id == 0) {
00400 setup = true;
00401 boost::any n = boost::any(this);
00402 (*i)->setInitialState(n);
00403 }
00404 }
00405 }
00406
00407 void __clamp__()
00408 {
00409 const std::vector<AbstractParamDescriptionConstPtr> &__param_descriptions__ = __getParamDescriptions__();
00410 const CloudScanConfig &__max__ = __getMax__();
00411 const CloudScanConfig &__min__ = __getMin__();
00412 for (std::vector<AbstractParamDescriptionConstPtr>::const_iterator i = __param_descriptions__.begin(); i != __param_descriptions__.end(); i++)
00413 (*i)->clamp(*this, __max__, __min__);
00414 }
00415
00416 uint32_t __level__(const CloudScanConfig &config) const
00417 {
00418 const std::vector<AbstractParamDescriptionConstPtr> &__param_descriptions__ = __getParamDescriptions__();
00419 uint32_t level = 0;
00420 for (std::vector<AbstractParamDescriptionConstPtr>::const_iterator i = __param_descriptions__.begin(); i != __param_descriptions__.end(); i++)
00421 (*i)->calcLevel(level, config, *this);
00422 return level;
00423 }
00424
00425 static const dynamic_reconfigure::ConfigDescription &__getDescriptionMessage__();
00426 static const CloudScanConfig &__getDefault__();
00427 static const CloudScanConfig &__getMax__();
00428 static const CloudScanConfig &__getMin__();
00429 static const std::vector<AbstractParamDescriptionConstPtr> &__getParamDescriptions__();
00430 static const std::vector<AbstractGroupDescriptionConstPtr> &__getGroupDescriptions__();
00431
00432 private:
00433 static const CloudScanConfigStatics *__get_statics__();
00434 };
00435
00436 template <>
00437 inline void CloudScanConfig::ParamDescription<std::string>::clamp(CloudScanConfig &config, const CloudScanConfig &max, const CloudScanConfig &min) const
00438 {
00439 return;
00440 }
00441
00442 class CloudScanConfigStatics
00443 {
00444 friend class CloudScanConfig;
00445
00446 CloudScanConfigStatics()
00447 {
00448 CloudScanConfig::GroupDescription<CloudScanConfig::DEFAULT, CloudScanConfig> Default("Default", "", 0, 0, true, &CloudScanConfig::groups);
00449
00450 __min__.min_height = -10.0;
00451
00452 __max__.min_height = 10.0;
00453
00454 __default__.min_height = 0.1;
00455
00456 Default.abstract_parameters.push_back(CloudScanConfig::AbstractParamDescriptionConstPtr(new CloudScanConfig::ParamDescription<double>("min_height", "double", 0, "The minimum height to include from the point cloud.", "", &CloudScanConfig::min_height)));
00457
00458 __param_descriptions__.push_back(CloudScanConfig::AbstractParamDescriptionConstPtr(new CloudScanConfig::ParamDescription<double>("min_height", "double", 0, "The minimum height to include from the point cloud.", "", &CloudScanConfig::min_height)));
00459
00460 __min__.max_height = -10.0;
00461
00462 __max__.max_height = 10.0;
00463
00464 __default__.max_height = 0.15;
00465
00466 Default.abstract_parameters.push_back(CloudScanConfig::AbstractParamDescriptionConstPtr(new CloudScanConfig::ParamDescription<double>("max_height", "double", 0, "The maximum height to include from the point cloud.", "", &CloudScanConfig::max_height)));
00467
00468 __param_descriptions__.push_back(CloudScanConfig::AbstractParamDescriptionConstPtr(new CloudScanConfig::ParamDescription<double>("max_height", "double", 0, "The maximum height to include from the point cloud.", "", &CloudScanConfig::max_height)));
00469
00470 __min__.angle_min = -3.14159265359;
00471
00472 __max__.angle_min = 3.14159265359;
00473
00474 __default__.angle_min = -1.57079632679;
00475
00476 Default.abstract_parameters.push_back(CloudScanConfig::AbstractParamDescriptionConstPtr(new CloudScanConfig::ParamDescription<double>("angle_min", "double", 0, "The minimum angle of the resulting laser scan.", "", &CloudScanConfig::angle_min)));
00477
00478 __param_descriptions__.push_back(CloudScanConfig::AbstractParamDescriptionConstPtr(new CloudScanConfig::ParamDescription<double>("angle_min", "double", 0, "The minimum angle of the resulting laser scan.", "", &CloudScanConfig::angle_min)));
00479
00480 __min__.angle_max = -3.14159265359;
00481
00482 __max__.angle_max = 3.14159265359;
00483
00484 __default__.angle_max = 1.57079632679;
00485
00486 Default.abstract_parameters.push_back(CloudScanConfig::AbstractParamDescriptionConstPtr(new CloudScanConfig::ParamDescription<double>("angle_max", "double", 0, "The maximum angle of the resulting laser scan.", "", &CloudScanConfig::angle_max)));
00487
00488 __param_descriptions__.push_back(CloudScanConfig::AbstractParamDescriptionConstPtr(new CloudScanConfig::ParamDescription<double>("angle_max", "double", 0, "The maximum angle of the resulting laser scan.", "", &CloudScanConfig::angle_max)));
00489
00490 __min__.angle_increment = 0.0;
00491
00492 __max__.angle_increment = 3.14159265359;
00493
00494 __default__.angle_increment = 0.00872664625997;
00495
00496 Default.abstract_parameters.push_back(CloudScanConfig::AbstractParamDescriptionConstPtr(new CloudScanConfig::ParamDescription<double>("angle_increment", "double", 0, "The angle increment of the resulting laser scan.", "", &CloudScanConfig::angle_increment)));
00497
00498 __param_descriptions__.push_back(CloudScanConfig::AbstractParamDescriptionConstPtr(new CloudScanConfig::ParamDescription<double>("angle_increment", "double", 0, "The angle increment of the resulting laser scan.", "", &CloudScanConfig::angle_increment)));
00499
00500 __min__.scan_time = 0.0;
00501
00502 __max__.scan_time = 1.0;
00503
00504 __default__.scan_time = 0.0333333333333;
00505
00506 Default.abstract_parameters.push_back(CloudScanConfig::AbstractParamDescriptionConstPtr(new CloudScanConfig::ParamDescription<double>("scan_time", "double", 0, "The scan time of the resulting laser scan.", "", &CloudScanConfig::scan_time)));
00507
00508 __param_descriptions__.push_back(CloudScanConfig::AbstractParamDescriptionConstPtr(new CloudScanConfig::ParamDescription<double>("scan_time", "double", 0, "The scan time of the resulting laser scan.", "", &CloudScanConfig::scan_time)));
00509
00510 __min__.range_min = 0.0;
00511
00512 __max__.range_min = 100.0;
00513
00514 __default__.range_min = 0.45;
00515
00516 Default.abstract_parameters.push_back(CloudScanConfig::AbstractParamDescriptionConstPtr(new CloudScanConfig::ParamDescription<double>("range_min", "double", 0, "The minimum range of the resulting laser scan.", "", &CloudScanConfig::range_min)));
00517
00518 __param_descriptions__.push_back(CloudScanConfig::AbstractParamDescriptionConstPtr(new CloudScanConfig::ParamDescription<double>("range_min", "double", 0, "The minimum range of the resulting laser scan.", "", &CloudScanConfig::range_min)));
00519
00520 __min__.range_max = 0.0;
00521
00522 __max__.range_max = 100.0;
00523
00524 __default__.range_max = 10.0;
00525
00526 Default.abstract_parameters.push_back(CloudScanConfig::AbstractParamDescriptionConstPtr(new CloudScanConfig::ParamDescription<double>("range_max", "double", 0, "The maximum range of the resulting laser scan.", "", &CloudScanConfig::range_max)));
00527
00528 __param_descriptions__.push_back(CloudScanConfig::AbstractParamDescriptionConstPtr(new CloudScanConfig::ParamDescription<double>("range_max", "double", 0, "The maximum range of the resulting laser scan.", "", &CloudScanConfig::range_max)));
00529
00530 __min__.output_frame_id = "";
00531
00532 __max__.output_frame_id = "";
00533
00534 __default__.output_frame_id = "/openi_depth_frame";
00535
00536 Default.abstract_parameters.push_back(CloudScanConfig::AbstractParamDescriptionConstPtr(new CloudScanConfig::ParamDescription<std::string>("output_frame_id", "str", 0, "The frame id of the resulting laser scan.", "", &CloudScanConfig::output_frame_id)));
00537
00538 __param_descriptions__.push_back(CloudScanConfig::AbstractParamDescriptionConstPtr(new CloudScanConfig::ParamDescription<std::string>("output_frame_id", "str", 0, "The frame id of the resulting laser scan.", "", &CloudScanConfig::output_frame_id)));
00539
00540 Default.convertParams();
00541
00542 __group_descriptions__.push_back(CloudScanConfig::AbstractGroupDescriptionConstPtr(new CloudScanConfig::GroupDescription<CloudScanConfig::DEFAULT, CloudScanConfig>(Default)));
00543
00544
00545 for (std::vector<CloudScanConfig::AbstractGroupDescriptionConstPtr>::const_iterator i = __group_descriptions__.begin(); i != __group_descriptions__.end(); i++)
00546 {
00547 __description_message__.groups.push_back(**i);
00548 }
00549 __max__.__toMessage__(__description_message__.max, __param_descriptions__, __group_descriptions__);
00550 __min__.__toMessage__(__description_message__.min, __param_descriptions__, __group_descriptions__);
00551 __default__.__toMessage__(__description_message__.dflt, __param_descriptions__, __group_descriptions__);
00552 }
00553 std::vector<CloudScanConfig::AbstractParamDescriptionConstPtr> __param_descriptions__;
00554 std::vector<CloudScanConfig::AbstractGroupDescriptionConstPtr> __group_descriptions__;
00555 CloudScanConfig __max__;
00556 CloudScanConfig __min__;
00557 CloudScanConfig __default__;
00558 dynamic_reconfigure::ConfigDescription __description_message__;
00559
00560 static const CloudScanConfigStatics *get_instance()
00561 {
00562
00563
00564
00565
00566 static CloudScanConfigStatics instance;
00567 return &instance;
00568 }
00569 };
00570
00571 inline const dynamic_reconfigure::ConfigDescription &CloudScanConfig::__getDescriptionMessage__()
00572 {
00573 return __get_statics__()->__description_message__;
00574 }
00575
00576 inline const CloudScanConfig &CloudScanConfig::__getDefault__()
00577 {
00578 return __get_statics__()->__default__;
00579 }
00580
00581 inline const CloudScanConfig &CloudScanConfig::__getMax__()
00582 {
00583 return __get_statics__()->__max__;
00584 }
00585
00586 inline const CloudScanConfig &CloudScanConfig::__getMin__()
00587 {
00588 return __get_statics__()->__min__;
00589 }
00590
00591 inline const std::vector<CloudScanConfig::AbstractParamDescriptionConstPtr> &CloudScanConfig::__getParamDescriptions__()
00592 {
00593 return __get_statics__()->__param_descriptions__;
00594 }
00595
00596 inline const std::vector<CloudScanConfig::AbstractGroupDescriptionConstPtr> &CloudScanConfig::__getGroupDescriptions__()
00597 {
00598 return __get_statics__()->__group_descriptions__;
00599 }
00600
00601 inline const CloudScanConfigStatics *CloudScanConfig::__get_statics__()
00602 {
00603 const static CloudScanConfigStatics *statics;
00604
00605 if (statics)
00606 return statics;
00607
00608 boost::mutex::scoped_lock lock(dynamic_reconfigure::__init_mutex__);
00609
00610 if (statics)
00611 return statics;
00612
00613 statics = CloudScanConfigStatics::get_instance();
00614
00615 return statics;
00616 }
00617
00618
00619 }
00620
00621 #endif // __CLOUDSCANRECONFIGURATOR_H__