Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: orxonox.OLD/trunk/src/lib/util/multi_type.h @ 7199

Last change on this file since 7199 was 7199, checked in by bensch, 18 years ago

orxonox/trunk: MultiType rework (now uses std::string) this is more compliant, and better to handle

File size: 3.9 KB
Line 
1/*!
2 * @file multi_type.h
3 * @brief Definition of a MultiType, that is able to hold one Value of many types.
4 */
5
6#ifndef _MULTI_TYPE_H
7#define _MULTI_TYPE_H
8
9#include <string>
10
11// FORWARD DECLARATION
12
13//! An enumerator defining Types, that can be stored inside a MultiType.
14typedef enum
15{
16  MT_NULL            = 0,                  //!< No Value at all.
17  MT_BOOL            = 1,                  //!< A bool Value.
18  MT_INT             = 2,                  //!< An int Value.
19  MT_UINT            = 2,
20  MT_LONG            = 2,
21  MT_FLOAT           = 4,                  //!< A float Value.
22  MT_CHAR            = 8,                  //!< A single char.
23  MT_STRING          = 16,                 //!< An entire String.
24  MT_EXT1            = 32,                 //!< An external Type.
25  MT_EXT2            = 64,                 //!< An external Type.
26} MT_Type;
27
28
29
30//! A class that encapsulates multiple differen types.
31/**
32 * Only one Value can be Stored inside this Class, but it can have any type: @see MT_Type.
33 */
34class MultiType {
35  public:
36    MultiType(MT_Type type = MT_NULL);
37    MultiType(bool value);
38    MultiType(int value);
39    MultiType(double value);
40    MultiType(char value);
41    MultiType(const char* value);
42    MultiType(const std::string& value);
43    MultiType(const MultiType& multiType);
44    virtual ~MultiType();
45
46    MultiType& operator=(const MultiType& mt);
47    MultiType& operator=(bool value) { this->setBool(value); return *this; };
48    MultiType& operator=(int value) { this->setInt(value); return *this; };
49    MultiType& operator=(float value) { this->setFloat(value); return *this; };
50    MultiType& operator=(char value) { this->setChar(value); return *this; };
51    MultiType& operator=(const char* value) { this->setString(value); return *this; };
52    MultiType& operator=(const std::string& value) { this->setString(value); return *this; };
53
54    bool operator==(const MultiType& mt) const;
55    bool operator==(bool value) const { return (this->getBool() == value); };
56    bool operator==(int value) const { return (this->getInt() == value); };
57    bool operator==(float value) const { return (this->getFloat() ==  value); };
58    bool operator==(char value) const { return (this->getChar() == value); };
59    bool operator==(const std::string& value) const { return (this->getString() == value); };
60    bool operator==(MT_Type type) const { return (this->type == type); }
61    bool operator!=(MT_Type type) const { return (this->type != type); }
62
63    void setType(MT_Type type);
64
65    void setBool(bool value);
66    void setInt(int value);
67    void setFloat(float value);
68    void setChar(char value);
69    void setString(const std::string& value);
70
71    // for your convenience.
72    inline void setValue(bool value) { this->setBool(value); };
73    inline void setValue(int value) { this->setInt(value); };
74    inline void setValue(float value) { this->setFloat(value); };
75    inline void setValue(char value) { this->setChar(value); };
76    inline void setValue(const char* value) { this->setString(value); };
77    inline void setValue(const std::string& value) { this->setString(value); };
78    void setValueOf(const MultiType& mt);
79
80    /** @returns the Type of the Value stored in this MultiType */
81    inline MT_Type getType() const { return this->type; };
82
83
84    /* RETRIEVING FUNCTIONS */
85    bool getBool() const;
86    int getInt() const;
87    float getFloat() const;
88    char getChar() const;
89    const char* getCString();
90    std::string getString() const;
91
92    void reset();
93
94    void debug() const;
95
96    static const char* MultiTypeToString(MT_Type type);
97    static MT_Type StringToMultiType(const char* type);
98
99  private:
100    void init();
101
102
103  private:
104    union MultiTypeValue
105    {
106      bool              Bool;
107      int               Int;
108      float             Float;
109      char              Char;
110//      std::string*      String;
111    }                   value;
112
113    MT_Type             type;
114
115    std::string         storedString;
116};
117
118#endif /* _MULTI_TYPE_H */
Note: See TracBrowser for help on using the repository browser.