Line data Source code
1 :
2 : /* Copyright (c) 2013, Stefan.Eilemann@epfl.ch
3 : *
4 : * This library is free software; you can redistribute it and/or modify it under
5 : * the terms of the GNU Lesser General Public License version 2.1 as published
6 : * by the Free Software Foundation.
7 : *
8 : * This library is distributed in the hope that it will be useful, but WITHOUT
9 : * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
10 : * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
11 : * details.
12 : *
13 : * You should have received a copy of the GNU Lesser General Public License
14 : * along with this library; if not, write to the Free Software Foundation, Inc.,
15 : * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
16 : */
17 :
18 : #ifndef LUNCHBOX_RESULT_H
19 : #define LUNCHBOX_RESULT_H
20 :
21 : #include <lunchbox/api.h>
22 : #include <lunchbox/log.h>
23 : #include <lunchbox/types.h>
24 :
25 : #include <iostream>
26 :
27 : namespace lunchbox
28 : {
29 :
30 : /** A result returns an error code and behaves like a boolean. */
31 : class Result
32 : {
33 : typedef void (Result::*bool_t)() const;
34 0 : void bool_true() const {}
35 :
36 : public:
37 : static const int32_t SUCCESS = 0;
38 :
39 : /** Construct a new result. @version 1.9.1 */
40 14 : explicit Result( const int32_t code ) : code_( code ){}
41 :
42 : /** Destruct the result. @version 1.9.1 */
43 14 : virtual ~Result(){}
44 :
45 : /** @return true if no error occured, false otherwise. @version 1.9.1 */
46 1 : operator bool_t() const { return code_ == SUCCESS ? &Result::bool_true : 0;}
47 :
48 : /** @return true if an error occured, false otherwise. @version 1.9.1 */
49 12 : bool operator !() const { return code_ != SUCCESS; }
50 :
51 : /** @return true if the result is equal to the given value. @version 1.9.1*/
52 1 : bool operator == ( const int32_t code ) const { return code_ == code; }
53 :
54 : /** @return true if the result is not equal to the rhs. @version 1.9.1*/
55 3 : bool operator != ( const int32_t code ) const { return code != code_; }
56 :
57 : /** @return the result code. @version 1.9.1 */
58 0 : int32_t getCode() const { return code_; }
59 :
60 : /** @return the result string. @version 1.9.1 */
61 0 : virtual std::string getString() const
62 0 : { return code_ == SUCCESS ? "success" : "result"; }
63 :
64 : protected:
65 : int32_t code_;
66 : };
67 :
68 0 : inline std::ostream& operator << ( std::ostream& os, const Result& result )
69 : {
70 0 : return os << result.getString() << " (" << result.getCode() << ")";
71 : }
72 :
73 : }
74 : #endif //LUNCHBOX_RESULT_H
|