diff --git a/include/dynamic-graph/signal-array.h b/include/dynamic-graph/signal-array.h index fe12d09a3657f699f12fb35d5d27de0067d86c4a..3af85ffd5b3430690921834a54312ab756460083 100644 --- a/include/dynamic-graph/signal-array.h +++ b/include/dynamic-graph/signal-array.h @@ -19,9 +19,12 @@ # define DYNAMIC_GRAPH_SIGNAL_ARRAY_H # include <dynamic-graph/signal-base.h> # include <dynamic-graph/dynamic-graph-api.h> +# include <vector> +#include <stdio.h> namespace dynamicgraph { + /// \ingroup dgraph /// /// \brief TODO @@ -32,64 +35,54 @@ namespace dynamicgraph static const int DEFAULT_SIZE = 20; protected: - const SignalBase<Time> ** const_array; + std::vector< const SignalBase<Time>* > const_array; unsigned int size,rank; public: SignalArray_const<Time> (const unsigned int& sizeARG = DEFAULT_SIZE) - : const_array (NULL), + : const_array (sizeARG), size (sizeARG), rank (0) - { - createArray (); - } + {} SignalArray_const<Time> (const SignalBase<Time>& sig) - : const_array (NULL), - size (1), + : const_array (DEFAULT_SIZE), + size (DEFAULT_SIZE), rank (0) { - createArray (); addElmt(&sig); } SignalArray_const<Time> (const SignalArray<Time>& siga) - : const_array (NULL), - size (DEFAULT_SIZE), + : const_array (siga.getSize()), + size (siga.getSize ()), rank (siga.getSize ()) { - createArray (); for (unsigned int i = 0; i < rank; ++i) - const_array[i] = &siga[i]; + const_array[i] = &siga[i]; } SignalArray_const<Time> (const SignalArray_const<Time>& siga) - : const_array(NULL), - size(DEFAULT_SIZE), + : const_array(siga.getSize ()), + size(siga.getSize ()), rank(siga.getSize ()) { - createArray (); for (unsigned int i = 0; i < rank; ++i) - const_array[i] = &siga[i]; + const_array[i] = &siga[i]; } - virtual ~SignalArray_const<Time> () - { - if (const_array) - delete[] const_array; - } + virtual ~SignalArray_const<Time> (){} protected: - void createArray () - { - if (0 < size) - const_array = new const SignalBase<Time>*[size]; - } void addElmt (const SignalBase<Time>* el) { - if (rank < size) - const_array[rank++] = el; + if (rank >= size) + { + size += DEFAULT_SIZE; + const_array.resize(size); + } + const_array[rank++] = el; } public: @@ -113,10 +106,9 @@ namespace dynamicgraph template<class Time> SignalArray_const<Time> operator<< (const SignalBase<Time>& sig1, - const SignalBase<Time>& sig2) + const SignalBase<Time>& sig2) { - SignalArray_const<Time> res(20); - res<<sig1; + SignalArray_const<Time> res(sig1); res<<sig2; return res; } @@ -132,51 +124,45 @@ namespace dynamicgraph using SignalArray_const<Time>::size; using SignalArray_const<Time>::rank; protected: - mutable SignalBase<Time>** array; + mutable std::vector< SignalBase<Time>* > array; public: SignalArray<Time> (const unsigned int& sizeARG = DEFAULT_SIZE) - : SignalArray_const<Time> (0) + : SignalArray_const<Time> (0), + array(sizeARG) { size=sizeARG; - createArray (); } SignalArray<Time> (SignalBase<Time>& sig) - : SignalArray_const<Time> (0) + : SignalArray_const<Time> (0), + array(DEFAULT_SIZE) { - size=1; - createArray (); + size=DEFAULT_SIZE; addElmt(&sig); } SignalArray<Time> (const SignalArray<Time>& siga) - : SignalArray_const<Time> (DEFAULT_SIZE), - array (NULL) + : SignalArray_const<Time> (siga.getSize()), + array (siga.getSize()) { rank = siga.getSize (); - createArray (); for (unsigned int i = 0; i < rank; ++i) - array[i]=&siga[i]; + array[i]=&siga[i]; } - virtual ~SignalArray<Time> () - { - if (array) - delete[] array; - } + virtual ~SignalArray<Time> (){} protected: - void createArray () - { - if( 0 < size) - array = new SignalBase<Time>*[size]; - } void addElmt (SignalBase<Time>* el) { - if(rank < size) - array[rank++] = el; + if (rank >= size) + { + size += DEFAULT_SIZE; + array.resize(size); + } + array[rank++] = el; } public: @@ -189,8 +175,7 @@ namespace dynamicgraph virtual SignalArray_const<Time> operator<< (const SignalBase<Time>& sig) const { - SignalArray_const<Time> res (size); - res = *this; + SignalArray_const<Time> res (*this); res << sig; return res; } @@ -204,10 +189,9 @@ namespace dynamicgraph template<class Time> SignalArray<Time> operator<< (SignalBase<Time>& sig1, - SignalBase<Time>& sig2) + SignalBase<Time>& sig2) { - SignalArray<Time> res (20); - res << sig1; + SignalArray<Time> res (sig1); res << sig2; return res; }