|
From: <rob...@us...> - 2008-11-25 01:29:10
|
Revision: 7242
http://personalrobots.svn.sourceforge.net/personalrobots/?rev=7242&view=rev
Author: rob_wheeler
Date: 2008-11-25 01:29:02 +0000 (Tue, 25 Nov 2008)
Log Message:
-----------
Use Loki's factory which is held in a SingletonHolder and cleans up after itself properly. Remove Stu's Factory (based on the Loki one).
Modified Paths:
--------------
pkg/trunk/mechanism/mechanism_control/src/mechanism_control.cpp
pkg/trunk/mechanism/mechanism_model/include/mechanism_model/controller.h
pkg/trunk/mechanism/mechanism_model/include/mechanism_model/transmission.h
pkg/trunk/mechanism/mechanism_model/manifest.xml
pkg/trunk/mechanism/mechanism_model/src/robot.cpp
Removed Paths:
-------------
pkg/trunk/util/misc_utils/include/misc_utils/factory.h
Modified: pkg/trunk/mechanism/mechanism_control/src/mechanism_control.cpp
===================================================================
--- pkg/trunk/mechanism/mechanism_control/src/mechanism_control.cpp 2008-11-25 01:15:13 UTC (rev 7241)
+++ pkg/trunk/mechanism/mechanism_control/src/mechanism_control.cpp 2008-11-25 01:29:02 UTC (rev 7242)
@@ -136,7 +136,7 @@
const std::string &name,
TiXmlElement *config)
{
- controller::Controller *c = controller::ControllerFactory::instance().create(type);
+ controller::Controller *c = controller::ControllerFactory::Instance().CreateObject(type);
if (c == NULL)
return false;
printf("Spawning %s: %p\n", name.c_str(), &model_);
@@ -321,10 +321,8 @@
robot_srvs::ListControllerTypes::request &req,
robot_srvs::ListControllerTypes::response &resp)
{
- std::vector<std::string> types;
-
(void) req;
- controller::ControllerFactory::instance().getTypes(&types);
+ std::vector<std::string> types = controller::ControllerFactory::Instance().RegisteredIds();
resp.set_types_vec(types);
return true;
}
Modified: pkg/trunk/mechanism/mechanism_model/include/mechanism_model/controller.h
===================================================================
--- pkg/trunk/mechanism/mechanism_model/include/mechanism_model/controller.h 2008-11-25 01:15:13 UTC (rev 7241)
+++ pkg/trunk/mechanism/mechanism_model/include/mechanism_model/controller.h 2008-11-25 01:29:02 UTC (rev 7242)
@@ -42,7 +42,7 @@
*/
/***************************************************/
-#include <misc_utils/factory.h>
+#include <loki/Factory.h>
#include <mechanism_model/robot.h>
#include <tinyxml/tinyxml.h>
@@ -71,12 +71,17 @@
class Controller;
-typedef misc_utils::Factory<Controller> ControllerFactory;
+typedef Loki::SingletonHolder
+<
+ Loki::Factory< Controller, std::string >,
+ Loki::CreateUsingNew,
+ Loki::LongevityLifetime::DieAsSmallObjectChild
+> ControllerFactory;
#define ROS_REGISTER_CONTROLLER(c) \
controller::Controller *ROS_New_##c() { return new c(); } \
bool ROS_CONTROLLER_##c = \
- controller::ControllerFactory::instance().registerType(#c, ROS_New_##c);
+ controller::ControllerFactory::Instance().Register(#c, ROS_New_##c);
class Controller
{
Modified: pkg/trunk/mechanism/mechanism_model/include/mechanism_model/transmission.h
===================================================================
--- pkg/trunk/mechanism/mechanism_model/include/mechanism_model/transmission.h 2008-11-25 01:15:13 UTC (rev 7241)
+++ pkg/trunk/mechanism/mechanism_model/include/mechanism_model/transmission.h 2008-11-25 01:29:02 UTC (rev 7242)
@@ -38,7 +38,7 @@
#define TRANSMISSION_H
#include <tinyxml/tinyxml.h>
-#include <misc_utils/factory.h>
+#include <loki/Factory.h>
#include "mechanism_model/joint.h"
#include "hardware_interface/hardware_interface.h"
@@ -47,12 +47,17 @@
class Robot;
class Transmission;
-typedef misc_utils::Factory<Transmission> TransmissionFactory;
+typedef Loki::SingletonHolder
+<
+ Loki::Factory< Transmission, std::string >,
+ Loki::CreateUsingNew,
+ Loki::LongevityLifetime::DieAsSmallObjectChild
+> TransmissionFactory;
#define ROS_REGISTER_TRANSMISSION(c) \
mechanism::Transmission *ROS_New_##c() { return new c(); } \
bool ROS_TRANSMISSION_##c = \
- mechanism::TransmissionFactory::instance().registerType(#c, ROS_New_##c);
+ mechanism::TransmissionFactory::Instance().Register(#c, ROS_New_##c);
class Transmission
Modified: pkg/trunk/mechanism/mechanism_model/manifest.xml
===================================================================
--- pkg/trunk/mechanism/mechanism_model/manifest.xml 2008-11-25 01:15:13 UTC (rev 7241)
+++ pkg/trunk/mechanism/mechanism_model/manifest.xml 2008-11-25 01:29:02 UTC (rev 7242)
@@ -7,7 +7,7 @@
<depend package="roscpp" />
<depend package="hardware_interface" />
<depend package="stl_utils" />
-<depend package="misc_utils" />
+<depend package="loki" />
<depend package="tinyxml" />
<depend package="wg_robot_description_parser" />
<depend package="tf" />
Modified: pkg/trunk/mechanism/mechanism_model/src/robot.cpp
===================================================================
--- pkg/trunk/mechanism/mechanism_model/src/robot.cpp 2008-11-25 01:15:13 UTC (rev 7241)
+++ pkg/trunk/mechanism/mechanism_model/src/robot.cpp 2008-11-25 01:29:02 UTC (rev 7242)
@@ -57,7 +57,7 @@
xit = xit->NextSiblingElement("transmission"))
{
const char *type = xit->Attribute("type");
- Transmission *t = type ? TransmissionFactory::instance().create(type) : NULL;
+ Transmission *t = type ? TransmissionFactory::Instance().CreateObject(type) : NULL;
if (!t)
fprintf(stderr, "Unknown transmission type: \"%s\"\n", type);
else if (!t->initXml(xit, this))
Deleted: pkg/trunk/util/misc_utils/include/misc_utils/factory.h
===================================================================
--- pkg/trunk/util/misc_utils/include/misc_utils/factory.h 2008-11-25 01:15:13 UTC (rev 7241)
+++ pkg/trunk/util/misc_utils/include/misc_utils/factory.h 2008-11-25 01:29:02 UTC (rev 7242)
@@ -1,86 +0,0 @@
-/*
- * Copyright (c) 2008, Willow Garage, Inc.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * * Neither the name of the Willow Garage, Inc. nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-#ifndef ROS_MISC_FACTORY_H
-#define ROS_MISC_FACTORY_H
-
-#include <string>
-#include <map>
-#include <vector>
-
-namespace misc_utils {
-
-template <class BaseResult,
- class Constructor = BaseResult* (*)()>
-class Factory
-{
-public:
- static Factory<BaseResult>& instance()
- {
- static Factory<BaseResult> *instance = NULL;
- if (instance == NULL)
- instance = new Factory<BaseResult>;
- return *instance;
- }
-
- BaseResult *create(const std::string &name)
- {
- typename ConstructorMap::iterator it = types_.find(name);
- if (it == types_.end())
- return NULL;
- return (it->second)();
- }
-
- bool registerType(const std::string &name, Constructor c)
- {
- typename ConstructorMap::value_type value(name, c);
- types_.insert(value);
- return true;
- }
-
- void getTypes(std::vector<std::string> *result)
- {
- result->resize(types_.size());
- int i = 0;
- typename ConstructorMap::const_iterator it;
- for (it = types_.begin(); it != types_.end(); ++it)
- (*result)[i++] = it->first;
- }
-
-private:
- Factory() {}
- ~Factory() {}
-
- typedef std::map<std::string,Constructor> ConstructorMap;
- ConstructorMap types_;
-};
-
-}
-
-
-#endif
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|