From: stephan b. <sg...@us...> - 2004-12-28 17:30:21
|
Update of /cvsroot/pclasses/pclasses2/src/s11n/proxy In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv27622/src/s11n/proxy Added Files: Time_s11n.h Log Message: egg: Time, Date, and DateTime s11n proxies. --- NEW FILE: Time_s11n.h --- //////////////////////////////////////////////////////////////////////// // Defines an s11n proxy for the Time, Date and DateTime types. // Should be included from any code which wants to de/serialize // these types using the standard s11n interface. // // Conventions: // - Clients must include SIO support before including this. //////////////////////////////////////////////////////////////////////// #if !defined(PCLASSES_S11N_INCLUDED) # error "s11n.h or SIO.h must be included before plugging in s11n proxies!" #else //////////////////////////////////////////////////////////////////////// // Time proxy //////////////////////////////////////////////////////////////////////// #if !defined(p_TIME_REGISTERED_WITH_S11N) # define p_TIME_REGISTERED_WITH_S11N 1 # include <pclasses/Time.h> namespace P { struct Time_s11n { // serialize template <typename NodeT> bool operator()( NodeT & dest, const Time & src ) const { typedef ::P::s11n::node_traits<NodeT> TR; TR::class_name( dest, ::classname<Time>() ); # define SSET(K,F) TR::set( dest, std::string(K), src.F() ); SSET("sec", second ); SSET("min", minute ); SSET("hour", hour ); SSET("usec", usec ); # undef SSET return true; } // deserialize template <typename NodeT> bool operator()( const NodeT & src, tm & 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 ); # undef SGET return true; } }; // Time_s11n }// namespace P # define PS11N_TYPE ::P::Time # define PS11N_TYPE_NAME "P::Time" # define PS11N_SERIALIZE_FUNCTOR P::Time_s11n # include <pclasses/s11n/reg_serializable_traits.h> #endif // p_TIME_REGISTERED_WITH_S11N //////////////////////////////////////////////////////////////////////// // Date proxy //////////////////////////////////////////////////////////////////////// #if !defined(p_DATE_REGISTERED_WITH_S11N) # define p_DATE_REGISTERED_WITH_S11N 1 # include <pclasses/Date.h> namespace P { struct Date_s11n { // serialize template <typename NodeT> bool operator()( NodeT & dest, const Date & src ) const { typedef ::P::s11n::node_traits<NodeT> TR; TR::class_name( dest, ::classname<Date>() ); # define SSET(K,F) TR::set( dest, std::string(K), src.F() ); SSET("year", year ); SSET("month", month ); SSET("day", day ); # undef SSET return true; } // deserialize template <typename NodeT> bool operator()( const NodeT & src, tm & 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 ); # undef SGET return true; } }; // Date_s11n }// namespace P # define PS11N_TYPE ::P::Date # define PS11N_TYPE_NAME "P::Date" # define PS11N_SERIALIZE_FUNCTOR P::Date_s11n # include <pclasses/s11n/reg_serializable_traits.h> #endif // p_DATE_REGISTERED_WITH_S11N //////////////////////////////////////////////////////////////////////// // DateTime proxy //////////////////////////////////////////////////////////////////////// #if !defined(p_DATETIME_REGISTERED_WITH_S11N) # define p_DATETIME_REGISTERED_WITH_S11N 1 # include <pclasses/DateTime.h> namespace P { struct DateTime_s11n { // serialize template <typename NodeT> bool operator()( NodeT & dest, const DateTime & src ) const { typedef ::P::s11n::node_traits<NodeT> TR; TR::class_name( dest, ::classname<DateTime>() ); using namespace ::P::s11n; bool worked = serialize_subnode<NodeT,Time>( dest, "time", src ); worked = worked && serialize_subnode<NodeT,Date>( dest, "date", src ); return worked; } // deserialize template <typename NodeT> bool operator()( const NodeT & src, tm & dest ) const { typedef s11n::node_traits<NodeT> TR; using namespace ::P::s11n; bool worked = deserialize_subnode<NodeT,Time>( src, "time", dest ); worked = worked && deserialize_subnode<NodeT,Date>( dest, "date", dest ); return worked; } }; // DateTime_s11n }// namespace P # define PS11N_TYPE ::P::DateTime # define PS11N_TYPE_NAME "P::DateTime" # define PS11N_SERIALIZE_FUNCTOR P::DateTime_s11n # include <pclasses/s11n/reg_serializable_traits.h> #endif // p_DATETIME_REGISTERED_WITH_S11N #endif // PCLASSES_S11N_INCLUDED //////////////////////////////////////////////////////////////////////// |