Skip to content
Snippets Groups Projects
Commit 6fdb0362 authored by andreadelprete's avatar andreadelprete
Browse files

Fix bug in signal-array that was limiting the number of signals in a...

Fix bug in signal-array that was limiting the number of signals in a signal-array to 20. Moreover I replaced the C array with an std::vector.
parent 07f65ae3
No related branches found
No related tags found
No related merge requests found
...@@ -19,9 +19,11 @@ ...@@ -19,9 +19,11 @@
# define DYNAMIC_GRAPH_SIGNAL_ARRAY_H # define DYNAMIC_GRAPH_SIGNAL_ARRAY_H
# include <dynamic-graph/signal-base.h> # include <dynamic-graph/signal-base.h>
# include <dynamic-graph/dynamic-graph-api.h> # include <dynamic-graph/dynamic-graph-api.h>
# include <vector>
namespace dynamicgraph namespace dynamicgraph
{ {
/// \ingroup dgraph /// \ingroup dgraph
/// ///
/// \brief TODO /// \brief TODO
...@@ -32,64 +34,54 @@ namespace dynamicgraph ...@@ -32,64 +34,54 @@ namespace dynamicgraph
static const int DEFAULT_SIZE = 20; static const int DEFAULT_SIZE = 20;
protected: protected:
const SignalBase<Time> ** const_array; std::vector< const SignalBase<Time>* > const_array;
unsigned int size,rank; unsigned int size,rank;
public: public:
SignalArray_const<Time> (const unsigned int& sizeARG = DEFAULT_SIZE) SignalArray_const<Time> (const unsigned int& sizeARG = DEFAULT_SIZE)
: const_array (NULL), : const_array (sizeARG),
size (sizeARG), size (sizeARG),
rank (0) rank (0)
{ {}
createArray ();
}
SignalArray_const<Time> (const SignalBase<Time>& sig) SignalArray_const<Time> (const SignalBase<Time>& sig)
: const_array (NULL), : const_array (DEFAULT_SIZE),
size (1), size (DEFAULT_SIZE),
rank (0) rank (0)
{ {
createArray ();
addElmt(&sig); addElmt(&sig);
} }
SignalArray_const<Time> (const SignalArray<Time>& siga) SignalArray_const<Time> (const SignalArray<Time>& siga)
: const_array (NULL), : const_array (siga.getSize()),
size (DEFAULT_SIZE), size (siga.getSize ()),
rank (siga.getSize ()) rank (siga.getSize ())
{ {
createArray ();
for (unsigned int i = 0; i < rank; ++i) 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) SignalArray_const<Time> (const SignalArray_const<Time>& siga)
: const_array(NULL), : const_array(siga.getSize ()),
size(DEFAULT_SIZE), size(siga.getSize ()),
rank(siga.getSize ()) rank(siga.getSize ())
{ {
createArray ();
for (unsigned int i = 0; i < rank; ++i) for (unsigned int i = 0; i < rank; ++i)
const_array[i] = &siga[i]; const_array[i] = &siga[i];
} }
virtual ~SignalArray_const<Time> () virtual ~SignalArray_const<Time> (){}
{
if (const_array)
delete[] const_array;
}
protected: protected:
void createArray ()
{
if (0 < size)
const_array = new const SignalBase<Time>*[size];
}
void addElmt (const SignalBase<Time>* el) void addElmt (const SignalBase<Time>* el)
{ {
if (rank < size) if (rank >= size)
const_array[rank++] = el; {
size += DEFAULT_SIZE;
const_array.resize(size);
}
const_array[rank++] = el;
} }
public: public:
...@@ -113,10 +105,9 @@ namespace dynamicgraph ...@@ -113,10 +105,9 @@ namespace dynamicgraph
template<class Time> template<class Time>
SignalArray_const<Time> operator<< (const SignalBase<Time>& sig1, SignalArray_const<Time> operator<< (const SignalBase<Time>& sig1,
const SignalBase<Time>& sig2) const SignalBase<Time>& sig2)
{ {
SignalArray_const<Time> res(20); SignalArray_const<Time> res(sig1);
res<<sig1;
res<<sig2; res<<sig2;
return res; return res;
} }
...@@ -132,51 +123,45 @@ namespace dynamicgraph ...@@ -132,51 +123,45 @@ namespace dynamicgraph
using SignalArray_const<Time>::size; using SignalArray_const<Time>::size;
using SignalArray_const<Time>::rank; using SignalArray_const<Time>::rank;
protected: protected:
mutable SignalBase<Time>** array; mutable std::vector< SignalBase<Time>* > array;
public: public:
SignalArray<Time> (const unsigned int& sizeARG = DEFAULT_SIZE) SignalArray<Time> (const unsigned int& sizeARG = DEFAULT_SIZE)
: SignalArray_const<Time> (0) : SignalArray_const<Time> (0),
array(sizeARG)
{ {
size=sizeARG; size=sizeARG;
createArray ();
} }
SignalArray<Time> (SignalBase<Time>& sig) SignalArray<Time> (SignalBase<Time>& sig)
: SignalArray_const<Time> (0) : SignalArray_const<Time> (0),
array(1)
{ {
size=1; size=1;
createArray ();
addElmt(&sig); addElmt(&sig);
} }
SignalArray<Time> (const SignalArray<Time>& siga) SignalArray<Time> (const SignalArray<Time>& siga)
: SignalArray_const<Time> (DEFAULT_SIZE), : SignalArray_const<Time> (siga.getSize()),
array (NULL) array ()
{ {
rank = siga.getSize (); rank = siga.getSize ();
createArray ();
for (unsigned int i = 0; i < rank; ++i) for (unsigned int i = 0; i < rank; ++i)
array[i]=&siga[i]; array[i]=&siga[i];
} }
virtual ~SignalArray<Time> () virtual ~SignalArray<Time> (){}
{
if (array)
delete[] array;
}
protected: protected:
void createArray ()
{
if( 0 < size)
array = new SignalBase<Time>*[size];
}
void addElmt (SignalBase<Time>* el) void addElmt (SignalBase<Time>* el)
{ {
if(rank < size) if (rank >= size)
array[rank++] = el; {
size += DEFAULT_SIZE;
array.resize(size);
}
array[rank++] = el;
} }
public: public:
...@@ -189,8 +174,7 @@ namespace dynamicgraph ...@@ -189,8 +174,7 @@ namespace dynamicgraph
virtual SignalArray_const<Time> virtual SignalArray_const<Time>
operator<< (const SignalBase<Time>& sig) const operator<< (const SignalBase<Time>& sig) const
{ {
SignalArray_const<Time> res (size); SignalArray_const<Time> res (*this);
res = *this;
res << sig; res << sig;
return res; return res;
} }
...@@ -204,10 +188,9 @@ namespace dynamicgraph ...@@ -204,10 +188,9 @@ namespace dynamicgraph
template<class Time> template<class Time>
SignalArray<Time> operator<< (SignalBase<Time>& sig1, SignalArray<Time> operator<< (SignalBase<Time>& sig1,
SignalBase<Time>& sig2) SignalBase<Time>& sig2)
{ {
SignalArray<Time> res (20); SignalArray<Time> res (sig1);
res << sig1;
res << sig2; res << sig2;
return res; return res;
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment