15 #ifndef OSGDB__SERIALIZER
16 #define OSGDB__SERIALIZER
18 #include <osg/ref_ptr>
21 #include <osgDB/InputStream>
22 #include <osgDB/OutputStream>
32 extern OSGDB_EXPORT void split(
const std::string& src, StringList& list,
char separator=
' ' );
36 #define OBJECT_CAST static_cast
49 void add(
const char* str, Value value )
55 <<
" and new string: " << str << std::endl;
67 std::stringstream stream;
68 stream << str; stream >> value;
81 std::stringstream stream;
82 stream << value; stream >> str;
109 #define BEGIN_USER_TABLE(NAME, CLASS) \
110 static void add_user_value_func_##NAME(osgDB::IntLookup*); \
111 static osgDB::UserLookupTableProxy s_user_lookup_table_##NAME(&add_user_value_func_##NAME); \
112 static void add_user_value_func_##NAME(osgDB::IntLookup* lookup) { typedef CLASS MyClass
113 #define ADD_USER_VALUE(VALUE) lookup->add(#VALUE, MyClass::VALUE)
114 #define END_USER_TABLE() }
116 #define USER_READ_FUNC(NAME, FUNCNAME) \
117 static int FUNCNAME(osgDB::InputStream& is) { \
118 int value; if (is.isBinary()) is >> value; \
119 else { std::string str; is >> str; \
120 value = (s_user_lookup_table_##NAME)._lookup.getValue(str.c_str()); } \
123 #define USER_WRITE_FUNC(NAME, FUNCNAME) \
124 static void FUNCNAME(osgDB::OutputStream& os, int value) { \
125 if (os.isBinary()) os << value; \
126 else os << (s_user_lookup_table_##NAME)._lookup.getString(value); } \
162 virtual const std::string&
getName()
const = 0;
200 C&
object = OBJECT_CAST<C&>(obj);
203 bool ok =
false; is >> ok;
204 if ( !ok )
return true;
216 const C&
object = OBJECT_CAST<const C&>(obj);
217 bool ok = (*_checker)(object);
221 if ( !ok )
return true;
225 if ( !ok )
return true;
259 template<
typename C,
typename P>
274 C&
object = OBJECT_CAST<C&>(obj);
293 const C&
object = OBJECT_CAST<const C&>(obj);
302 if (
_useHex ) { os << std::hex << std::showbase; }
304 if (
_useHex ) os << std::dec << std::noshowbase;
318 template<
typename C,
typename P>
334 C&
object = OBJECT_CAST<C&>(obj);
351 const C&
object = OBJECT_CAST<const C&>(obj);
352 CP value = (
object.*
_getter)();
384 C&
object = OBJECT_CAST<C&>(obj);
402 const C&
object = OBJECT_CAST<const C&>(obj);
421 if ( is.getUseFloatMatrix() )
439 template<
typename C,
typename P>
454 C&
object = OBJECT_CAST<C&>(obj);
457 GLenum value; is >> value;
458 (
object.*
_setter)( static_cast<P>(value) );
463 (
object.*
_setter)( static_cast<P>(value.get()) );
470 const C&
object = OBJECT_CAST<const C&>(obj);
471 const P value = (
object.*
_getter)();
474 os << static_cast<GLenum>(value);
493 typedef const std::string& (C::*
Getter)()
const;
503 C&
object = OBJECT_CAST<C&>(obj);
513 if ( !value.empty() && (
_setter!=0) )
521 const C&
object = OBJECT_CAST<const C&>(obj);
522 const std::string& value = (
object.*
_getter)();
541 template<
typename C,
typename P>
554 virtual bool set(
osg::Object& obj,
void* value) { C&
object = OBJECT_CAST<C&>(obj); (
object.*
_setter)( *(reinterpret_cast<P**>(value)) );
return true; }
555 virtual bool get(
const osg::Object& obj,
void* value) {
const C&
object = OBJECT_CAST<const C&>(obj);*(
reinterpret_cast<const P**
>(value )) = (
object.*
_getter)();
return true; }
559 C&
object = OBJECT_CAST<C&>(obj);
560 bool hasObject =
false;
566 P* value =
dynamic_cast<P*
>( is.
readObject() );
576 P* value =
dynamic_cast<P*
>( is.
readObject() );
586 const C&
object = OBJECT_CAST<const C&>(obj);
587 const P* value = (
object.*
_getter)();
588 bool hasObject = (value!=
NULL);
616 template<
typename C,
typename P>
630 virtual bool set(
osg::Object& obj,
void* value) { C&
object = OBJECT_CAST<C&>(obj); (
object.*
_setter)( *(reinterpret_cast<P**>(value)) );
return true; }
631 virtual bool get(
const osg::Object& obj,
void* value) {
const C&
object = OBJECT_CAST<const C&>(obj);*(
reinterpret_cast<const P**
>(value )) = (
object.*
_getter)();
return true; }
635 C&
object = OBJECT_CAST<C&>(obj);
636 bool hasObject =
false;
642 P* value =
dynamic_cast<P*
>( is.
readImage() );
652 P* value =
dynamic_cast<P*
>( is.
readImage() );
662 const C&
object = OBJECT_CAST<const C&>(obj);
663 const P* value = (
object.*
_getter)();
664 bool hasObject = (value!=
NULL);
689 template<
typename C,
typename P,
typename B>
704 void add(
const char* str, P value )
705 {
_lookup.
add(str, static_cast<IntLookup::Value>(value)); }
715 C&
object = OBJECT_CAST<C&>(obj);
720 (
object.*
_setter)( static_cast<P>(value) );
724 std::string str; is >> str;
732 const C&
object = OBJECT_CAST<const C&>(obj);
733 const P value = (
object.*
_getter)();
754 template<
typename C,
typename P>
771 C&
object = OBJECT_CAST<C&>(obj);
772 unsigned int size = 0;
777 for (
unsigned int i=0; i<size; ++i )
781 list.push_back( value );
783 if ( size>0 ) (
object.*
_setter)( list );
789 for (
unsigned int i=0; i<size; ++i )
793 list.push_back( value );
806 const C&
object = OBJECT_CAST<const C&>(obj);
807 const P& list = (
object.*
_getter)();
808 unsigned int size = (
unsigned int)list.size();
812 for ( ConstIterator itr=list.begin();
813 itr!=list.end(); ++itr )
821 for ( ConstIterator itr=list.begin();
822 itr!=list.end(); ++itr )
865 template<
typename C,
typename P>
885 const C&
object = OBJECT_CAST<const C&>(obj);
887 return static_cast<unsigned int>(list.size());
891 C&
object = OBJECT_CAST<C&>(obj);
893 list.resize(numElements);
897 C&
object = OBJECT_CAST<C&>(obj);
899 list.reserve(numElements);
903 C&
object = OBJECT_CAST<C&>(obj);
909 C&
object = OBJECT_CAST<C&>(obj);
911 list.push_back(*reinterpret_cast<ValueType*>(ptr));
915 C&
object = OBJECT_CAST<C&>(obj);
917 if (index>=list.size()) list.resize(index+1);
918 list.insert(list.begin()+index, *
reinterpret_cast<ValueType*
>(ptr));
922 C&
object = OBJECT_CAST<C&>(obj);
924 if (index>=list.size()) list.resize(index+1);
925 list[index] = *
reinterpret_cast<ValueType*
>(ptr);
929 C&
object = OBJECT_CAST<C&>(obj);
931 if (index>=list.size())
return 0;
932 else return &list[index];
936 const C&
object = OBJECT_CAST<const C&>(obj);
938 if (index>=list.size())
return 0;
939 else return &list[index];
944 C&
object = OBJECT_CAST<C&>(obj);
945 unsigned int size = 0;
950 for (
unsigned int i=0; i<
size; ++i )
954 list.push_back( value );
956 if ( size>0 ) (
object.*
_setter)( list );
962 for (
unsigned int i=0; i<
size; ++i )
966 list.push_back( value );
979 const C&
object = OBJECT_CAST<const C&>(obj);
981 unsigned int size = (
unsigned int)list.size();
985 for ( ConstIterator itr=list.begin();
986 itr!=list.end(); ++itr )
996 for ( ConstIterator itr=list.begin(); itr!=list.end(); ++itr )
1003 for ( ConstIterator itr=list.begin(); itr!=list.end(); ++itr )
1005 os << (*itr); os << std::endl;
1011 for (ConstIterator itr=list.begin(); itr!=list.end(); ++itr)
1033 template<
typename C>
1049 const C& list = OBJECT_CAST<const C&>(obj);
1050 return static_cast<unsigned int>(list.size());
1054 C& list = OBJECT_CAST<C&>(obj);
1055 list.resize(numElements);
1059 C& list = OBJECT_CAST<C&>(obj);
1060 list.reserve(numElements);
1064 C& list = OBJECT_CAST<C&>(obj);
1069 C& list = OBJECT_CAST<C&>(obj);
1070 list.push_back(*reinterpret_cast<ValueType*>(ptr));
1074 C& list = OBJECT_CAST<C&>(obj);
1075 if (index>=list.size()) list.resize(index+1);
1076 list.insert(list.begin()+index, *
reinterpret_cast<ValueType*
>(ptr));
1080 C& list = OBJECT_CAST<C&>(obj);
1081 if (index>=list.size()) list.resize(index+1);
1082 list[index] = *
reinterpret_cast<ValueType*
>(ptr);
1086 C& list = OBJECT_CAST<C&>(obj);
1087 if (index>=list.size())
return 0;
1088 else return &list[index];
1093 const C& list = OBJECT_CAST<const C&>(obj);
1094 if (index>=list.size())
return 0;
1095 else return &list[index];
1100 C& list = OBJECT_CAST<C&>(obj);
1101 unsigned int size = 0;
1105 for (
unsigned int i=0; i<
size; ++i )
1109 list.push_back( value );
1116 for (
unsigned int i=0; i<
size; ++i )
1120 list.push_back( value );
1132 const C& list = OBJECT_CAST<const C&>(obj);
1133 unsigned int size = (
unsigned int)list.size();
1137 for ( ConstIterator itr=list.begin();
1138 itr!=list.end(); ++itr )
1148 for ( ConstIterator itr=list.begin(); itr!=list.end(); ++itr )
1155 for ( ConstIterator itr=list.begin(); itr!=list.end(); ++itr )
1157 os << (*itr); os << std::endl;
1163 for (ConstIterator itr=list.begin(); itr!=list.end(); ++itr)
1206 virtual bool valid()
const {
return false; }
1207 virtual const void*
getKey()
const {
return 0; }
1252 template<
typename C,
typename P>
1275 C&
object = OBJECT_CAST<C&>(obj);
1282 C&
object = OBJECT_CAST<C&>(obj);
1284 map[*
reinterpret_cast<KeyType*
>(ptrKey)] = *reinterpret_cast<ElementType*>(ptrValue);
1289 C&
object = OBJECT_CAST<C&>(obj);
1291 return &(map[*
reinterpret_cast<KeyType*
>(ptrKey)]);
1296 const C&
object = OBJECT_CAST<const C&>(obj);
1298 ConstIterator itr = map.find(*reinterpret_cast<KeyType*>(ptrKey));
1299 if (itr==map.end())
return 0;
1300 else return &(itr->second);
1305 const C&
object = OBJECT_CAST<const C&>(obj);
1313 Iterator itr, Iterator endItr):
1322 virtual const void*
getKey()
const {
return valid() ? &(_itr->first) : 0; }
1324 virtual void setElement(
void* ptr)
const {
if (
valid()) _itr->second = *
reinterpret_cast<ElementType*
>(ptr); }
1330 ReverseIterator itr, ReverseIterator endItr):
1339 virtual const void*
getKey()
const {
return valid() ? &(_itr->first) : 0; }
1341 virtual void setElement(
void* ptr)
const {
if (
valid()) _itr->second = *
reinterpret_cast<ElementType*
>(ptr); }
1346 C&
object = OBJECT_CAST<C&>(obj);
1353 C&
object = OBJECT_CAST<C&>(obj);
1360 C&
object = OBJECT_CAST<C&>(obj);
1361 unsigned int size = 0;
1366 for (
unsigned int i=0; i<
size; ++i )
1381 for (
unsigned int i=0; i<
size; ++i )
1397 const C&
object = OBJECT_CAST<const C&>(obj);
1399 unsigned int size = (
unsigned int)map.size();
1403 for ( ConstIterator itr=map.begin();
1404 itr!=map.end(); ++itr )
1406 os << itr->first << itr->second;
1412 for ( ConstIterator itr=map.begin(); itr!=map.end(); ++itr )
1414 os << itr->first << itr->second; os << std::endl;
1428 template<
typename C,
typename P=
unsigned int>
1439 void add(
const char* str, P value )
1441 _lookup.
add(str, static_cast<osgDB::IntLookup::Value>(value));
1452 C&
object = OBJECT_CAST<C&>(obj);
1457 bool ok =
false; is >> ok;
1458 if ( !ok )
return true;
1470 std::string maskSetString;
1471 is >> maskSetString;
1474 for (
unsigned int i=0; i<maskList.size(); ++i )
1483 const C&
object = OBJECT_CAST<const C&>(obj);
1484 const P mask = (
object.*
_getter)();
1502 std::string maskString;
1504 for( osgDB::IntLookup::ValueToString::const_iterator itr = v2sm.begin() ; itr != v2sm.end() ; itr++)
1505 if( (mask & itr->first) != 0 )
1506 maskString += std::string(itr->second +
"|");
1508 if ( !maskString.size() )
1509 maskString = std::string(
"NONE|");
1510 maskString.erase(maskString.size()-1,1);
1511 os << maskString << std::endl;
1525 #define ADD_SERIALIZER(S) \
1526 wrapper->addSerializer( (S) )
1528 #define ADD_USER_SERIALIZER(PROP) \
1529 wrapper->addSerializer( new osgDB::UserSerializer<MyClass>( \
1530 #PROP, &check##PROP, &read##PROP, &write##PROP), osgDB::BaseSerializer::RW_USER )
1532 #define ADD_BOOL_SERIALIZER(PROP, DEF) \
1533 wrapper->addSerializer( new osgDB::PropByValSerializer< MyClass, bool >( \
1534 #PROP, DEF, &MyClass::get##PROP, &MyClass::set##PROP), osgDB::BaseSerializer::RW_BOOL )
1536 #define ADD_CHAR_SERIALIZER(PROP, DEF) \
1537 wrapper->addSerializer( new osgDB::PropByValSerializer< MyClass, char >( \
1538 #PROP, DEF, &MyClass::get##PROP, &MyClass::set##PROP), osgDB::BaseSerializer::RW_CHAR )
1540 #define ADD_UCHAR_SERIALIZER(PROP, DEF) \
1541 wrapper->addSerializer( new osgDB::PropByValSerializer< MyClass, unsigned char >( \
1542 #PROP, DEF, &MyClass::get##PROP, &MyClass::set##PROP), osgDB::BaseSerializer::RW_UCHAR )
1544 #define ADD_SHORT_SERIALIZER(PROP, DEF) \
1545 wrapper->addSerializer( new osgDB::PropByValSerializer< MyClass, short >( \
1546 #PROP, DEF, &MyClass::get##PROP, &MyClass::set##PROP), osgDB::BaseSerializer::RW_SHORT )
1548 #define ADD_USHORT_SERIALIZER(PROP, DEF) \
1549 wrapper->addSerializer( new osgDB::PropByValSerializer< MyClass, unsigned short >( \
1550 #PROP, DEF, &MyClass::get##PROP, &MyClass::set##PROP), osgDB::BaseSerializer::RW_USHORT )
1552 #define ADD_HEXSHORT_SERIALIZER(PROP, DEF) \
1553 wrapper->addSerializer( new osgDB::PropByValSerializer< MyClass, unsigned short >( \
1554 #PROP, DEF, &MyClass::get##PROP, &MyClass::set##PROP, true), osgDB::BaseSerializer::RW_USHORT )
1556 #define ADD_INT_SERIALIZER(PROP, DEF) \
1557 wrapper->addSerializer( new osgDB::PropByValSerializer< MyClass, int >( \
1558 #PROP, DEF, &MyClass::get##PROP, &MyClass::set##PROP), osgDB::BaseSerializer::RW_INT )
1560 #define ADD_INT_SERIALIZER_NO_SET(PROP, DEF) \
1561 wrapper->addSerializer( new osgDB::PropByValSerializer< MyClass, int >( \
1562 #PROP, DEF, &MyClass::get##PROP, 0), osgDB::BaseSerializer::RW_INT )
1564 #define ADD_UINT_SERIALIZER(PROP, DEF) \
1565 wrapper->addSerializer( new osgDB::PropByValSerializer< MyClass, unsigned int >( \
1566 #PROP, DEF, &MyClass::get##PROP, &MyClass::set##PROP), osgDB::BaseSerializer::RW_UINT )
1568 #define ADD_UINT_SERIALIZER_NO_SET(PROP, DEF) \
1569 wrapper->addSerializer( new osgDB::PropByValSerializer< MyClass, unsigned int >( \
1570 #PROP, DEF, &MyClass::get##PROP, 0), osgDB::BaseSerializer::RW_UINT )
1572 #define ADD_GLINT_SERIALIZER(PROP, DEF) \
1573 wrapper->addSerializer( new osgDB::PropByValSerializer< MyClass, GLint >( \
1574 #PROP, ((int)(DEF)), &MyClass::get##PROP, &MyClass::set##PROP), osgDB::BaseSerializer::RW_INT )
1576 #define ADD_HEXINT_SERIALIZER(PROP, DEF) \
1577 wrapper->addSerializer( new osgDB::PropByValSerializer< MyClass, unsigned int >( \
1578 #PROP, DEF, &MyClass::get##PROP, &MyClass::set##PROP, true), osgDB::BaseSerializer::RW_UINT )
1580 #define ADD_FLOAT_SERIALIZER(PROP, DEF) \
1581 wrapper->addSerializer( new osgDB::PropByValSerializer< MyClass, float >( \
1582 #PROP, DEF, &MyClass::get##PROP, &MyClass::set##PROP), osgDB::BaseSerializer::RW_FLOAT )
1584 #define ADD_DOUBLE_SERIALIZER(PROP, DEF) \
1585 wrapper->addSerializer( new osgDB::PropByValSerializer< MyClass, double >( \
1586 #PROP, DEF, &MyClass::get##PROP, &MyClass::set##PROP), osgDB::BaseSerializer::RW_DOUBLE )
1588 #define ADD_REF_BOOL_SERIALIZER(PROP, DEF) \
1589 wrapper->addSerializer( new osgDB::PropByRefSerializer< MyClass, bool >( \
1590 #PROP, DEF, &MyClass::get##PROP, &MyClass::set##PROP), osgDB::BaseSerializer::RW_BOOL )
1592 #define ADD_REF_CHAR_SERIALIZER(PROP, DEF) \
1593 wrapper->addSerializer( new osgDB::PropByRefSerializer< MyClass, char >( \
1594 #PROP, DEF, &MyClass::get##PROP, &MyClass::set##PROP), osgDB::BaseSerializer::RW_CHAR )
1596 #define ADD_REF_UCHAR_SERIALIZER(PROP, DEF) \
1597 wrapper->addSerializer( new osgDB::PropByRefSerializer< MyClass, unsigned char >( \
1598 #PROP, DEF, &MyClass::get##PROP, &MyClass::set##PROP), osgDB::BaseSerializer::RW_UCHAR )
1600 #define ADD_REF_SHORT_SERIALIZER(PROP, DEF) \
1601 wrapper->addSerializer( new osgDB::PropByRefSerializer< MyClass, short >( \
1602 #PROP, DEF, &MyClass::get##PROP, &MyClass::set##PROP), osgDB::BaseSerializer::RW_SHORT )
1604 #define ADD_REF_USHORT_SERIALIZER(PROP, DEF) \
1605 wrapper->addSerializer( new osgDB::PropByRefSerializer< MyClass, unsigned short >( \
1606 #PROP, DEF, &MyClass::get##PROP, &MyClass::set##PROP), osgDB::BaseSerializer::RW_USHORT )
1608 #define ADD_REF_HEXSHORT_SERIALIZER(PROP, DEF) \
1609 wrapper->addSerializer( new osgDB::PropByRefSerializer< MyClass, unsigned short >( \
1610 #PROP, DEF, &MyClass::get##PROP, &MyClass::set##PROP, true), osgDB::BaseSerializer::RW_USHORT )
1612 #define ADD_REF_INT_SERIALIZER(PROP, DEF) \
1613 wrapper->addSerializer( new osgDB::PropByRefSerializer< MyClass, int >( \
1614 #PROP, DEF, &MyClass::get##PROP, &MyClass::set##PROP), osgDB::BaseSerializer::RW_INT )
1616 #define ADD_REF_UINT_SERIALIZER(PROP, DEF) \
1617 wrapper->addSerializer( new osgDB::PropByRefSerializer< MyClass, unsigned int >( \
1618 #PROP, DEF, &MyClass::get##PROP, &MyClass::set##PROP), osgDB::BaseSerializer::RW_UINT )
1620 #define ADD_REF_GLINT_SERIALIZER(PROP, DEF) \
1621 wrapper->addSerializer( new osgDB::PropByRefSerializer< MyClass, GLint >( \
1622 #PROP, ((int)(DEF)), &MyClass::get##PROP, &MyClass::set##PROP), osgDB::BaseSerializer::RW_INT )
1624 #define ADD_REF_HEXINT_SERIALIZER(PROP, DEF) \
1625 wrapper->addSerializer( new osgDB::PropByRefSerializer< MyClass, unsigned int >( \
1626 #PROP, DEF, &MyClass::get##PROP, &MyClass::set##PROP, true), osgDB::BaseSerializer::RW_UINT )
1628 #define ADD_REF_FLOAT_SERIALIZER(PROP, DEF) \
1629 wrapper->addSerializer( new osgDB::PropByRefSerializer< MyClass, float >( \
1630 #PROP, DEF, &MyClass::get##PROP, &MyClass::set##PROP), osgDB::BaseSerializer::RW_FLOAT )
1632 #define ADD_REF_DOUBLE_SERIALIZER(PROP, DEF) \
1633 wrapper->addSerializer( new osgDB::PropByRefSerializer< MyClass, double >( \
1634 #PROP, DEF, &MyClass::get##PROP, &MyClass::set##PROP), osgDB::BaseSerializer::RW_DOUBLE )
1637 #define ADD_VEC2B_SERIALIZER(PROP, DEF) \
1638 wrapper->addSerializer( new osgDB::PropByRefSerializer< MyClass, osg::Vec2b >( \
1639 #PROP, DEF, &MyClass::get##PROP, &MyClass::set##PROP), osgDB::BaseSerializer::RW_VEC2B )
1641 #define ADD_VEC2UB_SERIALIZER(PROP, DEF) \
1642 wrapper->addSerializer( new osgDB::PropByRefSerializer< MyClass, osg::Vec2ub >( \
1643 #PROP, DEF, &MyClass::get##PROP, &MyClass::set##PROP), osgDB::BaseSerializer::RW_VEC2UB )
1645 #define ADD_VEC2S_SERIALIZER(PROP, DEF) \
1646 wrapper->addSerializer( new osgDB::PropByRefSerializer< MyClass, osg::Vec2s >( \
1647 #PROP, DEF, &MyClass::get##PROP, &MyClass::set##PROP), osgDB::BaseSerializer::RW_VEC2S )
1649 #define ADD_VEC2US_SERIALIZER(PROP, DEF) \
1650 wrapper->addSerializer( new osgDB::PropByRefSerializer< MyClass, osg::Vec2us >( \
1651 #PROP, DEF, &MyClass::get##PROP, &MyClass::set##PROP), osgDB::BaseSerializer::RW_VEC2US )
1653 #define ADD_VEC2I_SERIALIZER(PROP, DEF) \
1654 wrapper->addSerializer( new osgDB::PropByRefSerializer< MyClass, osg::Vec2i >( \
1655 #PROP, DEF, &MyClass::get##PROP, &MyClass::set##PROP), osgDB::BaseSerializer::RW_VEC2I )
1657 #define ADD_VEC2UI_SERIALIZER(PROP, DEF) \
1658 wrapper->addSerializer( new osgDB::PropByRefSerializer< MyClass, osg::Vec2ui >( \
1659 #PROP, DEF, &MyClass::get##PROP, &MyClass::set##PROP), osgDB::BaseSerializer::RW_VEC2UI )
1661 #define ADD_VEC2F_SERIALIZER(PROP, DEF) \
1662 wrapper->addSerializer( new osgDB::PropByRefSerializer< MyClass, osg::Vec2f >( \
1663 #PROP, DEF, &MyClass::get##PROP, &MyClass::set##PROP), osgDB::BaseSerializer::RW_VEC2F )
1665 #define ADD_VEC2D_SERIALIZER(PROP, DEF) \
1666 wrapper->addSerializer( new osgDB::PropByRefSerializer< MyClass, osg::Vec2d >( \
1667 #PROP, DEF, &MyClass::get##PROP, &MyClass::set##PROP), osgDB::BaseSerializer::RW_VEC2D )
1669 #define ADD_VEC2_SERIALIZER(PROP, DEF) ADD_VEC2F_SERIALIZER(PROP, DEF)
1672 #define ADD_VEC3B_SERIALIZER(PROP, DEF) \
1673 wrapper->addSerializer( new osgDB::PropByRefSerializer< MyClass, osg::Vec3b >( \
1674 #PROP, DEF, &MyClass::get##PROP, &MyClass::set##PROP), osgDB::BaseSerializer::RW_VEC3B )
1676 #define ADD_VEC3UB_SERIALIZER(PROP, DEF) \
1677 wrapper->addSerializer( new osgDB::PropByRefSerializer< MyClass, osg::Vec3ub >( \
1678 #PROP, DEF, &MyClass::get##PROP, &MyClass::set##PROP), osgDB::BaseSerializer::RW_VEC3UB )
1680 #define ADD_VEC3S_SERIALIZER(PROP, DEF) \
1681 wrapper->addSerializer( new osgDB::PropByRefSerializer< MyClass, osg::Vec3s >( \
1682 #PROP, DEF, &MyClass::get##PROP, &MyClass::set##PROP), osgDB::BaseSerializer::RW_VEC3S )
1684 #define ADD_VEC3US_SERIALIZER(PROP, DEF) \
1685 wrapper->addSerializer( new osgDB::PropByRefSerializer< MyClass, osg::Vec3us >( \
1686 #PROP, DEF, &MyClass::get##PROP, &MyClass::set##PROP), osgDB::BaseSerializer::RW_VEC3US )
1688 #define ADD_VEC3I_SERIALIZER(PROP, DEF) \
1689 wrapper->addSerializer( new osgDB::PropByRefSerializer< MyClass, osg::Vec3i >( \
1690 #PROP, DEF, &MyClass::get##PROP, &MyClass::set##PROP), osgDB::BaseSerializer::RW_VEC3I )
1692 #define ADD_VEC3UI_SERIALIZER(PROP, DEF) \
1693 wrapper->addSerializer( new osgDB::PropByRefSerializer< MyClass, osg::Vec3ui >( \
1694 #PROP, DEF, &MyClass::get##PROP, &MyClass::set##PROP), osgDB::BaseSerializer::RW_VEC3UI )
1696 #define ADD_VEC3F_SERIALIZER(PROP, DEF) \
1697 wrapper->addSerializer( new osgDB::PropByRefSerializer< MyClass, osg::Vec3f >( \
1698 #PROP, DEF, &MyClass::get##PROP, &MyClass::set##PROP), osgDB::BaseSerializer::RW_VEC3F )
1700 #define ADD_VEC3D_SERIALIZER(PROP, DEF) \
1701 wrapper->addSerializer( new osgDB::PropByRefSerializer< MyClass, osg::Vec3d >( \
1702 #PROP, DEF, &MyClass::get##PROP, &MyClass::set##PROP), osgDB::BaseSerializer::RW_VEC3D )
1704 #define ADD_VEC3_SERIALIZER(PROP, DEF) ADD_VEC3F_SERIALIZER(PROP, DEF)
1706 #define ADD_VEC4B_SERIALIZER(PROP, DEF) \
1707 wrapper->addSerializer( new osgDB::PropByRefSerializer< MyClass, osg::Vec4b >( \
1708 #PROP, DEF, &MyClass::get##PROP, &MyClass::set##PROP), osgDB::BaseSerializer::RW_VEC4B )
1710 #define ADD_VEC4UB_SERIALIZER(PROP, DEF) \
1711 wrapper->addSerializer( new osgDB::PropByRefSerializer< MyClass, osg::Vec4ub >( \
1712 #PROP, DEF, &MyClass::get##PROP, &MyClass::set##PROP), osgDB::BaseSerializer::RW_VEC4UB )
1714 #define ADD_VEC4S_SERIALIZER(PROP, DEF) \
1715 wrapper->addSerializer( new osgDB::PropByRefSerializer< MyClass, osg::Vec4s >( \
1716 #PROP, DEF, &MyClass::get##PROP, &MyClass::set##PROP), osgDB::BaseSerializer::RW_VEC4S )
1718 #define ADD_VEC4US_SERIALIZER(PROP, DEF) \
1719 wrapper->addSerializer( new osgDB::PropByRefSerializer< MyClass, osg::Vec4us >( \
1720 #PROP, DEF, &MyClass::get##PROP, &MyClass::set##PROP), osgDB::BaseSerializer::RW_VEC4US )
1722 #define ADD_VEC4I_SERIALIZER(PROP, DEF) \
1723 wrapper->addSerializer( new osgDB::PropByRefSerializer< MyClass, osg::Vec4i >( \
1724 #PROP, DEF, &MyClass::get##PROP, &MyClass::set##PROP), osgDB::BaseSerializer::RW_VEC4I )
1726 #define ADD_VEC4UI_SERIALIZER(PROP, DEF) \
1727 wrapper->addSerializer( new osgDB::PropByRefSerializer< MyClass, osg::Vec4ui >( \
1728 #PROP, DEF, &MyClass::get##PROP, &MyClass::set##PROP), osgDB::BaseSerializer::RW_VEC4UI )
1730 #define ADD_VEC4F_SERIALIZER(PROP, DEF) \
1731 wrapper->addSerializer( new osgDB::PropByRefSerializer< MyClass, osg::Vec4f >( \
1732 #PROP, DEF, &MyClass::get##PROP, &MyClass::set##PROP), osgDB::BaseSerializer::RW_VEC4F )
1734 #define ADD_VEC4D_SERIALIZER(PROP, DEF) \
1735 wrapper->addSerializer( new osgDB::PropByRefSerializer< MyClass, osg::Vec4d >( \
1736 #PROP, DEF, &MyClass::get##PROP, &MyClass::set##PROP), osgDB::BaseSerializer::RW_VEC4D )
1738 #define ADD_VEC4_SERIALIZER(PROP, DEF) ADD_VEC4F_SERIALIZER(PROP, DEF)
1740 #define ADD_QUAT_SERIALIZER(PROP, DEF) \
1741 wrapper->addSerializer( new osgDB::PropByRefSerializer< MyClass, osg::Quat >( \
1742 #PROP, DEF, &MyClass::get##PROP, &MyClass::set##PROP), osgDB::BaseSerializer::RW_QUAT )
1744 #define ADD_PLANE_SERIALIZER(PROP, DEF) \
1745 wrapper->addSerializer( new osgDB::PropByRefSerializer< MyClass, osg::Plane >( \
1746 #PROP, DEF, &MyClass::get##PROP, &MyClass::set##PROP), osgDB::BaseSerializer::RW_PLANE )
1748 #define ADD_MATRIXF_SERIALIZER(PROP, DEF) \
1749 wrapper->addSerializer( new osgDB::PropByRefSerializer< MyClass, osg::Matrixf >( \
1750 #PROP, DEF, &MyClass::get##PROP, &MyClass::set##PROP), osgDB::BaseSerializer::RW_MATRIXF )
1752 #define ADD_MATRIXD_SERIALIZER(PROP, DEF) \
1753 wrapper->addSerializer( new osgDB::PropByRefSerializer< MyClass, osg::Matrixd >( \
1754 #PROP, DEF, &MyClass::get##PROP, &MyClass::set##PROP), osgDB::BaseSerializer::RW_MATRIXD )
1756 #define ADD_MATRIX_SERIALIZER(PROP, DEF) \
1757 wrapper->addSerializer( new osgDB::MatrixSerializer< MyClass >( \
1758 #PROP, DEF, &MyClass::get##PROP, &MyClass::set##PROP), osgDB::BaseSerializer::RW_MATRIX )
1761 #define ADD_BOUNDINGBOXF_SERIALIZER(PROP, DEF) \
1762 wrapper->addSerializer( new osgDB::PropByRefSerializer< MyClass, osg::BoundingBoxf >( \
1763 #PROP, DEF, &MyClass::get##PROP, &MyClass::set##PROP), osgDB::BaseSerializer::RW_BOUNDINGBOXF )
1765 #define ADD_BOUNDINGBOXD_SERIALIZER(PROP, DEF) \
1766 wrapper->addSerializer( new osgDB::PropByRefSerializer< MyClass, osg::BoundingBoxd >( \
1767 #PROP, DEF, &MyClass::get##PROP, &MyClass::set##PROP), osgDB::BaseSerializer::RW_BOUNDINGBOXD )
1769 #define ADD_BOUNDINGSPHEREF_SERIALIZER(PROP, DEF) \
1770 wrapper->addSerializer( new osgDB::PropByRefSerializer< MyClass, osg::BoundingSpheref >( \
1771 #PROP, DEF, &MyClass::get##PROP, &MyClass::set##PROP), osgDB::BaseSerializer::RW_BOUNDINGSPHEREF )
1773 #define ADD_BOUNDINGSPHERED_SERIALIZER(PROP, DEF) \
1774 wrapper->addSerializer( new osgDB::PropByRefSerializer< MyClass, osg::BoundingSphered >( \
1775 #PROP, DEF, &MyClass::get##PROP, &MyClass::set##PROP), osgDB::BaseSerializer::RW_BOUNDINGSPHERED )
1778 #define ADD_GLENUM_SERIALIZER(PROP, TYPE, DEF) \
1779 wrapper->addSerializer( new osgDB::GLenumSerializer< MyClass, TYPE >( \
1780 #PROP, DEF, &MyClass::get##PROP, &MyClass::set##PROP), osgDB::BaseSerializer::RW_GLENUM )
1782 #define ADD_GLENUM_SERIALIZER_NO_SET(PROP, TYPE, DEF) \
1783 wrapper->addSerializer( new osgDB::GLenumSerializer< MyClass, TYPE >( \
1784 #PROP, DEF, &MyClass::get##PROP, 0), osgDB::BaseSerializer::RW_GLENUM )
1786 #define ADD_STRING_SERIALIZER(PROP, DEF) \
1787 wrapper->addSerializer( new osgDB::StringSerializer< MyClass >( \
1788 #PROP, DEF, &MyClass::get##PROP, &MyClass::set##PROP), osgDB::BaseSerializer::RW_STRING )
1790 #define ADD_OBJECT_SERIALIZER(PROP, TYPE, DEF) \
1791 wrapper->addSerializer( new osgDB::ObjectSerializer< MyClass, TYPE >( \
1792 #PROP, DEF, &MyClass::get##PROP, &MyClass::set##PROP), osgDB::BaseSerializer::RW_OBJECT )
1794 #define ADD_OBJECT_SERIALIZER_NO_SET(PROP, TYPE, DEF) \
1795 wrapper->addSerializer( new osgDB::ObjectSerializer< MyClass, TYPE >( \
1796 #PROP, DEF, &MyClass::get##PROP, 0), osgDB::BaseSerializer::RW_OBJECT )
1798 #define ADD_IMAGE_SERIALIZER(PROP, TYPE, DEF) \
1799 wrapper->addSerializer( new osgDB::ImageSerializer< MyClass, TYPE >( \
1800 #PROP, DEF, &MyClass::get##PROP, &MyClass::set##PROP), osgDB::BaseSerializer::RW_IMAGE )
1802 #define ADD_LIST_SERIALIZER(PROP, TYPE) \
1803 wrapper->addSerializer( new osgDB::ListSerializer< MyClass, TYPE >( \
1804 #PROP, &MyClass::get##PROP, &MyClass::set##PROP), osgDB::BaseSerializer::RW_LIST )
1807 #define ADD_VECTOR_SERIALIZER(PROP, TYPE, ELEMENTTYPE, NUMELEMENTSONROW) \
1808 wrapper->addSerializer( new osgDB::VectorSerializer< MyClass, TYPE >( \
1809 #PROP, &MyClass::get##PROP, &MyClass::get##PROP, &MyClass::set##PROP, ELEMENTTYPE, NUMELEMENTSONROW), osgDB::BaseSerializer::RW_VECTOR )
1811 #define ADD_ISAVECTOR_SERIALIZER(PROP, ELEMENTTYPE, NUMELEMENTSONROW) \
1812 wrapper->addSerializer( new osgDB::IsAVectorSerializer< MyClass >( #PROP, ELEMENTTYPE, NUMELEMENTSONROW), osgDB::BaseSerializer::RW_VECTOR )
1814 #define BEGIN_ENUM_SERIALIZER(PROP, DEF) \
1815 { typedef osgDB::EnumSerializer<MyClass, MyClass::PROP, void> MySerializer; \
1816 osg::ref_ptr<MySerializer> serializer = new MySerializer( \
1817 #PROP, MyClass::DEF, &MyClass::get##PROP, &MyClass::set##PROP)
1819 #define BEGIN_ENUM_SERIALIZER2(PROP, TYPE, DEF) \
1820 { typedef osgDB::EnumSerializer<MyClass, TYPE, void> MySerializer; \
1821 osg::ref_ptr<MySerializer> serializer = new MySerializer( \
1822 #PROP, MyClass::DEF, &MyClass::get##PROP, &MyClass::set##PROP)
1824 #define BEGIN_ENUM_SERIALIZER3(PROP, DEF) \
1825 { typedef osgDB::EnumSerializer<MyClass, MyClass::PROP, bool> MySerializer; \
1826 osg::ref_ptr<MySerializer> serializer = new MySerializer( \
1827 #PROP, MyClass::DEF, &MyClass::get##PROP, &MyClass::set##PROP)
1829 #define BEGIN_ENUM_SERIALIZER4(PROPERTIES_CLASS, PROP, DEF) \
1830 { typedef osgDB::EnumSerializer<MyClass, PROPERTIES_CLASS::PROP, void> MySerializer; \
1831 osg::ref_ptr<MySerializer> serializer = new MySerializer( \
1832 #PROP, PROPERTIES_CLASS::DEF, &MyClass::get##PROP, &MyClass::set##PROP)
1834 #define BEGIN_ENUM_SERIALIZER_NO_SET(PROP, DEF) \
1835 { typedef osgDB::EnumSerializer<MyClass, MyClass::PROP, void> MySerializer; \
1836 osg::ref_ptr<MySerializer> serializer = new MySerializer( \
1837 #PROP, MyClass::DEF, &MyClass::get##PROP, 0)
1839 #define ADD_ENUM_VALUE(VALUE) \
1840 serializer->add(#VALUE, MyClass::VALUE)
1842 #define ADD_ENUM_CLASS_VALUE(CLASS, VALUE) \
1843 serializer->add(#VALUE, CLASS::VALUE)
1845 #define END_ENUM_SERIALIZER() \
1846 wrapper->addSerializer(serializer.get(), osgDB::BaseSerializer::RW_ENUM); }
1849 #define BEGIN_BITFLAGS_SERIALIZER(PROP, DEF) \
1850 { typedef osgDB::BitFlagsSerializer<MyClass> MySerializer; \
1851 osg::ref_ptr<MySerializer> serializer = new MySerializer( \
1852 #PROP, DEF, &MyClass::get##PROP, &MyClass::set##PROP)
1854 #define BEGIN_UINT_BITFLAGS_SERIALIZER(PROP, DEF) \
1855 { typedef osgDB::BitFlagsSerializer<MyClass, unsigned int> MySerializer; \
1856 osg::ref_ptr<MySerializer> serializer = new MySerializer( \
1857 #PROP, DEF, &MyClass::get##PROP, &MyClass::set##PROP)
1859 #define BEGIN_INT_BITFLAGS_SERIALIZER(PROP, DEF) \
1860 { typedef osgDB::BitFlagsSerializer<MyClass, int> MySerializer; \
1861 osg::ref_ptr<MySerializer> serializer = new MySerializer( \
1862 #PROP, DEF, &MyClass::get##PROP, &MyClass::set##PROP)
1864 #define ADD_BITFLAG_VALUE(VALUE_NAME, VALUE) \
1865 serializer->add(#VALUE_NAME, VALUE)
1867 #define END_BITFLAGS_SERIALIZER() \
1868 wrapper->addSerializer(serializer.get(), osgDB::BaseSerializer::RW_INT); }
1871 #define UPDATE_TO_VERSION(VER) \
1872 wrapper->setUpdatedVersion( (VER) );
1874 #define UPDATE_TO_VERSION_SCOPED(VER) \
1875 osgDB::UpdateWrapperVersionProxy uwvp(wrapper, (VER));
1877 #define REMOVE_SERIALIZER(PROP) \
1878 wrapper->markSerializerAsRemoved( #PROP );
1880 #define ADD_MAP_SERIALIZER(PROP, TYPE, KEYTYPE, ELEMENTTYPE) \
1881 wrapper->addSerializer( new osgDB::MapSerializer< MyClass, TYPE >( \
1882 #PROP, &MyClass::get##PROP, &MyClass::get##PROP, &MyClass::set##PROP, KEYTYPE, ELEMENTTYPE), osgDB::BaseSerializer::RW_MAP )
1884 #define ADD_METHOD_OBJECT( METHODNAME, METHODOBJECTCLASS ) wrapper->addMethodObject(METHODNAME, new METHODOBJECTCLASS());
1886 #define ADD_METHOD(METHODNAME) \
1888 struct MethodCaller : public osgDB::MethodObject \
1890 virtual bool run(void* objectPtr, osg::Parameters&, osg::Parameters&) const \
1892 MyClass* obj = reinterpret_cast<MyClass*>(objectPtr); \
1893 obj->METHODNAME(); \
1897 wrapper->addMethodObject(#METHODNAME, new MethodCaller()); \
1901 #define SET_USAGE(VALUE) wrapper->getLastSerializer()->setUsage(VALUE)
void writeWrappedString(const std::string &str)
virtual unsigned int size(const osg::Object &) const
bool supportsReadWrite() const
const std::string & getString(Value value)
const P *(C::* Getter)() const
bool(* Writer)(OutputStream &, const C &)
const P &(C::* ConstGetter)() const
const osg::Matrix &(C::* Getter)() const
BaseSerializer::Type getElementType() const
virtual void clear(osg::Object &obj) const
virtual unsigned int size(const osg::Object &) const
virtual const std::string & getName() const
virtual bool write(OutputStream &os, const osg::Object &obj)
TemplateSerializer< P > ParentType
unsigned int _elementSize
void(C::* Setter)(const P &)
virtual bool write(OutputStream &os, const osg::Object &obj)
virtual void resize(osg::Object &obj, unsigned int numElements) const
ValueToString & getValueToString()
P::const_iterator ConstIterator
MapBaseSerializer(BaseSerializer::Type keyType, unsigned int keySize, BaseSerializer::Type elementType, unsigned int elementSize)
virtual MapIteratorObject * createIterator(osg::Object &) const
MapSerializer(const char *name, ConstGetter cgf, Getter gf, Setter sf, BaseSerializer::Type keyType, BaseSerializer::Type elementType)
virtual void reserve(osg::Object &obj, unsigned int numElements) const
virtual const std::string & getName() const =0
void readMatrixImplementation(InputStream &is, osg::Matrix &matrix)
virtual bool read(InputStream &is, osg::Object &obj)
virtual void resize(osg::Object &obj, unsigned int numElements) const
virtual void clear(osg::Object &obj) const
virtual void setElement(osg::Object &, void *, void *) const
virtual bool read(InputStream &is, osg::Object &obj)
unsigned int _numElementsOnRow
void writeImage(const osg::Image *img)
virtual void setElement(void *ptr) const
virtual const std::string & getName() const
ValueToString _valueToString
virtual const std::string & getName() const
virtual IntLookup * getIntLookup()
virtual unsigned int size(const osg::Object &obj) const
std::vector< std::string > StringList
BaseSerializer::Type _elementType
std::map< Value, std::string > ValueToString
bool(* Checker)(const C &)
virtual void clear(osg::Object &) const
P getValue(const char *str)
virtual bool read(InputStream &is, osg::Object &obj)
virtual void * getElement() const
virtual MapIteratorObject * createReverseIterator(osg::Object &obj) const
MapIteratorObject(BaseSerializer::Type keyType, unsigned int keySize, BaseSerializer::Type elementType, unsigned int elementSize)
VectorBaseSerializer(BaseSerializer::Type elementType, unsigned int elementSize)
unsigned int getElementSize() const
TemplateSerializer< P * > ParentType
virtual void setElement(osg::Object &obj, unsigned int index, void *ptr) const
const P &(C::* Getter)() const
virtual bool set(osg::Object &, void *)
BaseSerializer(int usage)
TemplateSerializer< osg::Matrix > ParentType
void add(const char *str, P value)
virtual bool valid() const
const std::string & getString(P value)
TemplateSerializer< P > ParentType
virtual bool read(InputStream &is, osg::Object &obj)
virtual bool write(osgDB::OutputStream &os, const osg::Object &obj)
virtual bool write(OutputStream &os, const osg::Object &obj)
TemplateSerializer< P > ParentType
const P &(C::* ConstGetter)() const
const std::string &(C::* Getter)() const
StringToValue & getStringToValue()
virtual const void * getKey() const
TemplateSerializer< P > ParentType
Type getElementType() const
const std::string & getString(P value)
void writeObject(const osg::Object *obj)
virtual bool write(osgDB::OutputStream &os, const osg::Object &obj)
virtual const void * getKey() const
virtual void addElement(osg::Object &obj, void *ptr) const
P getValue(const char *str)
Type getElementType() const
virtual bool write(OutputStream &os, const osg::Object &obj)
PropByValSerializer(const char *name, P def, Getter gf, Setter sf, bool useHex=false)
virtual bool write(OutputStream &os, const osg::Object &obj)
unsigned int getKeySize() const
virtual const std::string & getName() const
TemplateSerializer< P * > ParentType
virtual bool write(OutputStream &os, const osg::Object &obj)
virtual void insertElement(osg::Object &obj, unsigned int index, void *ptr) const
virtual bool write(OutputStream &os, const osg::Object &obj)
virtual bool write(OutputStream &, const osg::Object &)=0
virtual bool write(OutputStream &os, const osg::Object &obj)
ObjectSerializer(const char *name, P *def, Getter gf, Setter sf)
const ValueToString & getValueToString() const
typedef void(GL_APIENTRY *GLTexImage3DProc)(GLenum target
virtual bool read(InputStream &is, osg::Object &obj)
virtual void * getElement() const
P::reverse_iterator ReverseIterator
virtual bool read(InputStream &is, osg::Object &obj)
EnumSerializer(const char *name, P def, Getter gf, Setter sf)
virtual void setElement(osg::Object &obj, unsigned int index, void *ptr) const
BaseSerializer::Type _keyType
void add(const char *str, P value)
virtual bool write(OutputStream &os, const osg::Object &obj)
GLenumSerializer(const char *name, P def, Getter gf, Setter sf)
unsigned int _numElementsOnRow
C::const_iterator ConstIterator
virtual bool set(osg::Object &obj, void *value)
virtual bool read(InputStream &is, osg::Object &obj)
virtual bool read(InputStream &is, osg::Object &obj)
virtual unsigned int size(const osg::Object &obj) const
virtual bool read(InputStream &is, osg::Object &obj)
IsAVectorSerializer(const char *name, BaseSerializer::Type elementType, unsigned int numElementsOnRow)
virtual bool read(InputStream &is, osg::Object &obj)
StringToValue _stringToValue
const StringToValue & getStringToValue() const
unsigned int size() const
unsigned int getKeySize() const
virtual const void * getKey() const
Value getValue(const char *str)
UserLookupTableProxy(AddValueFunc func)
virtual unsigned int size(const osg::Object &obj) const
ReverseMapIterator(BaseSerializer::Type keyType, unsigned int keySize, BaseSerializer::Type elementType, unsigned int elementSize, ReverseIterator itr, ReverseIterator endItr)
virtual bool set(osg::Object &obj, void *value)
virtual const void * getElement(const osg::Object &obj, unsigned int index) const
virtual const void * getElement(const osg::Object &obj, unsigned int index) const
virtual bool write(OutputStream &os, const osg::Object &obj)
unsigned int _elementSize
virtual bool read(InputStream &is, osg::Object &obj)=0
TemplateSerializer< P > ParentType
unsigned int getElementSize() const
P::mapped_type ElementType
ImageSerializer(const char *name, P *def, Getter gf, Setter sf)
virtual IntLookup * getIntLookup()
virtual const std::string & getName() const
void setUsage(bool hasGetter, bool hasSetter)
virtual bool write(OutputStream &os, const osg::Object &obj)
virtual const std::string & getName() const
virtual void setElement(osg::Object &obj, void *ptrKey, void *ptrValue) const
virtual void reserve(osg::Object &obj, unsigned int numElements) const
virtual bool write(OutputStream &os, const osg::Object &obj)
virtual void addElement(osg::Object &obj, void *ptr) const
VectorSerializer(const char *name, ConstGetter cgf, Getter gf, Setter sf, BaseSerializer::Type elementType, unsigned int numElementsOnRow)
virtual void * getElement(osg::Object &obj, unsigned int index) const
MatrixSerializer(const char *name, const osg::Matrix &def, Getter gf, Setter sf)
virtual const void * getElement(const osg::Object &, unsigned int) const
TemplateSerializer< std::string > ParentType
unsigned int _elementSize
virtual void setElement(osg::Object &, unsigned int, void *) const
virtual void reserve(osg::Object &, unsigned int) const
virtual MapIteratorObject * createReverseIterator(osg::Object &) const
P::const_iterator ConstIterator
virtual bool write(OutputStream &os, const osg::Object &obj)=0
virtual const void * getElement(const osg::Object &, void *) const
virtual bool read(InputStream &is, osg::Object &obj)
BitFlagsSerializer(const char *name, P def, Getter gf, Setter sf)
virtual void * getElement() const
OSG_EXPORT std::ostream & notify(const NotifySeverity severity)
virtual const void * getElement(const osg::Object &obj, void *ptrKey) const
virtual bool valid() const
const P *(C::* Getter)() const
void(C::* Setter)(const P &)
ListSerializer(const char *name, Getter gf, Setter sf)
virtual bool read(InputStream &is, osg::Object &obj)
virtual void * getElement(osg::Object &, void *) const
virtual void clear(osg::Object &obj) const
virtual void resize(osg::Object &, unsigned int) const
virtual void * getElement(osg::Object &, unsigned int) const
virtual void setElement(void *ptr) const
MapIteratorObject(const MapIteratorObject &rhs, const osg::CopyOp copyop=osg::CopyOp::SHALLOW_COPY)
int getFileVersion(const std::string &d=std::string()) const
virtual void addElement(osg::Object &, void *) const
UserSerializer(const char *name, Checker cf, Reader rf, Writer wf)
PropByRefSerializer(const char *name, CP def, Getter gf, Setter sf)
P::const_iterator ConstIterator
virtual bool read(InputStream &is, osg::Object &obj)
virtual void * getElement(osg::Object &obj, unsigned int index) const
virtual bool read(InputStream &, osg::Object &)=0
virtual MapIteratorObject * createIterator(osg::Object &obj) const
OSGDB_EXPORT void split(const std::string &src, StringList &list, char separator=' ')
std::map< std::string, Value > StringToValue
TemplateSerializer(const char *name, P def)
unsigned int getElementSize() const
bool supportsGetSet() const
void(* AddValueFunc)(IntLookup *lookup)
void add(const char *str, Value value)
void(C::* Setter)(const osg::Matrix &)
MapIterator(BaseSerializer::Type keyType, unsigned int keySize, BaseSerializer::Type elementType, unsigned int elementSize, Iterator itr, Iterator endItr)
StringSerializer(const char *name, const std::string &def, Getter gf, Setter sf)
virtual void clear(osg::Object &) const
bool(* Reader)(InputStream &, C &)
virtual void insertElement(osg::Object &obj, unsigned int index, void *ptr) const
virtual void setElement(void *) const
void(C::* Setter)(const std::string &)
void(C::* Setter)(const P &)
virtual bool valid() const
META_Object(osgDB, MapIteratorObject)
BaseSerializer::Type getKeyType() const
virtual bool read(osgDB::InputStream &is, osg::Object &obj)
virtual void insertElement(osg::Object &, unsigned int, void *) const
virtual void * getElement(osg::Object &obj, void *ptrKey) const