19
19
# define DYNAMIC_GRAPH_SIGNAL_ARRAY_H
20
20
# include < dynamic-graph/signal-base.h>
21
21
# include < dynamic-graph/dynamic-graph-api.h>
22
+ # include < vector>
22
23
23
24
namespace dynamicgraph
24
25
{
26
+
25
27
// / \ingroup dgraph
26
28
// /
27
29
// / \brief TODO
@@ -32,64 +34,54 @@ namespace dynamicgraph
32
34
static const int DEFAULT_SIZE = 20 ;
33
35
34
36
protected:
35
- const SignalBase<Time> ** const_array;
37
+ std::vector< const SignalBase<Time>* > const_array;
36
38
unsigned int size,rank;
37
39
38
40
public:
39
41
SignalArray_const<Time> (const unsigned int & sizeARG = DEFAULT_SIZE)
40
- : const_array (NULL ),
42
+ : const_array (sizeARG ),
41
43
size (sizeARG),
42
44
rank (0 )
43
- {
44
- createArray ();
45
- }
45
+ {}
46
46
47
47
SignalArray_const<Time> (const SignalBase<Time>& sig)
48
- : const_array (NULL ),
49
- size (1 ),
48
+ : const_array (DEFAULT_SIZE ),
49
+ size (DEFAULT_SIZE ),
50
50
rank (0 )
51
51
{
52
- createArray ();
53
52
addElmt (&sig);
54
53
}
55
54
56
55
SignalArray_const<Time> (const SignalArray<Time>& siga)
57
- : const_array (NULL ),
58
- size (DEFAULT_SIZE ),
56
+ : const_array (siga.getSize() ),
57
+ size (siga.getSize () ),
59
58
rank (siga.getSize ())
60
59
{
61
- createArray ();
62
60
for (unsigned int i = 0 ; i < rank; ++i)
63
- const_array[i] = &siga[i];
61
+ const_array[i] = &siga[i];
64
62
}
65
63
66
64
SignalArray_const<Time> (const SignalArray_const<Time>& siga)
67
- : const_array(NULL ),
68
- size (DEFAULT_SIZE ),
65
+ : const_array(siga.getSize () ),
66
+ size (siga.getSize () ),
69
67
rank(siga.getSize ())
70
68
{
71
- createArray ();
72
69
for (unsigned int i = 0 ; i < rank; ++i)
73
- const_array[i] = &siga[i];
70
+ const_array[i] = &siga[i];
74
71
}
75
72
76
- virtual ~SignalArray_const<Time> ()
77
- {
78
- if (const_array)
79
- delete[] const_array;
80
- }
73
+ virtual ~SignalArray_const<Time> (){}
81
74
82
75
protected:
83
- void createArray ()
84
- {
85
- if (0 < size)
86
- const_array = new const SignalBase<Time>*[size];
87
- }
88
76
89
77
void addElmt (const SignalBase<Time>* el)
90
78
{
91
- if (rank < size)
92
- const_array[rank++] = el;
79
+ if (rank >= size)
80
+ {
81
+ size += DEFAULT_SIZE;
82
+ const_array.resize (size);
83
+ }
84
+ const_array[rank++] = el;
93
85
}
94
86
95
87
public:
@@ -113,10 +105,9 @@ namespace dynamicgraph
113
105
114
106
template <class Time >
115
107
SignalArray_const<Time> operator << (const SignalBase<Time>& sig1,
116
- const SignalBase<Time>& sig2)
108
+ const SignalBase<Time>& sig2)
117
109
{
118
- SignalArray_const<Time> res (20 );
119
- res<<sig1;
110
+ SignalArray_const<Time> res (sig1);
120
111
res<<sig2;
121
112
return res;
122
113
}
@@ -132,51 +123,45 @@ namespace dynamicgraph
132
123
using SignalArray_const<Time>::size;
133
124
using SignalArray_const<Time>::rank;
134
125
protected:
135
- mutable SignalBase<Time>** array;
126
+ mutable std::vector< SignalBase<Time>* > array;
136
127
137
128
public:
138
129
SignalArray<Time> (const unsigned int & sizeARG = DEFAULT_SIZE)
139
- : SignalArray_const<Time> (0 )
130
+ : SignalArray_const<Time> (0 ),
131
+ array (sizeARG)
140
132
{
141
133
size=sizeARG;
142
- createArray ();
143
134
}
144
135
145
136
SignalArray<Time> (SignalBase<Time>& sig)
146
- : SignalArray_const<Time> (0 )
137
+ : SignalArray_const<Time> (0 ),
138
+ array (1 )
147
139
{
148
140
size=1 ;
149
- createArray ();
150
141
addElmt (&sig);
151
142
}
152
143
153
144
SignalArray<Time> (const SignalArray<Time>& siga)
154
- : SignalArray_const<Time> (DEFAULT_SIZE ),
155
- array (NULL )
145
+ : SignalArray_const<Time> (siga.getSize() ),
146
+ array ()
156
147
{
157
148
rank = siga.getSize ();
158
- createArray ();
159
149
for (unsigned int i = 0 ; i < rank; ++i)
160
- array[i]=&siga[i];
150
+ array[i]=&siga[i];
161
151
}
162
152
163
- virtual ~SignalArray<Time> ()
164
- {
165
- if (array)
166
- delete[] array;
167
- }
153
+ virtual ~SignalArray<Time> (){}
168
154
169
155
protected:
170
- void createArray ()
171
- {
172
- if ( 0 < size)
173
- array = new SignalBase<Time>*[size];
174
- }
175
156
176
157
void addElmt (SignalBase<Time>* el)
177
158
{
178
- if (rank < size)
179
- array[rank++] = el;
159
+ if (rank >= size)
160
+ {
161
+ size += DEFAULT_SIZE;
162
+ array.resize (size);
163
+ }
164
+ array[rank++] = el;
180
165
}
181
166
182
167
public:
@@ -189,8 +174,7 @@ namespace dynamicgraph
189
174
virtual SignalArray_const<Time>
190
175
operator << (const SignalBase<Time>& sig) const
191
176
{
192
- SignalArray_const<Time> res (size);
193
- res = *this ;
177
+ SignalArray_const<Time> res (*this );
194
178
res << sig;
195
179
return res;
196
180
}
@@ -204,10 +188,9 @@ namespace dynamicgraph
204
188
205
189
template <class Time >
206
190
SignalArray<Time> operator << (SignalBase<Time>& sig1,
207
- SignalBase<Time>& sig2)
191
+ SignalBase<Time>& sig2)
208
192
{
209
- SignalArray<Time> res (20 );
210
- res << sig1;
193
+ SignalArray<Time> res (sig1);
211
194
res << sig2;
212
195
return res;
213
196
}
0 commit comments