Removed the old style Serializer, moving it back into VirtuaLPlanetBuilder to make way for the new Serializer that exists in support for the new binary/ascii format.
This commit is contained in:
parent
8f6db66e59
commit
5a37ed8a9f
@ -1,377 +0,0 @@
|
||||
/* -*-c++-*- VirtualPlanetBuilder - Copyright (C) 1998-2007 Robert Osfield
|
||||
*
|
||||
* This library is open source and may be redistributed and/or modified under
|
||||
* the terms of the OpenSceneGraph Public License (OSGPL) version 0.0 or
|
||||
* (at your option) any later version. The full license is in LICENSE file
|
||||
* included with this distribution, and on the openscenegraph.org website.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* OpenSceneGraph Public License for more details.
|
||||
*/
|
||||
|
||||
#ifndef SERIALIZER_H
|
||||
#define SERIALIZER_H 1
|
||||
|
||||
#include <osgDB/Input>
|
||||
#include <osgDB/Output>
|
||||
#include <osgDB/ParameterOutput>
|
||||
|
||||
namespace osgDB
|
||||
{
|
||||
|
||||
class IntLookup
|
||||
{
|
||||
public:
|
||||
|
||||
typedef int Value;
|
||||
|
||||
IntLookup(Value defaultValue):
|
||||
_default(defaultValue) {}
|
||||
|
||||
typedef std::map<std::string, Value> StringToValue;
|
||||
typedef std::map<Value, std::string> ValueToString;
|
||||
|
||||
StringToValue _stringToValue;
|
||||
ValueToString _valueToString;
|
||||
|
||||
void add(Value value, const char* str)
|
||||
{
|
||||
_stringToValue[str] = value;
|
||||
_valueToString[value] = str;
|
||||
}
|
||||
|
||||
Value getValue(const char* str)
|
||||
{
|
||||
StringToValue::iterator itr = _stringToValue.find(str);
|
||||
if (itr==_stringToValue.end()) return _default;
|
||||
return itr->second;
|
||||
}
|
||||
|
||||
const std::string& getString(Value value)
|
||||
{
|
||||
ValueToString::iterator itr = _valueToString.find(value);
|
||||
if (itr==_valueToString.end()) return _valueToString[_default];
|
||||
return itr->second;
|
||||
}
|
||||
|
||||
Value _default;
|
||||
|
||||
};
|
||||
|
||||
class Serializer : public osg::Referenced
|
||||
{
|
||||
public:
|
||||
|
||||
Serializer() {}
|
||||
|
||||
virtual bool write(osgDB::Output&, const osg::Object&) = 0;
|
||||
virtual bool read(osgDB::Input&, osg::Object&, bool&) = 0;
|
||||
};
|
||||
|
||||
template<typename C, typename P>
|
||||
class EnumSerializer : public Serializer
|
||||
{
|
||||
public:
|
||||
|
||||
typedef P (C::*GetterFunctionType)() const;
|
||||
typedef void (C::*SetterFunctionType)(P);
|
||||
|
||||
EnumSerializer(const char* fieldName, P defaultValue, GetterFunctionType getter, SetterFunctionType setter):
|
||||
_fieldName(fieldName),
|
||||
_default(defaultValue),
|
||||
_getter(getter),
|
||||
_setter(setter),
|
||||
_lookup(defaultValue) {}
|
||||
|
||||
void add(P value, const char* str)
|
||||
{
|
||||
_lookup.add(static_cast<IntLookup::Value>(value), str);
|
||||
}
|
||||
|
||||
P getValue(const char* str)
|
||||
{
|
||||
return static_cast<P>(_lookup.getValue(str));
|
||||
}
|
||||
|
||||
const std::string& getString(P value)
|
||||
{
|
||||
return _lookup.getString(static_cast<IntLookup::Value>(value));
|
||||
}
|
||||
|
||||
bool write(osgDB::Output& fw, const osg::Object& obj)
|
||||
{
|
||||
const C& object = static_cast<const C&>(obj);
|
||||
|
||||
if (fw.getWriteOutDefaultValues() ||
|
||||
_default != (object.*_getter)())
|
||||
{
|
||||
fw.indent()<<_fieldName<<" "<<getString((object.*_getter)())<<std::endl;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool read(osgDB::Input& fr, osg::Object& obj, bool& itrAdvanced)
|
||||
{
|
||||
C& object = static_cast<C&>(obj);
|
||||
if (fr[0].matchWord(_fieldName.c_str()) && fr[1].isWord())
|
||||
{
|
||||
(object.*_setter)(getValue(fr[1].getStr()));
|
||||
fr += 2;
|
||||
itrAdvanced = true;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
std::string _fieldName;
|
||||
P _default;
|
||||
GetterFunctionType _getter;
|
||||
SetterFunctionType _setter;
|
||||
IntLookup _lookup;
|
||||
};
|
||||
|
||||
|
||||
template<typename C>
|
||||
class StringSerializer : public Serializer
|
||||
{
|
||||
public:
|
||||
|
||||
typedef const std::string& P;
|
||||
typedef P (C::*GetterFunctionType)() const;
|
||||
typedef void (C::*SetterFunctionType)(P);
|
||||
|
||||
StringSerializer(const char* fieldName, P defaultValue, GetterFunctionType getter, SetterFunctionType setter):
|
||||
_fieldName(fieldName),
|
||||
_default(defaultValue),
|
||||
_getter(getter),
|
||||
_setter(setter) {}
|
||||
|
||||
bool write(osgDB::Output& fw, const osg::Object& obj)
|
||||
{
|
||||
const C& object = static_cast<const C&>(obj);
|
||||
if (fw.getWriteOutDefaultValues() ||
|
||||
_default != (object.*_getter)())
|
||||
{
|
||||
fw.indent()<<_fieldName<<" "<<fw.wrapString((object.*_getter)())<<std::endl;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool read(osgDB::Input& fr, osg::Object& obj, bool& itrAdvanced)
|
||||
{
|
||||
C& object = static_cast<C&>(obj);
|
||||
if (fr[0].matchWord(_fieldName.c_str()) && (fr[1].isWord() || fr[1].isString()))
|
||||
{
|
||||
(object.*_setter)(fr[1].getStr());
|
||||
fr += 2;
|
||||
itrAdvanced = true;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
std::string _fieldName;
|
||||
std::string _default;
|
||||
GetterFunctionType _getter;
|
||||
SetterFunctionType _setter;
|
||||
};
|
||||
|
||||
|
||||
template<typename C, typename P>
|
||||
class TemplateSerializer : public Serializer
|
||||
{
|
||||
public:
|
||||
|
||||
typedef P (C::*GetterFunctionType)() const;
|
||||
typedef void (C::*SetterFunctionType)(P);
|
||||
|
||||
TemplateSerializer(const char* fieldName, P defaultValue, GetterFunctionType getter, SetterFunctionType setter):
|
||||
_fieldName(fieldName),
|
||||
_default(defaultValue),
|
||||
_getter(getter),
|
||||
_setter(setter) {}
|
||||
|
||||
bool write(osgDB::Output& fw, const osg::Object& obj)
|
||||
{
|
||||
const C& object = static_cast<const C&>(obj);
|
||||
if (fw.getWriteOutDefaultValues() ||
|
||||
_default != (object.*_getter)())
|
||||
{
|
||||
fw.indent()<<_fieldName<<" "<<(object.*_getter)()<<std::endl;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool read(osgDB::Input& fr, osg::Object& obj, bool& itrAdvanced)
|
||||
{
|
||||
C& object = static_cast<C&>(obj);
|
||||
P value;
|
||||
if (fr.read(_fieldName.c_str(), value))
|
||||
{
|
||||
(object.*_setter)(value);
|
||||
itrAdvanced = true;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
std::string _fieldName;
|
||||
P _default;
|
||||
GetterFunctionType _getter;
|
||||
SetterFunctionType _setter;
|
||||
};
|
||||
|
||||
template<typename C>
|
||||
class Vec4Serializer : public Serializer
|
||||
{
|
||||
public:
|
||||
|
||||
typedef osg::Vec4 V;
|
||||
typedef const V& P;
|
||||
typedef P (C::*GetterFunctionType)() const;
|
||||
typedef void (C::*SetterFunctionType)(P);
|
||||
|
||||
Vec4Serializer(const char* fieldName, P defaultValue, GetterFunctionType getter, SetterFunctionType setter):
|
||||
_fieldName(fieldName),
|
||||
_default(defaultValue),
|
||||
_getter(getter),
|
||||
_setter(setter) {}
|
||||
|
||||
bool write(osgDB::Output& fw, const osg::Object& obj)
|
||||
{
|
||||
const C& object = static_cast<const C&>(obj);
|
||||
if (fw.getWriteOutDefaultValues() ||
|
||||
_default != (object.*_getter)())
|
||||
{
|
||||
fw.indent()<<_fieldName<<" "<<(object.*_getter)()<<std::endl;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool read(osgDB::Input& fr, osg::Object& obj, bool& itrAdvanced)
|
||||
{
|
||||
C& object = static_cast<C&>(obj);
|
||||
V value;
|
||||
if (fr.read(_fieldName.c_str(), value[0], value[1], value[2], value[3]))
|
||||
{
|
||||
(object.*_setter)(value);
|
||||
fr += 2;
|
||||
itrAdvanced = true;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
std::string _fieldName;
|
||||
V _default;
|
||||
GetterFunctionType _getter;
|
||||
SetterFunctionType _setter;
|
||||
};
|
||||
|
||||
|
||||
template<typename C>
|
||||
class BoolSerializer : public Serializer
|
||||
{
|
||||
public:
|
||||
|
||||
typedef bool P;
|
||||
typedef P (C::*GetterFunctionType)() const;
|
||||
typedef void (C::*SetterFunctionType)(P);
|
||||
|
||||
BoolSerializer(const char* fieldName, P defaultValue, GetterFunctionType getter, SetterFunctionType setter):
|
||||
_fieldName(fieldName),
|
||||
_default(defaultValue),
|
||||
_getter(getter),
|
||||
_setter(setter) {}
|
||||
|
||||
bool write(osgDB::Output& fw, const osg::Object& obj)
|
||||
{
|
||||
const C& object = static_cast<const C&>(obj);
|
||||
if (fw.getWriteOutDefaultValues() ||
|
||||
_default != (object.*_getter)())
|
||||
{
|
||||
fw.indent()<<_fieldName<<" "<<((object.*_getter)() ? "TRUE" : "FALSE")<<std::endl;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool read(osgDB::Input& fr, osg::Object& obj, bool& itrAdvanced)
|
||||
{
|
||||
C& object = static_cast<C&>(obj);
|
||||
if (fr[0].matchWord(_fieldName.c_str()) && fr[1].isWord())
|
||||
{
|
||||
(object.*_setter)(fr[1].matchWord("TRUE") || fr[1].matchWord("True") || fr[1].matchWord("true"));
|
||||
fr += 2;
|
||||
itrAdvanced = true;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
std::string _fieldName;
|
||||
P _default;
|
||||
GetterFunctionType _getter;
|
||||
SetterFunctionType _setter;
|
||||
};
|
||||
|
||||
#define CREATE_STRING_SERIALIZER(CLASS,PROPERTY,PROTOTYPE) \
|
||||
new osgDB::StringSerializer<CLASS>( \
|
||||
#PROPERTY, \
|
||||
PROTOTYPE.get##PROPERTY(), \
|
||||
&CLASS::get##PROPERTY, \
|
||||
&CLASS::set##PROPERTY)
|
||||
|
||||
#define CREATE_UINT_SERIALIZER(CLASS,PROPERTY,PROTOTYPE) \
|
||||
new osgDB::TemplateSerializer<CLASS,unsigned int>( \
|
||||
#PROPERTY, \
|
||||
PROTOTYPE.get##PROPERTY(), \
|
||||
&CLASS::get##PROPERTY, \
|
||||
&CLASS::set##PROPERTY)
|
||||
|
||||
#define CREATE_INT_SERIALIZER(CLASS,PROPERTY,PROTOTYPE) \
|
||||
new osgDB::TemplateSerializer<CLASS, int>( \
|
||||
#PROPERTY, \
|
||||
PROTOTYPE.get##PROPERTY(), \
|
||||
&CLASS::get##PROPERTY, \
|
||||
&CLASS::set##PROPERTY)
|
||||
|
||||
#define CREATE_FLOAT_SERIALIZER(CLASS,PROPERTY,PROTOTYPE) \
|
||||
new osgDB::TemplateSerializer<CLASS,float>( \
|
||||
#PROPERTY, \
|
||||
PROTOTYPE.get##PROPERTY(), \
|
||||
&CLASS::get##PROPERTY, \
|
||||
&CLASS::set##PROPERTY)
|
||||
|
||||
#define CREATE_DOUBLE_SERIALIZER(CLASS,PROPERTY,PROTOTYPE) \
|
||||
new osgDB::TemplateSerializer<CLASS, double>( \
|
||||
#PROPERTY, \
|
||||
PROTOTYPE.get##PROPERTY(), \
|
||||
&CLASS::get##PROPERTY, \
|
||||
&CLASS::set##PROPERTY)
|
||||
|
||||
#define CREATE_VEC4_SERIALIZER(CLASS,PROPERTY,PROTOTYPE) \
|
||||
new osgDB::Vec4Serializer<CLASS>( \
|
||||
#PROPERTY, \
|
||||
PROTOTYPE.get##PROPERTY(), \
|
||||
&CLASS::get##PROPERTY, \
|
||||
&CLASS::set##PROPERTY)
|
||||
|
||||
#define CREATE_BOOL_SERIALIZER(CLASS,PROPERTY,PROTOTYPE) \
|
||||
new osgDB::BoolSerializer<CLASS>( \
|
||||
#PROPERTY, \
|
||||
PROTOTYPE.get##PROPERTY(), \
|
||||
&CLASS::get##PROPERTY, \
|
||||
&CLASS::set##PROPERTY)
|
||||
|
||||
|
||||
}
|
||||
|
||||
#endif
|
||||
|
@ -45,7 +45,6 @@ SET(LIB_PUBLIC_HEADERS
|
||||
${HEADER_PATH}/ReaderWriter
|
||||
${HEADER_PATH}/ReadFile
|
||||
${HEADER_PATH}/Registry
|
||||
${HEADER_PATH}/Serializer
|
||||
${HEADER_PATH}/SharedStateManager
|
||||
${HEADER_PATH}/Version
|
||||
${HEADER_PATH}/WriteFile
|
||||
|
@ -1,80 +0,0 @@
|
||||
// ***************************************************************************
|
||||
//
|
||||
// Generated automatically by genwrapper.
|
||||
// Please DO NOT EDIT this file!
|
||||
//
|
||||
// ***************************************************************************
|
||||
|
||||
#include <osgIntrospection/ReflectionMacros>
|
||||
#include <osgIntrospection/TypedMethodInfo>
|
||||
#include <osgIntrospection/StaticMethodInfo>
|
||||
#include <osgIntrospection/Attributes>
|
||||
|
||||
#include <osg/Object>
|
||||
#include <osgDB/Input>
|
||||
#include <osgDB/Output>
|
||||
#include <osgDB/Serializer>
|
||||
|
||||
// Must undefine IN and OUT macros defined in Windows headers
|
||||
#ifdef IN
|
||||
#undef IN
|
||||
#endif
|
||||
#ifdef OUT
|
||||
#undef OUT
|
||||
#endif
|
||||
|
||||
TYPE_NAME_ALIAS(int, osgDB::IntLookup::Value)
|
||||
|
||||
TYPE_NAME_ALIAS(std::map< std::string COMMA osgDB::IntLookup::Value >, osgDB::IntLookup::StringToValue)
|
||||
|
||||
TYPE_NAME_ALIAS(std::map< osgDB::IntLookup::Value COMMA std::string >, osgDB::IntLookup::ValueToString)
|
||||
|
||||
BEGIN_VALUE_REFLECTOR(osgDB::IntLookup)
|
||||
I_DeclaringFile("osgDB/Serializer");
|
||||
I_Constructor1(IN, osgDB::IntLookup::Value, defaultValue,
|
||||
Properties::NON_EXPLICIT,
|
||||
____IntLookup__Value,
|
||||
"",
|
||||
"");
|
||||
I_Method2(void, add, IN, osgDB::IntLookup::Value, value, IN, const char *, str,
|
||||
Properties::NON_VIRTUAL,
|
||||
__void__add__Value__C5_char_P1,
|
||||
"",
|
||||
"");
|
||||
I_Method1(osgDB::IntLookup::Value, getValue, IN, const char *, str,
|
||||
Properties::NON_VIRTUAL,
|
||||
__Value__getValue__C5_char_P1,
|
||||
"",
|
||||
"");
|
||||
I_Method1(const std::string &, getString, IN, osgDB::IntLookup::Value, value,
|
||||
Properties::NON_VIRTUAL,
|
||||
__C5_std_string_R1__getString__Value,
|
||||
"",
|
||||
"");
|
||||
I_PublicMemberProperty(osgDB::IntLookup::StringToValue, _stringToValue);
|
||||
I_PublicMemberProperty(osgDB::IntLookup::ValueToString, _valueToString);
|
||||
I_PublicMemberProperty(osgDB::IntLookup::Value, _default);
|
||||
END_REFLECTOR
|
||||
|
||||
BEGIN_ABSTRACT_OBJECT_REFLECTOR(osgDB::Serializer)
|
||||
I_DeclaringFile("osgDB/Serializer");
|
||||
I_BaseType(osg::Referenced);
|
||||
I_Constructor0(____Serializer,
|
||||
"",
|
||||
"");
|
||||
I_Method2(bool, write, IN, osgDB::Output &, x, IN, const osg::Object &, x,
|
||||
Properties::PURE_VIRTUAL,
|
||||
__bool__write__osgDB_Output_R1__C5_osg_Object_R1,
|
||||
"",
|
||||
"");
|
||||
I_Method3(bool, read, IN, osgDB::Input &, x, IN, osg::Object &, x, IN, bool &, x,
|
||||
Properties::PURE_VIRTUAL,
|
||||
__bool__read__osgDB_Input_R1__osg_Object_R1__bool_R1,
|
||||
"",
|
||||
"");
|
||||
END_REFLECTOR
|
||||
|
||||
STD_MAP_REFLECTOR(std::map< osgDB::IntLookup::Value COMMA std::string >)
|
||||
|
||||
STD_MAP_REFLECTOR(std::map< std::string COMMA osgDB::IntLookup::Value >)
|
||||
|
Loading…
Reference in New Issue
Block a user