From: stephan b. <sg...@us...> - 2004-12-28 21:58:38
|
Update of /cvsroot/pclasses/pclasses2/src/s11n/proxy In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv14309/src/s11n/proxy Modified Files: Time_s11n.h Log Message: Deser now works for Time/Date/DateTime. Index: Time_s11n.h =================================================================== RCS file: /cvsroot/pclasses/pclasses2/src/s11n/proxy/Time_s11n.h,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- Time_s11n.h 28 Dec 2004 17:30:00 -0000 1.1 +++ Time_s11n.h 28 Dec 2004 21:58:25 -0000 1.2 @@ -12,23 +12,28 @@ #else +#define CONCRETE_NODE_TYPE ::P::SIO::S11nNode + //////////////////////////////////////////////////////////////////////// // Time proxy //////////////////////////////////////////////////////////////////////// #if !defined(p_TIME_REGISTERED_WITH_S11N) # define p_TIME_REGISTERED_WITH_S11N 1 # include <pclasses/Time.h> + namespace P { + using ::P::Time; struct Time_s11n { // serialize - template <typename NodeT> - bool operator()( NodeT & dest, const Time & src ) const +// template <typename CONCRETE_NODE_TYPE> + bool operator()( CONCRETE_NODE_TYPE & dest, const Time & src ) const { - typedef ::P::s11n::node_traits<NodeT> TR; - TR::class_name( dest, ::classname<Time>() ); + typedef ::P::s11n::node_traits<CONCRETE_NODE_TYPE> TR; + TR::class_name( dest, "P::Time" ); + // don't use ::classname<Time>() here: it causes an ODR violation :( # define SSET(K,F) TR::set( dest, std::string(K), src.F() ); SSET("sec", second ); SSET("min", minute ); @@ -39,15 +44,15 @@ } // deserialize - template <typename NodeT> - bool operator()( const NodeT & src, tm & dest ) const +// template <typename CONCRETE_NODE_TYPE> + bool operator()( const CONCRETE_NODE_TYPE & src, Time & dest ) const { - typedef s11n::node_traits<NodeT> TR; -# define SGET(K,SF,GF) dest.SF( TR::get( src, std::string(K), src.GF() ) ); - SET("sec", setSecond, second ); - SET("min", setMinute, minute ); - SET("hour", setHour, hour ); - SET("usec", setUsec, usec ); + typedef s11n::node_traits<CONCRETE_NODE_TYPE> TR; +# define SGET(K,SF,GF) dest.SF( TR::get( src, std::string(K), dest.GF() ) ); + SGET("sec", setSecond, second ); + SGET("min", setMinute, minute ); + SGET("hour", setHour, hour ); + SGET("usec", setUsec, usec ); # undef SGET return true; @@ -70,15 +75,16 @@ # include <pclasses/Date.h> namespace P { + using ::P::Date; struct Date_s11n { // serialize - template <typename NodeT> - bool operator()( NodeT & dest, const Date & src ) const +// template <typename CONCRETE_NODE_TYPE> + bool operator()( CONCRETE_NODE_TYPE & dest, const Date & src ) const { - typedef ::P::s11n::node_traits<NodeT> TR; - TR::class_name( dest, ::classname<Date>() ); + typedef ::P::s11n::node_traits<CONCRETE_NODE_TYPE> TR; + TR::class_name( dest, "P::Date" ); # define SSET(K,F) TR::set( dest, std::string(K), src.F() ); SSET("year", year ); SSET("month", month ); @@ -88,14 +94,14 @@ } // deserialize - template <typename NodeT> - bool operator()( const NodeT & src, tm & dest ) const +// template <typename CONCRETE_NODE_TYPE> + bool operator()( const CONCRETE_NODE_TYPE & src, Date & dest ) const { - typedef s11n::node_traits<NodeT> TR; -# define SGET(K,SF,GF) dest.SF( TR::get( src, std::string(K), src.GF() ) ); - SET("year", setYear, year ); - SET("month", setMonth, month ); - SET("day", setDay, day ); + typedef s11n::node_traits<CONCRETE_NODE_TYPE> TR; +# define SGET(K,SF,GF) dest.SF( TR::get( src, std::string(K), dest.GF() ) ); + SGET("year", setYear, year ); + SGET("month", setMonth, month ); + SGET("day", setDay, day ); # undef SGET return true; @@ -118,29 +124,33 @@ # include <pclasses/DateTime.h> namespace P { + using ::P::DateTime; struct DateTime_s11n { // serialize - template <typename NodeT> - bool operator()( NodeT & dest, const DateTime & src ) const +// template <typename CONCRETE_NODE_TYPE> + bool operator()( CONCRETE_NODE_TYPE & dest, const DateTime & src ) const { - typedef ::P::s11n::node_traits<NodeT> TR; - TR::class_name( dest, ::classname<DateTime>() ); + typedef ::P::s11n::node_traits<CONCRETE_NODE_TYPE> TR; + TR::class_name( dest, "P::DateTime" ); using namespace ::P::s11n; - bool worked = serialize_subnode<NodeT,Time>( dest, "time", src ); - worked = worked && serialize_subnode<NodeT,Date>( dest, "date", src ); + bool worked = serialize_subnode<CONCRETE_NODE_TYPE,Time>( dest, "time", src ); + worked = worked && serialize_subnode<CONCRETE_NODE_TYPE,Date>( dest, "date", src ); return worked; } // deserialize - template <typename NodeT> - bool operator()( const NodeT & src, tm & dest ) const +// template <typename CONCRETE_NODE_TYPE> + bool operator()( const CONCRETE_NODE_TYPE & src, DateTime & dest ) const { - typedef s11n::node_traits<NodeT> TR; + typedef s11n::node_traits<CONCRETE_NODE_TYPE> TR; using namespace ::P::s11n; - bool worked = deserialize_subnode<NodeT,Time>( src, "time", dest ); - worked = worked && deserialize_subnode<NodeT,Date>( dest, "date", dest ); + bool worked = deserialize_subnode<CONCRETE_NODE_TYPE,Time>( src, "time", dest ); + if( worked ) + { + worked = deserialize_subnode<CONCRETE_NODE_TYPE,Date>( src, "date", dest ); + } return worked; } }; // DateTime_s11n @@ -152,7 +162,7 @@ # include <pclasses/s11n/reg_serializable_traits.h> #endif // p_DATETIME_REGISTERED_WITH_S11N - +#undef CONCRETE_NODE_TYPE #endif // PCLASSES_S11N_INCLUDED //////////////////////////////////////////////////////////////////////// |