20 #ifndef _mtsGenericObjectProxy_h
21 #define _mtsGenericObjectProxy_h
49 template <
typename _elementType,
bool>
66 template <
typename _elementType>
71 static void ToStream(std::ostream & outputStream,
const _elementType & data) {
72 outputStream << cmnData<_elementType>::HumanReadable(data);
74 static void ToStreamRaw(std::ostream & outputStream,
const char delimiter,
const _elementType & data) {
77 static bool FromStreamRaw(std::istream & inputStream,
const char delimiter, _elementType & data) {
84 if (inputStream.fail()) {
96 template <
typename _elementType>
115 if (existing == &other)
123 if (otherRefPointer) {
136 for (index = 0; index < size; index++) {
137 new(&(data[index]))
value_type(*otherPointer);
142 if (otherRefPointer) {
144 for (index = 0; index < size; index++) {
155 template<
typename _
class,
typename _elementType>
166 CMN_LOG_INIT_WARNING <<
"cmnConditionalObjectFactoryOneArg::Create for proxy could not create object" << std::endl;
173 return argTypeWrapped::ClassServices();
182 template<
typename _
class,
typename _elementType>
199 CMN_LOG_INIT_WARNING <<
"cmnConditionalObjectFactoryOneArg::Create for string proxy could not get string" << std::endl;
202 CMN_LOG_INIT_WARNING <<
"cmnConditionalObjectFactoryOneArg::Create for string proxy could not create object" << std::endl;
209 return argTypeWrapped::ClassServices();
213 template<
typename _elementType>
225 for (index = 0; index < size; index++) {
226 typedData[index].~value_type();
238 if (existingPointer) {
239 existingPointer->~value_type();
243 if (existingRefPointer) {
244 existingRefPointer->~value_reftype();
314 template <
class _elementType>
361 this->SetValid(other.Valid());
362 this->SetTimestamp(other.Timestamp());
368 template <
class _elementType>
399 this->SetValid(
true);
419 this->SetValid(
true);
449 inline virtual void ToStream(std::ostream & outputStream)
const {
451 outputStream <<
" Value: ";
456 inline virtual void ToStreamRaw(std::ostream & outputStream,
const char delimiter =
' ',
457 bool headerOnly =
false,
const std::string & headerPrefix =
"")
const {
460 outputStream << delimiter << headerPrefix <<
"-data";
463 outputStream << delimiter;
469 inline virtual bool FromStreamRaw(std::istream & inputStream,
const char delimiter =
' ') {
476 template <
class _elementType>
501 this->SetValid(
true);
510 this->SetValid(
true);
530 this->SetValid(
true);
560 inline virtual void ToStream(std::ostream & outputStream)
const {
562 outputStream <<
" Value(ref): ";
567 inline virtual void ToStreamRaw(std::ostream & outputStream,
const char delimiter =
' ',
568 bool headerOnly =
false,
const std::string & headerPrefix =
"")
const {
571 outputStream << delimiter << headerPrefix <<
"-data(ref)";
574 outputStream << delimiter;
580 inline virtual bool FromStreamRaw(std::istream & inputStream,
const char delimiter =
' ') {
590 template<
typename T,
bool>
601 return (p2?(&obj1 == &p2->
rData):
false); }
621 <<
" to const " <<
typeid(
FinalBaseType).name() << std::endl;
640 if (
typeid(T) != *arg.Services()->TypeInfoPointer()) {
641 CMN_LOG_INIT_ERROR <<
"ConditionalCreate: argument prototype is wrong type for command \"" << name <<
"\" (expected \""
642 <<
typeid(T).name() <<
"\", got \""
643 << arg.Services()->TypeInfoPointer()->name() <<
"\")" << std::endl;
649 T* temp =
dynamic_cast<T *
>(&arg);
652 <<
" to " << T::ClassServices()->GetName() << std::endl;
657 const T* temp =
dynamic_cast<const T *
>(&arg);
660 <<
" to " << T::ClassServices()->GetName() << std::endl;
679 CMN_LOG_INIT_ERROR <<
"ConditionalCreate returning NULL for " << name <<
" (maybe you should use CMN_DECLARE_SERVICES with CMN_DYNAMIC_CREATION)" << std::endl;
691 template<
typename T,
bool>
720 #define CMN_IMPLEMENT_SERVICES_DERIVED_ONEARG(className, parentName, argType) \
721 CMN_IS_DERIVED_FROM_ASSERT(className, parentName) \
722 CMN_IMPLEMENT_SERVICES_INTERNAL(className, parentName::ClassServices(), mtsGenericTypes<argType>::FinalType)
724 #define CMN_IMPLEMENT_SERVICES_DERIVED_ONEARG_TEMPLATED(className, parentName, argType) \
725 CMN_IS_DERIVED_FROM_ASSERT(className, parentName) \
726 CMN_IMPLEMENT_SERVICES_TEMPLATED_INTERNAL(className, parentName::ClassServices(), mtsGenericTypes<argType>::FinalType)
999 #include <cisstVector/vctFixedSizeMatrixTypes.h>
1010 #include <cisstVector/vctTransformationTypes.h>
1021 #include <cisstVector/vctDynamicVectorTypes.h>
1048 #include <cisstVector/vctDynamicMatrixTypes.h>
static const T * CastArg(const mtsGenericObject &arg)
Definition: mtsGenericObjectProxy.h:656
static void ConditionalFree(const FinalRefType *obj)
Definition: mtsGenericObjectProxy.h:675
Definition: mtsGenericObjectProxy.h:692
static T * CastArg(mtsGenericObject &arg)
Definition: mtsGenericObjectProxy.h:648
Definition: mtsGenericObjectProxy.h:44
mtsGenericObjectProxyBase< _elementType >::RefType RefType
Definition: mtsGenericObjectProxy.h:378
value_type Data
Definition: mtsGenericObjectProxy.h:379
static const cmnClassServicesBase * GetConstructorArgServices(void)
Definition: mtsGenericObjectProxy.h:208
static bool Create(cmnGenericObject *existing, const cmnGenericObject &other)
Definition: mtsGenericObjectProxy.h:113
#define CISST_DEPRECATED
Definition: cmnPortability.h:310
static bool FromStreamRaw(std::istream &inputStream, const char delimiter, _elementType &data)
Definition: mtsGenericObjectProxy.h:77
void SerializeRaw(std::ostream &outputStream) const
Definition: mtsGenericObjectProxy.h:436
static bool IsEqual(const T &obj1, const mtsGenericObject &obj2)
Definition: mtsGenericObjectProxy.h:637
mtsGenericObjectProxyRef< _elementType > value_reftype
Definition: mtsGenericObjectProxy.h:100
mtsGenericObjectProxyBase< _elementType >::value_type value_type
Definition: mtsGenericObjectProxy.h:376
mtsGenericObjectProxyRef< T > FinalRefType
Definition: mtsGenericObjectProxy.h:597
mtsGenericObjectProxyBase< _elementType >::DeRefType DeRefType
Definition: mtsGenericObjectProxy.h:487
static bool IsEqual(const T &obj1, const mtsGenericObject &obj2)
Definition: mtsGenericObjectProxy.h:674
virtual void ToStreamRaw(std::ostream &outputStream, const char delimiter= ' ', bool headerOnly=false, const std::string &headerPrefix="") const
Definition: mtsGenericObjectProxy.h:567
Portability across compilers and operating systems tools.
mtsGenericObjectProxy< double > mtsDouble
Definition: mtsGenericObjectProxy.h:730
#define CMN_UNUSED(argument)
Definition: cmnPortability.h:479
virtual value_type & GetData(void)=0
mtsGenericObjectProxy(const value_type &data)
Definition: mtsGenericObjectProxy.h:396
Declaration of cmnSerializer and functions cmnSerializeRaw.
~mtsGenericObjectProxyRef(void)
Definition: mtsGenericObjectProxy.h:513
mtsGenericObjectProxy< float > mtsFloat
Definition: mtsGenericObjectProxy.h:733
mtsGenericObjectProxyBase(void)
Definition: mtsGenericObjectProxy.h:339
static const cmnClassServicesBase * GetConstructorArgServices(void)
Definition: mtsGenericObjectProxy.h:172
mtsGenericObjectProxyBase< _elementType >::value_type value_type
Definition: mtsGenericObjectProxy.h:486
virtual void SerializeRaw(std::ostream &outputStream) const
static FinalRefType * ConditionalWrap(T &obj)
Definition: mtsGenericObjectProxy.h:636
virtual void DeSerializeRaw(std::istream &inputStream)
mtsGenericObjectProxy< _elementType > ThisType
Definition: mtsGenericObjectProxy.h:374
mtsGenericObjectProxy< vctDoubleVec > mtsVctDoubleVec
Definition: mtsGenericObjectProxy.h:1023
mtsGenericObjectProxy(void)
Definition: mtsGenericObjectProxy.h:383
mtsGenericObjectProxy< short > mtsShort
Definition: mtsGenericObjectProxy.h:751
virtual void ToStream(std::ostream &outputStream) const
mtsGenericTypesImpl< T, cmnIsDerivedFrom< T, mtsGenericObject >::IS_DERIVED >::FinalBaseType FinalBaseType
Definition: mtsGenericObjectProxy.h:670
virtual void Assign(const ThisType &other)
Definition: mtsGenericObjectProxy.h:359
static T * CastArg(mtsGenericObject &arg)
Definition: mtsGenericObjectProxy.h:608
const std::string & GetName(void) const
const value_type & GetData(void) const
Definition: mtsGenericObjectProxy.h:517
std::vector< std::string > stdStringVec
Definition: mtsGenericObjectProxy.h:39
mtsGenericObjectProxyBase< T > FinalBaseType
Definition: mtsGenericObjectProxy.h:595
mtsGenericObjectProxy< char > mtsChar
Definition: mtsGenericObjectProxy.h:757
Typedef for fixed size vectors.
mtsGenericObjectProxy< unsigned int > mtsUInt
Definition: mtsGenericObjectProxy.h:748
Base class for high level objects.
Definition: cmnGenericObject.h:51
static bool CopyConstructorAvailable(void)
Definition: mtsGenericObjectProxy.h:152
Class register definitions and log macros.
#define CMN_LOG_INIT_ERROR
Definition: cmnLogger.h:162
mtsGenericObjectProxyBase(const ThisType &other)
Definition: mtsGenericObjectProxy.h:343
Base class for data object in cisstMultiTask.
Definition: mtsGenericObject.h:56
static void ToStreamRaw(std::ostream &outputStream, const char delimiter, const _elementType &data)
Definition: mtsGenericObjectProxy.h:74
const int CMN_DYNAMIC_CREATION_ONEARG
Definition: cmnClassRegisterMacros.h:333
virtual bool FromStreamRaw(std::istream &inputStream, const char delimiter= ' ')
virtual const cmnClassServicesBase * Services(void) const =0
static mtsGenericObject * ConditionalCreate(const T &arg, const std::string &name)
Definition: mtsGenericObjectProxy.h:639
mtsGenericObjectProxyBase< _elementType > BaseType
Definition: mtsGenericObjectProxy.h:375
const value_type & GetData(void) const
Definition: mtsGenericObjectProxy.h:406
static FinalRefType * ConditionalWrap(T &obj)
Definition: mtsGenericObjectProxy.h:673
mtsGenericObjectProxy< stdDoubleVec > mtsStdDoubleVecProxy
Definition: mtsGenericObjectProxy.h:773
static bool OneArgConstructorAvailable(void)
Definition: mtsGenericObjectProxy.h:170
static void ConditionalFree(const FinalRefType *obj)
Definition: mtsGenericObjectProxy.h:602
~mtsGenericObjectProxy(void)
Definition: mtsGenericObjectProxy.h:402
Definition: mtsGenericObjectProxy.h:710
static const T * CastArg(const mtsGenericObject &arg)
Definition: mtsGenericObjectProxy.h:617
static _class * Create(const cmnGenericObject &arg)
Definition: mtsGenericObjectProxy.h:190
static cmnGenericObject * Create(const cmnGenericObject &other)
Definition: mtsGenericObjectProxy.h:103
static bool OneArgConstructorAvailable(void)
Definition: mtsGenericObjectProxy.h:206
mtsGenericObject BaseType
Definition: mtsGenericObjectProxy.h:319
CMN_DECLARE_SERVICES_INSTANTIATION(mtsDouble)
T::RefType RefType
Definition: mtsGenericObjectProxy.h:705
Definition: mtsGenericObjectProxy.h:47
mtsGenericObjectProxy< _elementType > value_type
Definition: mtsGenericObjectProxy.h:99
static void ToStream(std::ostream &outputStream, const _elementType &data)
Definition: mtsGenericObjectProxy.h:71
ThisType & operator=(const BaseType &data)
Definition: mtsGenericObjectProxy.h:409
static void SerializeText(const DataType &data, std::ostream &outputStream, const char delimiter= ',')
mtsGenericObjectProxy< _elementType > argTypeWrapped
Definition: mtsGenericObjectProxy.h:160
mtsGenericTypesUnwrapImpl< T, cmnIsDerivedFromTemplated< T, mtsGenericObjectProxyBase >::IS_DERIVED >::BaseType BaseType
Definition: mtsGenericObjectProxy.h:715
mtsGenericObjectProxy< long > mtsLong
Definition: mtsGenericObjectProxy.h:736
static cmnGenericObject * CreateArray(size_t size, const cmnGenericObject &other)
Definition: mtsGenericObjectProxy.h:130
Definition: cmnClassServices.h:252
Definition: mtsGenericObjectProxy.h:330
std::vector< double > stdDoubleVec
Definition: mtsGenericObjectProxy.h:40
static cmnClassServicesBase * ClassServices(void)
Definition: mtsGenericObjectProxy.h:331
Definition: cmnClassServices.h:200
mtsGenericTypesImpl< T, cmnIsDerivedFrom< T, mtsGenericObject >::IS_DERIVED >::FinalType FinalType
Definition: mtsGenericObjectProxy.h:671
ThisType & operator=(value_type data)
Definition: mtsGenericObjectProxy.h:417
static bool IsEqual(const T &obj1, const mtsGenericObject &obj2)
Definition: mtsGenericObjectProxy.h:599
Definition: mtsGenericObjectProxy.h:591
virtual const cmnClassServicesBase * Services(void) const
Definition: mtsGenericObjectProxy.h:332
mtsGenericObjectProxy< long long > mtsLongLong
Definition: mtsGenericObjectProxy.h:739
static _class * Create(const cmnGenericObject &arg)
Definition: mtsGenericObjectProxy.h:163
mtsGenericObjectProxyRef(const value_type &data)
Definition: mtsGenericObjectProxy.h:507
Forward declarations and #define for cisstMultiTask.
Declaration of the class cmnTypeTraits.
void cmnDeSerializeRaw(std::istream &inputStream, _elementType &data)
Definition: cmnDeSerializer.h:82
mtsGenericObjectProxy< T > FinalType
Definition: mtsGenericObjectProxy.h:596
mtsGenericObjectProxyBase< _elementType >::RefType RefType
Definition: mtsGenericObjectProxy.h:488
static bool CISST_DEPRECATED FromStreamRaw(std::istream &CMN_UNUSED(inputStream), const char CMN_UNUSED(delimiter), _elementType &CMN_UNUSED(data))
Definition: mtsGenericObjectProxy.h:60
mtsGenericObjectProxy< _elementType > DeRefType
Definition: mtsGenericObjectProxy.h:320
static void ConditionalFree(const FinalRefType *)
Definition: mtsGenericObjectProxy.h:638
Definition: mtsGenericObjectProxy.h:329
void cmnSerializeRaw(std::ostream &outputStream, const _elementType &data)
Definition: cmnSerializer.h:78
Definition: mtsGenericObjectProxy.h:50
mtsGenericObjectProxyBase< _elementType >::DeRefType DeRefType
Definition: mtsGenericObjectProxy.h:377
mtsGenericTypesImpl< T, cmnIsDerivedFrom< T, mtsGenericObject >::IS_DERIVED >::FinalRefType FinalRefType
Definition: mtsGenericObjectProxy.h:672
T FinalRefType
Definition: mtsGenericObjectProxy.h:635
Defines mtsGenericObject.
static FinalRefType * ConditionalWrap(T &obj)
Definition: mtsGenericObjectProxy.h:598
Definition: mtsGenericObjectProxy.h:46
mtsGenericTypesUnwrapImpl< T, cmnIsDerivedFromTemplated< T, mtsGenericObjectProxyBase >::IS_DERIVED >::RefType RefType
Definition: mtsGenericObjectProxy.h:714
value_type & rData
Definition: mtsGenericObjectProxy.h:490
static T * CastArg(mtsGenericObject &arg)
Definition: mtsGenericObjectProxy.h:683
virtual void ToStream(std::ostream &outputStream) const
Definition: mtsGenericObjectProxy.h:560
value_type & GetData(void)
Definition: mtsGenericObjectProxy.h:516
static void CISST_DEPRECATED ToStream(std::ostream &outputStream, const _elementType &data)
Definition: mtsGenericObjectProxy.h:54
ThisType & operator=(const BaseType &data)
Definition: mtsGenericObjectProxy.h:520
static const T * CastArg(const mtsGenericObject &arg)
Definition: mtsGenericObjectProxy.h:686
void DeSerializeRaw(std::istream &inputStream)
Definition: mtsGenericObjectProxy.h:442
mtsGenericObjectProxy< int > mtsInt
Definition: mtsGenericObjectProxy.h:745
T BaseType
Definition: mtsGenericObjectProxy.h:697
mtsGenericObjectProxyRef(const ThisType &other)
Definition: mtsGenericObjectProxy.h:493
mtsGenericObjectProxyBase< _elementType > ThisType
Definition: mtsGenericObjectProxy.h:318
static bool Delete(cmnGenericObject *existing)
Definition: mtsGenericObjectProxy.h:236
mtsGenericObjectProxy< unsigned long > mtsULong
Definition: mtsGenericObjectProxy.h:742
mtsGenericObjectProxyRef< _elementType > ThisType
Definition: mtsGenericObjectProxy.h:484
T FinalBaseType
Definition: mtsGenericObjectProxy.h:633
Base class for class services.
Definition: cmnClassServicesBase.h:45
mtsGenericObjectProxy(const ThisType &other)
Definition: mtsGenericObjectProxy.h:389
ThisType & operator=(const ThisType &data)
Definition: mtsGenericObjectProxy.h:354
_class value_type
Definition: mtsGenericObjectProxy.h:186
mtsGenericObjectProxy< stdCharVec > mtsStdCharVecProxy
Definition: mtsGenericObjectProxy.h:776
mtsGenericObjectProxy< stdStringVec > mtsStdStringVecProxy
Definition: mtsGenericObjectProxy.h:770
mtsGenericObjectProxy< _elementType > argTypeWrapped
Definition: mtsGenericObjectProxy.h:187
T::BaseType BaseType
Definition: mtsGenericObjectProxy.h:706
static void DeSerializeText(DataType &data, std::istream &inputStream, const char delimiter= ',')
mtsGenericObjectProxy< std::string > mtsStdString
Definition: mtsGenericObjectProxy.h:766
T FinalType
Definition: mtsGenericObjectProxy.h:634
value_type * pointer
Definition: mtsGenericObjectProxy.h:101
T RefType
Definition: mtsGenericObjectProxy.h:696
mtsGenericObjectProxy< bool > mtsBool
Definition: mtsGenericObjectProxy.h:763
std::vector< char > stdCharVec
Definition: mtsGenericObjectProxy.h:41
static bool DeleteArray(generic_pointer &data, size_t &size)
Definition: mtsGenericObjectProxy.h:221
mtsGenericObjectProxy< unsigned char > mtsUChar
Definition: mtsGenericObjectProxy.h:760
Declaration of cmnDeSerializer and functions cmnDeSerializeRaw.
virtual bool FromStreamRaw(std::istream &inputStream, const char delimiter= ' ')
Definition: mtsGenericObjectProxy.h:469
std::vector< vct3 > stdVct3Vec
Definition: mtsGenericObjectProxy.h:804
virtual void ToStream(std::ostream &outputStream) const
Definition: mtsGenericObjectProxy.h:449
#define CMN_LOG_INIT_WARNING
Definition: cmnLogger.h:163
Definition: mtsGenericObjectProxy.h:45
~mtsGenericObjectProxyBase(void)
Definition: mtsGenericObjectProxy.h:347
virtual void ToStreamRaw(std::ostream &outputStream, const char delimiter= ' ', bool headerOnly=false, const std::string &headerPrefix="") const
Definition: mtsGenericObjectProxy.h:456
const int CMN_DYNAMIC_CREATION
Definition: cmnClassRegisterMacros.h:331
_class value_type
Definition: mtsGenericObjectProxy.h:159
virtual bool FromStreamRaw(std::istream &inputStream, const char delimiter= ' ')
Definition: mtsGenericObjectProxy.h:580
_elementType value_type
Definition: mtsGenericObjectProxy.h:323
virtual void ToStreamRaw(std::ostream &outputStream, const char delimiter= ' ', bool headerOnly=false, const std::string &headerPrefix="") const
Definition: cmnClassServices.h:103
static void CISST_DEPRECATED ToStreamRaw(std::ostream &outputStream, const char CMN_UNUSED(delimiter), const _elementType &data)
Definition: mtsGenericObjectProxy.h:57
mtsGenericObjectProxy< vct1 > mtsVct1
Definition: mtsGenericObjectProxy.h:784
mtsGenericObjectProxyRef(value_type &data)
Definition: mtsGenericObjectProxy.h:499
static mtsGenericObject * ConditionalCreate(const T &arg, const std::string &)
Definition: mtsGenericObjectProxy.h:603
mtsGenericObjectProxyBase< _elementType > BaseType
Definition: mtsGenericObjectProxy.h:485
mtsGenericObjectProxy< vctMatRot3 > mtsVctMatRot3
Definition: mtsGenericObjectProxy.h:1012
const int CMN_DYNAMIC_CREATION_SETNAME
Definition: cmnClassRegisterMacros.h:332
#define CMN_LOG_ALLOW_DEFAULT
Definition: cmnLogLoD.h:76
ThisType & operator=(value_type data)
Definition: mtsGenericObjectProxy.h:528
mtsGenericObjectProxy< vctDoubleMat > mtsVctDoubleMat
Definition: mtsGenericObjectProxy.h:1050
void CISST_EXPORT cmnDataDeSerializeTextDelimiter(std::istream &inputStream, const char delimiter, const char *className)
void DeSerializeRaw(std::istream &inputStream)
Definition: mtsGenericObjectProxy.h:553
static mtsGenericObject * ConditionalCreate(const T &arg, const std::string &name)
Definition: mtsGenericObjectProxy.h:676
mtsGenericObjectProxyRef< _elementType > RefType
Definition: mtsGenericObjectProxy.h:321
mtsGenericObjectProxy< unsigned short > mtsUShort
Definition: mtsGenericObjectProxy.h:754
mtsGenericObjectProxy< vct2x2 > mtsVct2x2
Definition: mtsGenericObjectProxy.h:1001
value_type & GetData(void)
Definition: mtsGenericObjectProxy.h:405
void SerializeRaw(std::ostream &outputStream) const
Definition: mtsGenericObjectProxy.h:547