Solves Problems when marshalling()->writeProperties(), Vectors size were becomming bigger for each writeProperties() <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< Index: VectorComposition.cpp =================================================================== --- VectorComposition.cpp (revision 2209) +++ VectorComposition.cpp (working copy) @@ -57,7 +57,7 @@ for ( int i=0; i < dimension ; i++) { - targetbag.add( new Property("","",vec[i]) ); // Put variables in the bag + targetbag.add( new Property("Element","Element",vec[i]) ); // Put variables in the bag } } >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> We need a very good precision with some property <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< Index: marsh/CPFMarshaller.cpp =================================================================== --- marsh/CPFMarshaller.cpp (revision 2209) +++ marsh/CPFMarshaller.cpp (working copy) @@ -123,6 +123,7 @@ void CPFMarshaller::introspect(Property &v) { + (this->s)->precision(25); doWrite( v, "double"); } >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Transporting vector gives Bad kind exception in debuging with MSVC, This doesn't give exceptions <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< Index: corba/OrocosTypes.idl =================================================================== --- corba/OrocosTypes.idl (revision 2209) +++ corba/OrocosTypes.idl (working copy) @@ -7,9 +7,14 @@ { // Classical Orocos type typedef sequence DoubleSequence; + struct Array + { + DoubleSequence mArray; + }; }; }; + #endif Index: corba/CorbaConversion.hpp =================================================================== --- corba/CorbaConversion.hpp (revision 2209) +++ corba/CorbaConversion.hpp (working copy) @@ -296,45 +296,45 @@ }; - template<> - struct AnyConversion< std::vector > - { - typedef Corba::DoubleSequence CorbaType; - typedef std::vector StdType; - static CorbaType* toAny(const std::vector& orig) { - //Logger::log() << Logger::Debug << "Converting type 'std::vector' to sequence." <length( orig.size() ); - for( size_t i = 0; i != orig.size(); ++i) - (*ret)[i] = orig[i]; - return ret; - } - - static StdType get(const CorbaType* t) { - StdType ret; - ret.resize( t->length() ); - for( size_t i = 0; i != t->length(); ++i) - ret[i] = (*t)[i]; - return ret; - } - - static bool update(const CORBA::Any& any, StdType& _value) { - CorbaType* result; - if ( any >>= result ) { - _value.resize( result->length() ); - for( size_t i = 0; i != result->length(); ++i) - _value[i] = (*result)[i]; - return true; - } - return false; - } - - static CORBA::Any_ptr createAny( const std::vector& t ) { - CORBA::Any_ptr ret = new CORBA::Any(); - *ret <<= toAny( t ); - return ret; - } - + template<> + struct AnyConversion< std::vector > + { + typedef Corba::Array CorbaType; + typedef std::vector StdType; + static CorbaType* toAny(const std::vector& orig) { + //Logger::log() << Logger::Debug << "Converting type 'std::vector' to sequence." <mArray.length( (CORBA::ULong)(orig.size()) ); + for( size_t i = 0; i != orig.size(); ++i) + ret->mArray[(CORBA::ULong)(i)] = orig[i]; + return ret; + } + + static StdType get(const CorbaType* t) { + StdType ret; + ret.resize( t->mArray.length() ); + for( size_t i = 0; i !=ret.size(); ++i) + ret[i] = t->mArray[(CORBA::ULong)(i)]; + return ret; + } + + static bool update(const CORBA::Any& any, StdType& _value) { + CorbaType* result; + if ( any >>= result ) { + _value.resize( result->mArray.length() ); + for( size_t i = 0; i != _value.size(); ++i) + _value[i] = result->mArray[(CORBA::ULong)(i)]; + return true; + } + return false; + } + + static CORBA::Any_ptr createAny( const std::vector& t ) { + CORBA::Any_ptr ret = new CORBA::Any(); + *ret <<= toAny( t ); + return ret; + } + }; >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Solves segmentation fault on Window when browsing Attributes probably Okay for linux <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< Index: AttributeRepository.cpp =================================================================== --- AttributeRepository.cpp (revision 2520) +++ AttributeRepository.cpp (working copy) @@ -140,7 +140,7 @@ std::vector AttributeRepository::getAttributes() const { std::vector ret; - std::transform( values.begin(), values.end(), ret.begin(),back_inserter(ret), bind(&AttributeBase::getName, _1) ); + std::transform( values.begin(), values.end(), back_inserter(ret), bind(&AttributeBase::getName, _1) ); return ret; } >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Solves somes deadlock problems when destroying taskcontext, Introduce by Philippe Massé <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< Index: os/win32/fosi_internal.cpp =================================================================== --- os/win32/fosi_internal.cpp (revision 2520) +++ os/win32/fosi_internal.cpp (working copy) @@ -244,6 +244,8 @@ //printf(" rtos_task_delete "); //DWORD exitCode; //TerminateThread(mytask->handle, exitCode); + + WaitForSingleObject(mytask->handle,INFINITE); CloseHandle(mytask->handle); free(mytask->name); mytask->name = NULL; >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>