1 /***************************************************************************
2 * Copyright (C) 2006 by Gerd v. Egidy *
5 * This library is free software; you can redistribute it and/or modify *
6 * it under the terms of the GNU Lesser General Public License version *
7 * 2.1 as published by the Free Software Foundation. *
9 * This library is distributed in the hope that it will be useful, *
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
12 * GNU Lesser General Public License for more details. *
14 * You should have received a copy of the GNU Lesser General Public *
15 * License along with this program; if not, write to the *
16 * Free Software Foundation, Inc., *
17 * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
18 ***************************************************************************/
19 #ifndef __LIBT2N_CONTAINER
20 #define __LIBT2N_CONTAINER
22 #include "command.hxx"
23 #include "t2n_exception.hxx"
28 /** @brief contains the result (return value or exception) of a executed command
30 class result_container
33 enum result_type_t { regular, exception } result_type;
38 friend class boost::serialization::access;
39 // When the class Archive corresponds to an output archive, the
40 // & operator is defined similar to <<. Likewise, when the class Archive
41 // is a type of input archive the & operator is defined similar to >>.
42 template<class Archive>
43 void serialize(Archive & ar, const unsigned int version)
45 ar & BOOST_SERIALIZATION_NVP(result_type);
46 ar & BOOST_SERIALIZATION_NVP(res);
47 ar & BOOST_SERIALIZATION_NVP(ex);
54 result_container(result *_res)
56 result_container(t2n_exception *_ex)
57 { set_exception(_ex); }
59 void set_result(result *_res)
60 { res=_res; ex=0; result_type=regular; }
61 void set_exception(t2n_exception *_ex)
62 { res=0; ex=_ex; result_type=exception; }
64 /** @brief returns the result or throw the carried exception.
65 ATTENTION: the result object is deleted in the destructor
67 result* get_result(void)
69 if (result_type==exception)
74 /// deletes the carried result or exception objects
84 /** @brief contains a command
86 class command_container
91 friend class boost::serialization::access;
92 template<class Archive>
93 void serialize(Archive & ar, const unsigned int version)
95 ar & BOOST_SERIALIZATION_NVP(cmd);
101 command_container(command *_cmd)
104 /// return the contained command
105 command* get_command()
115 } // namespace libt2n
117 BOOST_CLASS_TRACKING(libt2n::result_container, boost::serialization::track_never)
118 BOOST_CLASS_TRACKING(libt2n::command_container, boost::serialization::track_never)