libt2n: (tomj) make result_container's has_exception and has_result a bit more robust
[libt2n] / src / container.hxx
... / ...
CommitLineData
1/***************************************************************************
2 * Copyright (C) 2006 by Gerd v. Egidy *
3 * gve@intra2net.com *
4 * *
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. *
8 * *
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. *
13 * *
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
21
22#include <boost/archive/binary_oarchive.hpp>
23#include <boost/archive/binary_iarchive.hpp>
24#include <boost/archive/xml_oarchive.hpp>
25#include <boost/archive/xml_iarchive.hpp>
26#include <boost/serialization/serialization.hpp>
27
28#include "command.hxx"
29#include "t2n_exception.hxx"
30
31#include <iostream>
32
33namespace libt2n
34{
35
36/** @brief contains the result (return value as libt2n::result or an libt2n::t2n_exception) of a executed command
37*/
38class result_container
39{
40 private:
41 enum result_type_t { regular, exception } result_type;
42
43 result *res;
44 t2n_exception *ex;
45
46 friend class boost::serialization::access;
47 template<class Archive>
48 void serialize(Archive & ar, const unsigned int version);
49
50 public:
51 result_container()
52 : res(NULL)
53 , ex(NULL)
54 , result_type(regular)
55 {
56 }
57
58 result_container(result *_res)
59 : res(_res)
60 , ex(NULL)
61 , result_type(regular)
62 {
63 }
64
65 result_container(t2n_exception *_ex)
66 : res(NULL)
67 , ex(_ex)
68 , result_type(exception)
69 {
70 }
71
72 ~result_container();
73
74 void set_result(result *_res)
75 { res=_res; ex=0; result_type=regular; }
76
77 void set_exception(t2n_exception *_ex)
78 { res=0; ex=_ex; result_type=exception; }
79
80 result* get_result(void);
81
82 bool has_exception()
83 { return (result_type==exception && ex != NULL); }
84 bool has_result()
85 { return (result_type==regular && res != NULL); }
86};
87
88/** @brief contains a libt2n::command
89*/
90class command_container
91{
92 private:
93 command *cmd;
94
95 friend class boost::serialization::access;
96 template<class Archive>
97 void serialize(Archive & ar, const unsigned int version);
98
99 public:
100 command_container()
101 : cmd(NULL)
102 {}
103
104 command_container(command *_cmd)
105 : cmd(_cmd)
106 {}
107
108 ~command_container();
109
110 /// return the contained command
111 command* get_command()
112 { return cmd; }
113};
114
115} // namespace libt2n
116
117BOOST_CLASS_TRACKING(libt2n::result_container, boost::serialization::track_never)
118BOOST_CLASS_TRACKING(libt2n::command_container, boost::serialization::track_never)
119
120#include "container.tcc"
121
122#endif
123