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