X-Git-Url: http://developer.intra2net.com/git/?p=libt2n;a=blobdiff_plain;f=src%2Fcontainer.cpp;h=a3c9f31f2e6bb053f481ce3e22e27a6640ccdb9b;hp=2973d5480b3ab40be299da87f80be5830ee65607;hb=2f90dcbf75fbafbefde8916c6012f0023a90b527;hpb=d184c64894e6c4f3adb9467078acfc9e7446664a diff --git a/src/container.cpp b/src/container.cpp index 2973d54..a3c9f31 100644 --- a/src/container.cpp +++ b/src/container.cpp @@ -17,11 +17,63 @@ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ +#include +#include +#include +#include + #include "container.hxx" #include -using namespace libt2n; +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; +} -BOOST_CLASS_EXPORT(result_container) -BOOST_CLASS_EXPORT(command_container) +} // namespace libt2n