Go to the documentation of this file.00001
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #ifndef __MYGUI_VERSION_H__
00024 #define __MYGUI_VERSION_H__
00025
00026 #include "MyGUI_Prerequest.h"
00027 #include "MyGUI_Types.h"
00028 #include "MyGUI_Utility.h"
00029
00030 namespace MyGUI
00031 {
00032
00033 class MYGUI_EXPORT Version
00034 {
00035 public:
00036 Version() : value(0) { }
00037 Version(uint8 _major, uint8 _minor, uint16 _patch) : value((uint32(_major) << 24) + (uint32(_minor) << 16) + uint32(_patch)) { }
00038 Version(uint8 _major, uint8 _minor) : value((uint32(_major) << 24) + (uint32(_minor) << 16)) { }
00039 explicit Version(const std::string& _value) : value(parse(_value).value) { }
00040
00041 friend bool operator < (Version const& a, Version const& b) { return a.getPoorVersion() < b.getPoorVersion(); }
00042 friend bool operator >= (Version const& a, Version const& b) { return !(a < b); }
00043 friend bool operator > (Version const& a, Version const& b) { return (b < a); }
00044 friend bool operator <= (Version const& a, Version const& b) { return !(a > b); }
00045
00046 friend bool operator == (Version const& a, Version const& b) { return !(a < b) && !(a > b); }
00047 friend bool operator != (Version const& a, Version const& b) { return !(a == b); }
00048
00049 friend std::ostream& operator << ( std::ostream& _stream, const Version& _value )
00050 {
00051 _stream << _value.print();
00052 return _stream;
00053 }
00054
00055 friend std::istream& operator >> ( std::istream& _stream, Version& _value )
00056 {
00057 std::string value;
00058 _stream >> value;
00059 _value = Version::parse(value);
00060 return _stream;
00061 }
00062
00063 uint8 getMajor() const { return uint8((value & 0xFF000000) >> 24); }
00064 uint8 getMinor() const { return uint8((value & 0x00FF0000) >> 16); }
00065 uint16 getPatch() const { return uint16(value & 0x0000FFFF); }
00066
00067 int getPoorVersion() const { return value & 0xFFFF0000; }
00068 int getFullVersion() const { return value; }
00069
00070 std::string print() const
00071 {
00072 if (getPatch() == 0) return utility::toString(getMajor(), ".", getMinor());
00073 return utility::toString(getMajor(), ".", getMinor(), ".", getPatch());
00074 }
00075
00076 static Version parse(const std::string& _value)
00077 {
00078 const std::vector<std::string>& vec = utility::split(_value, ".");
00079 if (vec.empty()) return Version();
00080 uint8 major = (uint8)utility::parseValue<int>(vec[0]);
00081 uint8 minor = vec.size() > 1 ? (uint8)utility::parseValue<int>(vec[1]) : uint8(0);
00082 uint16 patch = vec.size() > 2 ? (uint16)utility::parseValue<int>(vec[2]) : uint16(0);
00083 return Version(major, minor, patch);
00084 }
00085
00086 private:
00087 union
00088 {
00089 uint32 value;
00090 uint8 value_data[4];
00091 };
00092 };
00093
00094 }
00095
00096 #endif // __MYGUI_VERSION_H__