Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: orxonox.OLD/branches/resources/src/lib/util/multi_type.h @ 7229

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

resources: some minor implementations

File size: 4.4 KB
RevLine 
[4838]1/*!
[5536]2 * @file multi_type.h
[7199]3 * @brief Definition of a MultiType, that is able to hold one Value of many types.
[5545]4 */
[1853]5
[5536]6#ifndef _MULTI_TYPE_H
7#define _MULTI_TYPE_H
[1853]8
[7199]9#include <string>
10
[4838]11// FORWARD DECLARATION
[3543]12
[5537]13//! An enumerator defining Types, that can be stored inside a MultiType.
[5536]14typedef enum
15{
[5537]16  MT_NULL            = 0,                  //!< No Value at all.
17  MT_BOOL            = 1,                  //!< A bool Value.
18  MT_INT             = 2,                  //!< An int Value.
[5633]19  MT_UINT            = 2,
20  MT_LONG            = 2,
[5537]21  MT_FLOAT           = 4,                  //!< A float Value.
22  MT_CHAR            = 8,                  //!< A single char.
23  MT_STRING          = 16,                 //!< An entire String.
[5633]24  MT_EXT1            = 32,                 //!< An external Type.
25  MT_EXT2            = 64,                 //!< An external Type.
[5537]26} MT_Type;
[5536]27
28
29
[5537]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 */
[5536]34class MultiType {
[5545]35  public:
[7197]36    MultiType(MT_Type type = MT_NULL);
[5545]37    MultiType(bool value);
38    MultiType(int value);
39    MultiType(double value);
40    MultiType(char value);
[7199]41    MultiType(const std::string& value);
[5659]42    MultiType(const MultiType& multiType);
[5545]43    virtual ~MultiType();
[1853]44
[6643]45    MultiType& operator=(const MultiType& mt);
[6644]46    MultiType& operator=(bool value) { this->setBool(value); return *this; };
47    MultiType& operator=(int value) { this->setInt(value); return *this; };
48    MultiType& operator=(float value) { this->setFloat(value); return *this; };
49    MultiType& operator=(char value) { this->setChar(value); return *this; };
[7199]50    MultiType& operator=(const std::string& value) { this->setString(value); return *this; };
[6644]51
[6643]52    bool operator==(const MultiType& mt) const;
[6644]53    bool operator==(bool value) const { return (this->getBool() == value); };
54    bool operator==(int value) const { return (this->getInt() == value); };
55    bool operator==(float value) const { return (this->getFloat() ==  value); };
56    bool operator==(char value) const { return (this->getChar() == value); };
[7199]57    bool operator==(const std::string& value) const { return (this->getString() == value); };
[6645]58    bool operator==(MT_Type type) const { return (this->type == type); }
59    bool operator!=(MT_Type type) const { return (this->type != type); }
[3245]60
[6645]61    void setType(MT_Type type);
[5540]62
[5545]63    void setBool(bool value);
64    void setInt(int value);
65    void setFloat(float value);
66    void setChar(char value);
[7199]67    void setString(const std::string& value);
[5540]68
[6644]69    // for your convenience.
[5545]70    inline void setValue(bool value) { this->setBool(value); };
71    inline void setValue(int value) { this->setInt(value); };
72    inline void setValue(float value) { this->setFloat(value); };
73    inline void setValue(char value) { this->setChar(value); };
74    inline void setValue(const char* value) { this->setString(value); };
[7199]75    inline void setValue(const std::string& value) { this->setString(value); };
76    void setValueOf(const MultiType& mt);
[5541]77
[5545]78    /** @returns the Type of the Value stored in this MultiType */
79    inline MT_Type getType() const { return this->type; };
[5536]80
[5552]81
82    /* RETRIEVING FUNCTIONS */
[5545]83    bool getBool() const;
84    int getInt() const;
85    float getFloat() const;
86    char getChar() const;
[7199]87    const char* getCString();
88    std::string getString() const;
[5537]89
[5643]90    void reset();
[5537]91
[7199]92    void debug() const;
[5544]93
[7229]94    static const std::string& MultiTypeToString(MT_Type type);
[7221]95    static MT_Type StringToMultiType(const std::string& type);
[5544]96
[5545]97  private:
[7229]98    /**
99     * The stored internal Value of the MultiType is handled in this union
100     * plus the string down below
101     */
[5551]102    union MultiTypeValue
[5545]103    {
[7229]104      bool              Bool;            //!< If Type == MT_BOOL this is the MultiType's value
105      int               Int;             //!< If Type == MT_INT this is the MultiType's value
106      float             Float;           //!< If Type == MT_FLOAT this is the MultiType's value
107      char              Char;            //!< If Type == MT_CHAR this is the MultiType's value
[7199]108//      std::string*      String;
[7229]109    }                   value;           //!< The stored internal value.
110    std::string         storedString;    //!< The String if either MT_TYPE == MT_STRING or if temporary requested
111    MT_Type             type;            //!< The Type of the MultiString.
112
113    static const std::string multiTypeNames[]; //!< An array to convert from String to MT_TYPE and backwords.
[1853]114};
115
[5536]116#endif /* _MULTI_TYPE_H */
Note: See TracBrowser for help on using the repository browser.