#ifndef __LIBT2N_CONTAINER
#define __LIBT2N_CONTAINER
+#include <boost/archive/binary_oarchive.hpp>
+#include <boost/archive/binary_iarchive.hpp>
+#include <boost/archive/xml_oarchive.hpp>
+#include <boost/archive/xml_iarchive.hpp>
+#include <boost/serialization/serialization.hpp>
+
#include "command.hxx"
#include "t2n_exception.hxx"
+#include <iostream>
+
namespace libt2n
{
t2n_exception *ex;
friend class boost::serialization::access;
- // 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 >>.
template<class Archive>
- void serialize(Archive & ar, const unsigned int version)
- {
- ar & BOOST_SERIALIZATION_NVP(result_type);
- ar & BOOST_SERIALIZATION_NVP(res);
- ar & BOOST_SERIALIZATION_NVP(ex);
- }
+ void serialize(Archive & ar, const unsigned int version);
public:
result_container()
result_container(t2n_exception *_ex)
{ set_exception(_ex); }
+ ~result_container();
+
void set_result(result *_res)
{ res=_res; ex=0; result_type=regular; }
void set_exception(t2n_exception *_ex)
{ res=0; ex=_ex; result_type=exception; }
- /** @brief returns the result or throw the carried exception.
- ATTENTION: the result object is deleted in the destructor
- */
- result* get_result(void)
- {
- if (result_type==exception)
- ex->do_throw();
- return res;
- }
-
- /// deletes the carried result or exception objects
- ~result_container()
- {
- if (res)
- delete res;
- if (ex)
- delete ex;
- }
+ result* get_result(void);
+
+ bool has_exception()
+ { return (result_type==exception); }
+ bool has_result()
+ { return (result_type==regular); }
};
/** @brief contains a command
friend class boost::serialization::access;
template<class Archive>
- void serialize(Archive & ar, const unsigned int version)
- {
- ar & BOOST_SERIALIZATION_NVP(cmd);
- }
+ void serialize(Archive & ar, const unsigned int version);
public:
command_container()
command_container(command *_cmd)
{ cmd=_cmd; }
+ ~command_container();
+
/// return the contained command
command* get_command()
{ return cmd; }
-
- ~command_container()
- {
- if (cmd)
- delete cmd;
- }
};
} // namespace libt2n