libt2n: (gerd) improve docu, cleanup for public release
[libt2n] / src / container.hxx
index 8491926..f869166 100644 (file)
 #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"
 
@@ -27,7 +33,7 @@
 namespace libt2n
 {
 
-/** @brief contains the result (return value or exception) of a executed command
+/** @brief contains the result (return value as libt2n::result or an libt2n::t2n_exception) of a executed command
 */
 class result_container
 {
@@ -38,16 +44,8 @@ class result_container
         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()
@@ -58,32 +56,22 @@ class 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
+/** @brief contains a libt2n::command
 */
 class command_container
 {
@@ -92,11 +80,7 @@ class command_container
 
         friend class boost::serialization::access;
         template<class Archive>
-        void serialize(Archive & ar, const unsigned int version)
-        {
-            std::cerr << "ser: command_container" << std::endl;
-            ar & BOOST_SERIALIZATION_NVP(cmd);
-        }
+        void serialize(Archive & ar, const unsigned int version);
 
     public:
         command_container()
@@ -104,15 +88,11 @@ class 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