1919# define DYNAMIC_GRAPH_SIGNAL_ARRAY_H
2020# include < dynamic-graph/signal-base.h>
2121# include < dynamic-graph/dynamic-graph-api.h>
22+ # include < vector>
23+ #include < stdio.h>
2224
2325namespace dynamicgraph
2426{
27+
2528 // / \ingroup dgraph
2629 // /
2730 // / \brief TODO
@@ -32,64 +35,54 @@ namespace dynamicgraph
3235 static const int DEFAULT_SIZE = 20 ;
3336
3437 protected:
35- const SignalBase<Time> ** const_array;
38+ std::vector< const SignalBase<Time>* > const_array;
3639 unsigned int size,rank;
3740
3841 public:
3942 SignalArray_const<Time> (const unsigned int & sizeARG = DEFAULT_SIZE)
40- : const_array (NULL ),
43+ : const_array (sizeARG ),
4144 size (sizeARG),
4245 rank (0 )
43- {
44- createArray ();
45- }
46+ {}
4647
4748 SignalArray_const<Time> (const SignalBase<Time>& sig)
48- : const_array (NULL ),
49- size (1 ),
49+ : const_array (DEFAULT_SIZE ),
50+ size (DEFAULT_SIZE ),
5051 rank (0 )
5152 {
52- createArray ();
5353 addElmt (&sig);
5454 }
5555
5656 SignalArray_const<Time> (const SignalArray<Time>& siga)
57- : const_array (NULL ),
58- size (DEFAULT_SIZE ),
57+ : const_array (siga.getSize() ),
58+ size (siga.getSize () ),
5959 rank (siga.getSize ())
6060 {
61- createArray ();
6261 for (unsigned int i = 0 ; i < rank; ++i)
63- const_array[i] = &siga[i];
62+ const_array[i] = &siga[i];
6463 }
6564
6665 SignalArray_const<Time> (const SignalArray_const<Time>& siga)
67- : const_array(NULL ),
68- size (DEFAULT_SIZE ),
66+ : const_array(siga.getSize () ),
67+ size (siga.getSize () ),
6968 rank(siga.getSize ())
7069 {
71- createArray ();
7270 for (unsigned int i = 0 ; i < rank; ++i)
73- const_array[i] = &siga[i];
71+ const_array[i] = &siga[i];
7472 }
7573
76- virtual ~SignalArray_const<Time> ()
77- {
78- if (const_array)
79- delete[] const_array;
80- }
74+ virtual ~SignalArray_const<Time> (){}
8175
8276 protected:
83- void createArray ()
84- {
85- if (0 < size)
86- const_array = new const SignalBase<Time>*[size];
87- }
8877
8978 void addElmt (const SignalBase<Time>* el)
9079 {
91- if (rank < size)
92- const_array[rank++] = el;
80+ if (rank >= size)
81+ {
82+ size += DEFAULT_SIZE;
83+ const_array.resize (size);
84+ }
85+ const_array[rank++] = el;
9386 }
9487
9588 public:
@@ -113,10 +106,9 @@ namespace dynamicgraph
113106
114107 template <class Time >
115108 SignalArray_const<Time> operator << (const SignalBase<Time>& sig1,
116- const SignalBase<Time>& sig2)
109+ const SignalBase<Time>& sig2)
117110 {
118- SignalArray_const<Time> res (20 );
119- res<<sig1;
111+ SignalArray_const<Time> res (sig1);
120112 res<<sig2;
121113 return res;
122114 }
@@ -132,51 +124,45 @@ namespace dynamicgraph
132124 using SignalArray_const<Time>::size;
133125 using SignalArray_const<Time>::rank;
134126 protected:
135- mutable SignalBase<Time>** array;
127+ mutable std::vector< SignalBase<Time>* > array;
136128
137129 public:
138130 SignalArray<Time> (const unsigned int & sizeARG = DEFAULT_SIZE)
139- : SignalArray_const<Time> (0 )
131+ : SignalArray_const<Time> (0 ),
132+ array (sizeARG)
140133 {
141134 size=sizeARG;
142- createArray ();
143135 }
144136
145137 SignalArray<Time> (SignalBase<Time>& sig)
146- : SignalArray_const<Time> (0 )
138+ : SignalArray_const<Time> (0 ),
139+ array (DEFAULT_SIZE)
147140 {
148- size=1 ;
149- createArray ();
141+ size=DEFAULT_SIZE;
150142 addElmt (&sig);
151143 }
152144
153145 SignalArray<Time> (const SignalArray<Time>& siga)
154- : SignalArray_const<Time> (DEFAULT_SIZE ),
155- array (NULL )
146+ : SignalArray_const<Time> (siga.getSize() ),
147+ array (siga.getSize() )
156148 {
157149 rank = siga.getSize ();
158- createArray ();
159150 for (unsigned int i = 0 ; i < rank; ++i)
160- array[i]=&siga[i];
151+ array[i]=&siga[i];
161152 }
162153
163- virtual ~SignalArray<Time> ()
164- {
165- if (array)
166- delete[] array;
167- }
154+ virtual ~SignalArray<Time> (){}
168155
169156 protected:
170- void createArray ()
171- {
172- if ( 0 < size)
173- array = new SignalBase<Time>*[size];
174- }
175157
176158 void addElmt (SignalBase<Time>* el)
177159 {
178- if (rank < size)
179- array[rank++] = el;
160+ if (rank >= size)
161+ {
162+ size += DEFAULT_SIZE;
163+ array.resize (size);
164+ }
165+ array[rank++] = el;
180166 }
181167
182168 public:
@@ -189,8 +175,7 @@ namespace dynamicgraph
189175 virtual SignalArray_const<Time>
190176 operator << (const SignalBase<Time>& sig) const
191177 {
192- SignalArray_const<Time> res (size);
193- res = *this ;
178+ SignalArray_const<Time> res (*this );
194179 res << sig;
195180 return res;
196181 }
@@ -204,10 +189,9 @@ namespace dynamicgraph
204189
205190 template <class Time >
206191 SignalArray<Time> operator << (SignalBase<Time>& sig1,
207- SignalBase<Time>& sig2)
192+ SignalBase<Time>& sig2)
208193 {
209- SignalArray<Time> res (20 );
210- res << sig1;
194+ SignalArray<Time> res (sig1);
211195 res << sig2;
212196 return res;
213197 }
0 commit comments