6 #ifndef DYNAMIC_GRAPH_SIGNAL_PTR_T_CPP
7 #define DYNAMIC_GRAPH_SIGNAL_PTR_T_CPP
8 #include <dynamic-graph/signal-ptr.h>
10 #undef VP_TEMPLATE_DEBUG_MODE
11 #define VP_TEMPLATE_DEBUG_MODE 0
12 #include <dynamic-graph/debug.h>
15 template <
class T,
class Time>
16 Signal<T, Time> *SignalPtr<T, Time>::getPtr() {
18 if (!isPlugged()) DG_THROW
19 ExceptionSignal(ExceptionSignal::NOT_INITIALIZED,
20 "In SignalPtr: SIN ptr not set.",
" (in signal <%s>)",
26 template <
class T,
class Time>
27 const Signal<T, Time> *SignalPtr<T, Time>::getPtr()
const {
28 dgTDEBUGIN(25) << SignalBase<Time>::name <<
"(" << isPlugged() <<
")" <<
this
29 <<
"->" << signalPtr << std::endl;
32 DG_THROW ExceptionSignal(ExceptionSignal::NOT_INITIALIZED,
33 "In SignalPtr: SIN ptr not set.",
34 " (in signal <%s>)", getName().c_str());
40 template <
class T,
class Time>
41 void SignalPtr<T, Time>::plug(SignalBase<Time> *unknown_ref) {
49 dgTDEBUG(5) <<
"# In T = " << getName() <<
" ="
50 <<
typeid(Signal<T, Time>::Tcopy1).name() <<
"{ " << std::endl;
52 Signal<T, Time> *ref =
dynamic_cast<Signal<T, Time> *
>(unknown_ref);
54 dgTDEBUG(25) <<
"Cast ok." << std::endl;
60 template <
class T,
class Time>
61 bool SignalPtr<T, Time>::needUpdate(
const Time &t)
const {
62 if ((isPlugged()) && (!autoref())) {
63 return getPtr()->needUpdate(t);
65 return Signal<T, Time>::needUpdate(t);
68 template <
class T,
class Time>
69 const Time &SignalPtr<T, Time>::getTime()
const {
70 if ((isPlugged()) && (!autoref())) {
71 return getPtr()->getTime();
73 return Signal<T, Time>::getTime();
76 template <
class T,
class Time>
77 const T &SignalPtr<T, Time>::operator()(
const Time &t) {
81 template <
class T,
class Time>
82 const T &SignalPtr<T, Time>::access(
const Time &t) {
84 if (modeNoThrow && (!isPlugged()) && Signal<T, Time>::copyInit) {
86 return Signal<T, Time>::accessCopy();
87 }
else if (autoref()) {
89 return Signal<T, Time>::access(t);
92 return getPtr()->access(t);
96 template <
class T,
class Time>
97 const T &SignalPtr<T, Time>::accessCopy()
const {
98 if (modeNoThrow && (!isPlugged()) && Signal<T, Time>::copyInit)
99 return Signal<T, Time>::accessCopy();
101 return Signal<T, Time>::accessCopy();
103 return getPtr()->accessCopy();
105 template <
class T,
class Time>
106 std::ostream &SignalPtr<T, Time>::writeGraph(std::ostream &os)
const {
107 std::string LeaderLocalName;
108 std::string LeaderNodeName;
109 Signal<T, Time>::ExtractNodeAndLocalNames(LeaderLocalName, LeaderNodeName);
110 if (isPlugged() && !autoref()) {
111 std::string itLocalName, itNodeName;
112 getPtr()->ExtractNodeAndLocalNames(itLocalName, itNodeName);
113 os <<
"\t\"" << itNodeName <<
"\" -> \"" << LeaderNodeName <<
"\""
115 <<
"\t [ headlabel = \"" << LeaderLocalName <<
"\" , taillabel = \""
116 << itLocalName <<
"\", fontsize=7, fontcolor=red ]" << std::endl;
121 template <
class T,
class Time>
122 std::ostream &SignalPtr<T, Time>::display(std::ostream &os)
const {
123 dgTDEBUGIN(25) << SignalBase<Time>::name <<
this <<
"||" << isPlugged()
124 <<
"||" << signalPtr;
125 { Signal<T, Time>::display(os); }
127 if ((isPlugged()) && (!autoref())) {
128 os <<
" -->-- PLUGGED";
133 os <<
" AUTOPLUGGED";
140 template <
class T,
class Time>
141 std::ostream &SignalPtr<T, Time>::displayDependencies(std::ostream &os,
145 std::string next2)
const {
147 if ((isPlugged()) && (!autoref())) {
148 getPtr()->displayDependencies(
149 os, depth, space, next1 +
"-- " + SignalBase<Time>::name +
" -->",
152 SignalBase<Time>::displayDependencies(os, depth, space, next1, next2);