Skip to content

Commit 225f08e

Browse files
[SignalPtr] Simplify and clean up
- it is not possible any more to plug a signal of type B into a SignalPtr of type A when B derives from A. This feature was anyway not used anymore.
1 parent 15ac538 commit 225f08e

File tree

7 files changed

+11
-188
lines changed

7 files changed

+11
-188
lines changed

include/dynamic-graph/signal-base.h

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -186,16 +186,6 @@ class SignalBase : public boost::noncopyable {
186186

187187
/// \}
188188

189-
/// \name Test
190-
/// \{
191-
virtual void checkCompatibility() {
192-
DG_THROW ExceptionSignal(ExceptionSignal::PLUG_IMPOSSIBLE,
193-
"Abstract signal not compatible with anything.",
194-
"(while trying to plug <%s>).",
195-
this->getName().c_str());
196-
}
197-
/// \}
198-
199189
protected:
200190
std::string name;
201191
Time signalTime;

include/dynamic-graph/signal-ptr.h

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@ class SignalPtr : public virtual Signal<T, Time> {
3131
protected:
3232
Signal<T, Time> *signalPtr;
3333
bool modeNoThrow;
34-
bool transmitAbstract;
3534
SignalBase<Time> *abstractTransmitter;
3635
T *transmitAbstractData;
3736

@@ -42,7 +41,6 @@ class SignalPtr : public virtual Signal<T, Time> {
4241
: Signal<T, Time>(name),
4342
signalPtr(ptr),
4443
modeNoThrow(false),
45-
transmitAbstract(false),
4644
abstractTransmitter(NULL) {}
4745

4846
virtual ~SignalPtr() { signalPtr = NULL; }
@@ -51,15 +49,12 @@ class SignalPtr : public virtual Signal<T, Time> {
5149
/* --- PLUG-IN OPERATION --- */
5250
Signal<T, Time> *getPtr(); // throw
5351
const Signal<T, Time> *getPtr() const; // throw
54-
SignalBase<Time> *getAbstractPtr(); // throw
55-
const SignalBase<Time> *getAbstractPtr() const; // throw
5652
virtual void plug(SignalBase<Time> *ref);
5753

5854
virtual void unplug() { plug(NULL); }
5955

6056
virtual bool isPlugged() const { return (NULL != signalPtr); }
6157
virtual SignalBase<Time> *getPluged() const { return signalPtr; }
62-
virtual bool isAbstractPluged() const;
6358
virtual const Time &getTime() const;
6459

6560
/* Equivalent operator-like definitions. */
@@ -91,8 +86,6 @@ class SignalPtr : public virtual Signal<T, Time> {
9186
virtual inline void setConstantDefault() { setConstantDefault(accessCopy()); }
9287
inline void unsetConstantDefault() { modeNoThrow = false; }
9388

94-
virtual void checkCompatibility();
95-
9689
public: /* --- INHERITANCE --- */
9790
/* SignalPtr could be used as a classical signal, through the normal
9891
* setting functions. The behavior is to plugged the signalPtr on

include/dynamic-graph/signal-ptr.t.cpp

Lines changed: 11 additions & 80 deletions
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,6 @@
1212
#include <dynamic-graph/debug.h>
1313

1414
namespace dynamicgraph {
15-
template <class T, class Time>
16-
bool SignalPtr<T, Time>::isAbstractPluged() const {
17-
return ((NULL != signalPtr) || (abstractTransmitter));
18-
}
19-
2015
template <class T, class Time>
2116
Signal<T, Time> *SignalPtr<T, Time>::getPtr() {
2217
dgTDEBUGIN(25);
@@ -42,38 +37,11 @@ const Signal<T, Time> *SignalPtr<T, Time>::getPtr() const {
4237
return signalPtr;
4338
}
4439

45-
template <class T, class Time>
46-
SignalBase<Time> *SignalPtr<T, Time>::getAbstractPtr() {
47-
if (!isAbstractPluged()) {
48-
DG_THROW ExceptionSignal(ExceptionSignal::NOT_INITIALIZED,
49-
"In SignalPtr: SIN ptr not set.",
50-
" (in signal <%s>)", getName().c_str());
51-
}
52-
if (NULL != signalPtr)
53-
return signalPtr;
54-
else
55-
return abstractTransmitter;
56-
}
57-
58-
template <class T, class Time>
59-
const SignalBase<Time> *SignalPtr<T, Time>::getAbstractPtr() const {
60-
if (!isAbstractPluged()) {
61-
DG_THROW ExceptionSignal(ExceptionSignal::NOT_INITIALIZED,
62-
"In SignalPtr: SIN ptr not set.",
63-
" (in signal <%s>)", getName().c_str());
64-
}
65-
if (NULL != signalPtr)
66-
return signalPtr;
67-
else
68-
return abstractTransmitter;
69-
}
70-
7140
template <class T, class Time>
7241
void SignalPtr<T, Time>::plug(SignalBase<Time> *unknown_ref) {
7342
dgTDEBUGIN(5);
7443
if (!unknown_ref) {
7544
signalPtr = NULL;
76-
transmitAbstract = false;
7745
dgTDEBUGOUT(5);
7846
return;
7947
}
@@ -82,56 +50,25 @@ void SignalPtr<T, Time>::plug(SignalBase<Time> *unknown_ref) {
8250
<< typeid(Signal<T, Time>::Tcopy1).name() << "{ " << std::endl;
8351

8452
Signal<T, Time> *ref = dynamic_cast<Signal<T, Time> *>(unknown_ref);
85-
if (NULL == ref) {
86-
try {
87-
unknown_ref->checkCompatibility();
88-
} catch (T *t) {
89-
dgTDEBUG(25) << "Cast THROW ok." << std::endl;
90-
Signal<T, Time>::setReference(t);
91-
transmitAbstract = true;
92-
abstractTransmitter = unknown_ref;
93-
transmitAbstractData = t;
94-
} catch (...) {
95-
dgTDEBUG(25) << "Fatal error." << std::endl;
96-
transmitAbstract = false;
97-
DG_THROW ExceptionSignal(ExceptionSignal::PLUG_IMPOSSIBLE,
98-
"Compl. Uncompatible types for plugin.",
99-
"(while trying to plug <%s> on <%s>)"
100-
" with types <%s> on <%s>.",
101-
unknown_ref->getName().c_str(),
102-
this->getName().c_str(), typeid(T).name(),
103-
typeid(unknown_ref).name());
104-
}
105-
} else {
53+
if (NULL != ref) {
10654
dgTDEBUG(25) << "Cast ok." << std::endl;
107-
transmitAbstract = false;
10855
signalPtr = ref;
10956
}
11057
dgTDEBUGOUT(5);
11158
}
11259

113-
template <class T, class Time>
114-
void SignalPtr<T, Time>::checkCompatibility() {
115-
if (isPlugged() && (!autoref())) {
116-
getPtr()->checkCompatibility();
117-
} else if (isAbstractPluged() && (!autoref())) {
118-
abstractTransmitter->checkCompatibility();
119-
} else
120-
Signal<T, Time>::checkCompatibility();
121-
}
122-
12360
template <class T, class Time>
12461
bool SignalPtr<T, Time>::needUpdate(const Time &t) const {
125-
if ((isAbstractPluged()) && (!autoref())) {
126-
return getAbstractPtr()->needUpdate(t);
62+
if ((isPlugged()) && (!autoref())) {
63+
return getPtr()->needUpdate(t);
12764
} else
12865
return Signal<T, Time>::needUpdate(t);
12966
}
13067

13168
template <class T, class Time>
13269
const Time &SignalPtr<T, Time>::getTime() const {
133-
if ((isAbstractPluged()) && (!autoref())) {
134-
return getAbstractPtr()->getTime();
70+
if ((isPlugged()) && (!autoref())) {
71+
return getPtr()->getTime();
13572
}
13673
return Signal<T, Time>::getTime();
13774
}
@@ -150,10 +87,6 @@ const T &SignalPtr<T, Time>::access(const Time &t) {
15087
} else if (autoref()) {
15188
dgTDEBUGOUT(15);
15289
return Signal<T, Time>::access(t);
153-
} else if (transmitAbstract) {
154-
abstractTransmitter->recompute(t);
155-
dgTDEBUGOUT(15);
156-
return *transmitAbstractData;
15790
} else {
15891
dgTDEBUGOUT(15);
15992
return getPtr()->access(t);
@@ -166,8 +99,6 @@ const T &SignalPtr<T, Time>::accessCopy() const {
16699
return Signal<T, Time>::accessCopy();
167100
else if (autoref())
168101
return Signal<T, Time>::accessCopy();
169-
else if (transmitAbstract)
170-
return *transmitAbstractData;
171102
else
172103
return getPtr()->accessCopy();
173104
}
@@ -176,9 +107,9 @@ std::ostream &SignalPtr<T, Time>::writeGraph(std::ostream &os) const {
176107
std::string LeaderLocalName;
177108
std::string LeaderNodeName;
178109
Signal<T, Time>::ExtractNodeAndLocalNames(LeaderLocalName, LeaderNodeName);
179-
if (isAbstractPluged() && !autoref()) {
110+
if (isPlugged() && !autoref()) {
180111
std::string itLocalName, itNodeName;
181-
getAbstractPtr()->ExtractNodeAndLocalNames(itLocalName, itNodeName);
112+
getPtr()->ExtractNodeAndLocalNames(itLocalName, itNodeName);
182113
os << "\t\"" << itNodeName << "\" -> \"" << LeaderNodeName << "\""
183114
<< std::endl
184115
<< "\t [ headlabel = \"" << LeaderLocalName << "\" , taillabel = \""
@@ -193,10 +124,10 @@ std::ostream &SignalPtr<T, Time>::display(std::ostream &os) const {
193124
<< "||" << signalPtr;
194125
{ Signal<T, Time>::display(os); }
195126

196-
if ((isAbstractPluged()) && (!autoref())) {
127+
if ((isPlugged()) && (!autoref())) {
197128
os << " -->-- PLUGGED";
198129
} else {
199-
if (!isAbstractPluged())
130+
if (!isPlugged())
200131
os << " UNPLUGGED";
201132
else if (autoref())
202133
os << " AUTOPLUGGED";
@@ -213,8 +144,8 @@ std::ostream &SignalPtr<T, Time>::displayDependencies(std::ostream &os,
213144
std::string next1,
214145
std::string next2) const {
215146
dgTDEBUGIN(25);
216-
if ((isAbstractPluged()) && (!autoref())) {
217-
getAbstractPtr()->displayDependencies(
147+
if ((isPlugged()) && (!autoref())) {
148+
getPtr()->displayDependencies(
218149
os, depth, space, next1 + "-- " + SignalBase<Time>::name + " -->",
219150
next2);
220151
} else {

include/dynamic-graph/signal.h

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -106,11 +106,6 @@ class Signal : public SignalBase<Time> {
106106
aClassName = typeid(this).name();
107107
}
108108

109-
public:
110-
/// checkCompatibility is used to get the object contained in the
111-
/// signal. This used to verify if a dynamic cast is possible or not.
112-
virtual void checkCompatibility() { throw Tcopy; }
113-
114109
private:
115110
const T &setTcopy(const T &t);
116111
T &getTwork();

tests/signal-all.cpp

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -90,13 +90,6 @@ BOOST_AUTO_TEST_CASE(test_base) {
9090
}
9191
BOOST_CHECK(res);
9292

93-
res = false;
94-
try {
95-
/// Check signal compatibility.
96-
sigB.checkCompatibility();
97-
} catch (const ExceptionSignal &aea) {
98-
res = (aea.getCode() == ExceptionSignal::PLUG_IMPOSSIBLE);
99-
}
10093
/// Verify set command value
10194

10295
/// set

tests/signal-ptr.cpp

Lines changed: 0 additions & 70 deletions
Original file line numberDiff line numberDiff line change
@@ -116,29 +116,6 @@ BOOST_AUTO_TEST_CASE(normal_cst_test) {
116116
output_test_stream output;
117117
sigNotPlug.display(output);
118118
cstSigNotPlug.display(output);
119-
120-
/// Testing getAbsatractPtr() interface: no plug
121-
res = false;
122-
try {
123-
sigNotPlug.getAbstractPtr();
124-
} catch (const ExceptionSignal &aea) {
125-
res = (aea.getCode() == ExceptionSignal::NOT_INITIALIZED);
126-
}
127-
BOOST_CHECK(res);
128-
129-
/// Testing const getAbstractPtr() interface: no plug case
130-
try {
131-
cstSigNotPlug.getAbstractPtr();
132-
} catch (const ExceptionSignal &aea) {
133-
res = (aea.getCode() == ExceptionSignal::NOT_INITIALIZED);
134-
}
135-
BOOST_CHECK(res);
136-
137-
try {
138-
sigNotPlug.checkCompatibility();
139-
} catch (...) {
140-
}
141-
BOOST_CHECK(res);
142119
}
143120

144121
BOOST_AUTO_TEST_CASE(normal_test) {
@@ -171,63 +148,17 @@ BOOST_AUTO_TEST_CASE(normal_test) {
171148
sigPtrARef.plug(0);
172149
sigPtrARef.plug(&sigRef);
173150
sigPtrBRef.plug(&sigPtrARef);
174-
/// Try to plug an incompatible signal.
175-
/// leave
176-
bool res = false;
177-
try {
178-
sigPtrARef.plug(&sigstr);
179-
} catch (const ExceptionSignal &aes) {
180-
res = (aes.getCode() == ExceptionSignal::PLUG_IMPOSSIBLE);
181-
}
182-
BOOST_CHECK(res);
183-
184151
/// Plug the signal.
185152
sigPtrAbstractRef.plug(&sigRef);
186153
sigPtrA.getPtr();
187154
BOOST_CHECK(true);
188-
try {
189-
sigPtrARef.checkCompatibility();
190-
} catch (const ExceptionSignal &aes) {
191-
/// Should be NOT_INITIALIZED becase the last plug
192-
/// on sigstr failed.
193-
res = (aes.getCode() == ExceptionSignal::NOT_INITIALIZED);
194-
} catch (const std::exception &e) {
195-
std::cout << "Standard Exception:" << e.what() << std::endl;
196-
} catch (...) {
197-
std::cout << "Anything else: " << std::endl;
198-
}
199-
sigPtrA.needUpdate(5);
200-
BOOST_CHECK(true);
201155

202156
int ltime = sigPtrA.getTime();
203157
sigPtrA.getPluged();
204158
sigPtrA(ltime);
205159
BOOST_CHECK(true);
206160

207161
sigPtrB.getPtr();
208-
/// Test sigPtrAbstract with a normal plug.
209-
res = false;
210-
try {
211-
sigPtrAbstract.getAbstractPtr();
212-
} catch (ExceptionSignal &aes) {
213-
/// Should be NOT_INITIALIZED becase the last plug
214-
/// on sigstr failed.
215-
std::cout << "Code: " << aes.getCode() << std::endl;
216-
res = (aes.getCode() == ExceptionSignal::NOT_INITIALIZED);
217-
} catch (...) {
218-
std::cout << "Anything else with sigPtrAbstract.getAbstractPtr()"
219-
<< std::endl;
220-
}
221-
BOOST_CHECK(true);
222-
223-
/// Test the case where the plug ref is zero.
224-
sigPtrAbstractRef.plug(0);
225-
BOOST_CHECK(true);
226-
227-
assert(sigRef.isPlugged() != true);
228-
SignalBase<int> *t = sigRef.getPluged();
229-
// assert(sigPtrA.get()=false);
230-
231162
// TODO Can't check if the constant change
232163
sigPtrA.setConstantDefault(1.2);
233164
// getconstant
@@ -251,7 +182,6 @@ BOOST_AUTO_TEST_CASE(normal_test) {
251182
// getconstant
252183
sigPtrA.displayDependencies(output);
253184

254-
cout << t << std::endl;
255185
cout << "Sig = ";
256186
sigRef.get(cout);
257187
cout << std::endl;

tests/signal-time-dependent.cpp

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -228,13 +228,4 @@ BOOST_AUTO_TEST_CASE(signaltimedependent) {
228228
const double &avalue = sig1(6);
229229
output << avalue;
230230
BOOST_CHECK(true);
231-
/// Verify check compatibility
232-
try {
233-
sig1.checkCompatibility();
234-
}
235-
// catch(double e)
236-
catch (...) {
237-
std::cout << "Message: test \n";
238-
}
239-
BOOST_CHECK(true);
240231
}

0 commit comments

Comments
 (0)