diff --git a/src/signal/signal-caster.cpp b/src/signal/signal-caster.cpp index 696fc4d938f807aa16396c64d3e893fa12c609d6..84f3f42ed9546dc9329641c39cad7c74d2b605a8 100644 --- a/src/signal/signal-caster.cpp +++ b/src/signal/signal-caster.cpp @@ -48,6 +48,7 @@ void SignalCaster::disp(const any& object, ostream& os) { const char* type_name = object.type().name(); map<string, cast_functions_type>::iterator it = functions_.find(type_name); + if ( it == functions_.end() ) throw ExceptionSignal(ExceptionSignal::BAD_CAST); //TODO: throw "cast not registered" exception (*it).second.get<0>()(object, os); // call display function (tuple index 0) @@ -65,6 +66,7 @@ void SignalCaster::trace(const any& object, ostream& os) { any SignalCaster::cast(const type_info& type, istringstream& iss) { const char* type_name = type.name(); map<string, cast_functions_type>::iterator it = functions_.find(type_name); + if ( it == functions_.end() ) throw ExceptionSignal(ExceptionSignal::BAD_CAST);; //TODO: throw "cast not registered" exception return (*it).second.get<1>()(iss); // call cast function (tuple index 1) diff --git a/unitTesting/test_signalcast.cpp b/unitTesting/test_signalcast.cpp new file mode 100644 index 0000000000000000000000000000000000000000..45f3c15dd5eecef5da46afd23c139911b807fce5 --- /dev/null +++ b/unitTesting/test_signalcast.cpp @@ -0,0 +1,49 @@ +/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + * Copyright Projet JRL-JAPAN, Tsukuba, 2007 + *+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + * + * File: test_entity.cc + * Project: dynamicGraph + * Author: François Bleibel + * + * Version control + * =============== + * + * $Id$ + * + * Description + * ============ + * + * + * ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ + +/* -------------------------------------------------------------------------- */ +/* --- INCLUDES ------------------------------------------------------------- */ +/* -------------------------------------------------------------------------- */ + + +#include <string> +#include <iostream> +#include <cstdlib> + +#include <dynamic-graph/factory.h> +#include <dynamic-graph/entity.h> +#include <dynamic-graph/debug.h> +#include <dynamic-graph/pool.h> +#include <dynamic-graph/signal.h> + +#include <memory> + +using namespace std; +using namespace dynamicgraph; + +main() { + Signal<int, int> mySignal("out"); + istringstream value("5"); + cout << "[cast] Setting signal value to " << value.str() << endl; + mySignal.set(value); // use "set" operation + cout << "[disp] The value read is "; + mySignal.get(cout); + cout << "[trace] Printing out trace: "; + mySignal.trace(cout); +}