Skip to content
Snippets Groups Projects
Commit 841c1354 authored by Nicolas Mansard's avatar Nicolas Mansard
Browse files

Modify the g_caster object with a singleton design.

parent d586945f
No related branches found
No related tags found
No related merge requests found
......@@ -47,7 +47,6 @@ namespace dynamicgraph
class DYNAMIC_GRAPH_DLLAPI SignalCaster
{
public:
explicit SignalCaster ();
virtual ~SignalCaster ();
/// Typedef of displayer functions that take an encapsulated 'any'
......@@ -87,10 +86,14 @@ namespace dynamicgraph
std::map<std::string, cast_functions_type> functions_;
std::map<std::string, const std::type_info*> type_info_;
private:
explicit SignalCaster ();
friend SignalCaster& g_caster(void);
};
/// The library-wide instance of SignalCaster
extern DYNAMIC_GRAPH_DLLAPI SignalCaster g_caster;
/// Access on the library wide caster instance (simple singleton design).
DYNAMIC_GRAPH_DLLAPI SignalCaster& g_caster(void);
///The SignalCast registerer class. Can be used to automatically
/// register a cast when instanced somewhere in a cpp file. Pass the
......@@ -105,7 +108,7 @@ namespace dynamicgraph
SignalCaster::caster_type caster,
SignalCaster::tracer_type tracer)
{
g_caster.registerCast(type, displayer, caster, tracer);
g_caster().registerCast(type, displayer, caster, tracer);
}
};
......@@ -117,19 +120,19 @@ namespace dynamicgraph
template<typename T>
void signal_disp (const T& value, std::ostream& os)
{
g_caster.disp(value, os);
g_caster().disp(value, os);
}
template<typename T>
T signal_cast(std::istringstream& iss)
{
return boost::any_cast<T>(g_caster.cast(typeid(T), iss));
return boost::any_cast<T>(g_caster().cast(typeid(T), iss));
}
template<typename T>
void signal_trace (const T& value, std::ostream& os)
{
g_caster.trace(value, os);
g_caster().trace(value, os);
}
} // end of namespace dynamicgraph.
......
......@@ -70,10 +70,10 @@ namespace dynamicgraph
namespace
{
DefaultCastRegisterer<double> double_reg;
DefaultCastRegisterer<int> int_reg;
DefaultCastRegisterer<unsigned int> uint_reg;
DefaultCastRegisterer<dynamicgraph::Vector> vectorCastRegisterer;
DefaultCastRegisterer<dynamicgraph::Matrix> matrixCastRegisterer;
// DefaultCastRegisterer<int> int_reg;
// DefaultCastRegisterer<unsigned int> uint_reg;
// DefaultCastRegisterer<dynamicgraph::Vector> vectorCastRegisterer;
// DefaultCastRegisterer<dynamicgraph::Matrix> matrixCastRegisterer;
} // end of anonymous namespace.
} // namespace dynamicgraph
......@@ -120,6 +120,21 @@ namespace dynamicgraph
}
/// The global instance of the caster class.
SignalCaster g_caster;
//SignalCaster g_caster;
/// Singleton on the library-wide instance of SignalCaster
SignalCaster& g_caster(void)
{
static SignalCaster staticptr;
return staticptr;
}
} // namespace dynamicgraph
struct sigcastint
{
sigcastint() { std::cout << "sigcastint!" << std::endl; }
};
sigcastint sigcastint_init;
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment