Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

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

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

orxonox/trunk: merged the new_class_id branche back to the trunk.
merged with command:
svn merge https://svn.orxonox.net/orxonox/branches/new_class_id trunk -r9683:HEAD
no conflicts… puh..

File size: 6.1 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,                  //!< A insigned int Value.
20  MT_LONG            = 2,                  //!< A long Value
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 std::string& value);
42    MultiType(const MultiType& multiType);
43    virtual ~MultiType();
44
45    MultiType& operator=(const MultiType& mt);
46    /** @param value the value to set (here a bool) @returns the MultiType where this the bool is stored */
47    MultiType& operator=(bool value) { this->setBool(value); return *this; };
48    /** @param value the value to set (here an int) @returns the MultiType where this the int is stored */
49    MultiType& operator=(int value) { this->setInt(value); return *this; };
50    /** @param value the value to set (here an int) @returns the MultiType where this the float is stored */
51    MultiType& operator=(float value) { this->setFloat(value); return *this; };
52    /** @param value the value to set (here a char) @returns the MultiType where this the char is stored */
53    MultiType& operator=(char value) { this->setChar(value); return *this; };
54    /** @param value the value to set (here a string) @returns the MultiType where this the string is stored */
55    MultiType& operator=(const std::string& value) { this->setString(value); return *this; };
56
57    bool operator==(const MultiType& mt) const;
58    /** @param value the value to compare this MultiType against @returns true if comparison was io */
59    bool operator==(bool value) const { return (this->getBool() == value); };
60    /** @param value the value to compare this MultiType against @returns true if comparison was io */
61    bool operator==(int value) const { return (this->getInt() == value); };
62    /** @param value the value to compare this MultiType against @returns true if comparison was io */
63    bool operator==(float value) const { return (this->getFloat() ==  value); };
64    /** @param value the value to compare this MultiType against @returns true if comparison was io */
65    bool operator==(char value) const { return (this->getChar() == value); };
66    /** @param value the value to compare this MultiType against @returns true if comparison was io */
67    bool operator==(const std::string& value) const { return (this->getString() == value); };
68    /** @param type the Type to compare this MultiType against @returns true if the types matched */
69    bool operator==(MT_Type type) const { return (this->type == type); }
70    /** @param type the type to compare this MultiType against @returns true if the types do not match */
71    bool operator!=(MT_Type type) const { return (this->type != type); }
72
73    void setType(MT_Type type);
74
75    void setBool(bool value);
76    void setInt(int value);
77    void setFloat(float value);
78    void setChar(char value);
79    void setString(const std::string& value);
80
81    // for your convenience.
82    /** @param value the value to set. Here a bool */
83    inline void setValue(bool value) { this->setBool(value); };
84    /** @param value the value to set. Here an int */
85    inline void setValue(int value) { this->setInt(value); };
86    /** @param value the value to set. Here a float */
87    inline void setValue(float value) { this->setFloat(value); };
88    /** @param value the value to set. Here a char */
89    inline void setValue(char value) { this->setChar(value); };
90    /** @param value the value to set. Here a char array (string) */
91    inline void setValue(const char* value) { this->setString(value); };
92    /** @param value the value to set. Here a string */
93    inline void setValue(const std::string& value) { this->setString(value); };
94    void setValueOf(const MultiType& mt);
95
96    /** @returns the Type of the Value stored in this MultiType */
97    inline MT_Type getType() const { return this->type; };
98
99    void storeString();
100
101    /* RETRIEVING FUNCTIONS */
102    bool getBool() const;
103    int getInt() const;
104    float getFloat() const;
105    char getChar() const;
106    const char* getCString();
107    std::string getString() const;
108    const std::string& getConstString() const;
109    const std::string& getStoredString() const;
110
111    void reset();
112
113    void debug() const;
114
115    static const std::string& MultiTypeToString(MT_Type type);
116    static MT_Type StringToMultiType(const std::string& type);
117
118  private:
119    //! A union, that combines types into as little memory as possible.
120    union MultiTypeValue
121    {
122      bool                       Bool;              //!< If it is a BOOL
123      int                        Int;               //!< If it is an INT
124      float                      Float;             //!< If it is a FLOAT
125      char                       Char;              //!< If it is a CHAR
126    }                            value;             //!< The Value.
127    std::string                  storedString;      //!< The Stored String.
128    MT_Type                      type;              //!< The Type stored in this MultiType
129
130
131    static std::string           constString;       //!< A String for returning Constant strings.
132
133    static const std::string     typeNames[];       //!< List of TypeNames for conversion.
134};
135
136#endif /* _MULTI_TYPE_H */
Note: See TracBrowser for help on using the repository browser.