X-Git-Url: http://developer.intra2net.com/git/?p=libt2n;a=blobdiff_plain;f=src%2Fcontainer.cpp;h=a3c9f31f2e6bb053f481ce3e22e27a6640ccdb9b;hp=bff9bb34801f8e5b840ff7a4eac8d860969dba53;hb=e1614a6d1d9c022b83c0aa8cdb948bd7dc98ff23;hpb=7087e18783f91d2b889e880462d1d1da24831c28 diff --git a/src/container.cpp b/src/container.cpp index bff9bb3..a3c9f31 100644 --- a/src/container.cpp +++ b/src/container.cpp @@ -17,7 +17,63 @@ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ +#include +#include +#include +#include + #include "container.hxx" +#include + BOOST_CLASS_EXPORT(libt2n::result_container) BOOST_CLASS_EXPORT(libt2n::command_container) + +namespace libt2n +{ + +template +void result_container::serialize(Archive & ar, const unsigned int /* version */) +{ + // When the class Archive corresponds to an output archive, the + // & operator is defined similar to <<. Likewise, when the class Archive + // is a type of input archive the & operator is defined similar to >>. + + ar & BOOST_SERIALIZATION_NVP(result_type); + ar & BOOST_SERIALIZATION_NVP(res); + ar & BOOST_SERIALIZATION_NVP(ex); +} + +/// deletes the carried result or exception objects +result_container::~result_container() +{ + if (res) + delete res; + if (ex) + delete ex; +} + +/** @brief returns the result or throw the carried exception. + ATTENTION: the result object is deleted in the destructor +*/ +result* result_container::get_result(void) +{ + if (result_type==exception) + ex->do_throw(); + return res; +} + +template +void command_container::serialize(Archive & ar, const unsigned int /* version */) +{ + ar & BOOST_SERIALIZATION_NVP(cmd); +} + +/// deletes the carried command +command_container::~command_container() +{ + if (cmd) + delete cmd; +} + +} // namespace libt2n