MyGUI  3.2.1
MyGUI_Version.h
Go to the documentation of this file.
1 /*
2  * This source file is part of MyGUI. For the latest info, see http://mygui.info/
3  * Distributed under the MIT License
4  * (See accompanying file COPYING.MIT or copy at http://opensource.org/licenses/MIT)
5  */
6 
7 #ifndef __MYGUI_VERSION_H__
8 #define __MYGUI_VERSION_H__
9 
10 #include "MyGUI_Prerequest.h"
11 #include "MyGUI_Types.h"
12 #include "MyGUI_StringUtility.h"
13 
14 namespace MyGUI
15 {
16 
18  {
19  public:
20 
21  Version(unsigned int _major = 0, unsigned int _minor = 0, unsigned int _patch = 0) :
22  mMajor(_major),
23  mMinor(_minor),
24  mPatch(_patch)
25  {
26  }
27 
28  friend bool operator < (Version const& a, Version const& b)
29  {
30  return (a.mMajor < b.mMajor) ? true : (a.mMinor < b.mMinor);
31  }
32 
33  friend bool operator >= (Version const& a, Version const& b)
34  {
35  return !(a < b);
36  }
37 
38  friend bool operator > (Version const& a, Version const& b)
39  {
40  return (b < a);
41  }
42 
43  friend bool operator <= (Version const& a, Version const& b)
44  {
45  return !(a > b);
46  }
47 
48  friend bool operator == (Version const& a, Version const& b)
49  {
50  return !(a < b) && !(a > b);
51  }
52 
53  friend bool operator != (Version const& a, Version const& b)
54  {
55  return !(a == b);
56  }
57 
58  friend std::ostream& operator << (std::ostream& _stream, const Version& _value)
59  {
60  _stream << _value.print();
61  return _stream;
62  }
63 
64  friend std::istream& operator >> (std::istream& _stream, Version& _value)
65  {
66  std::string value;
67  _stream >> value;
68  _value = parse(value);
69  return _stream;
70  }
71 
72  unsigned int getMajor() const
73  {
74  return mMajor;
75  }
76 
77  unsigned int getMinor() const
78  {
79  return mMinor;
80  }
81 
82  unsigned int getPatch() const
83  {
84  return mPatch;
85  }
86 
87  std::string print() const
88  {
89  if (mPatch == 0)
90  return utility::toString(mMajor, ".", mMinor);
91  return utility::toString(mMajor, ".", mMinor, ".", mPatch);
92  }
93 
94  static Version parse(const std::string& _value)
95  {
96  const std::vector<std::string>& vec = utility::split(_value, ".");
97  if (vec.empty())
98  return Version();
99 
100  unsigned int major = utility::parseValue<unsigned int>(vec[0]);
101  unsigned int minor = vec.size() > 1 ? utility::parseValue<unsigned int>(vec[1]) : 0;
102  unsigned int patch = vec.size() > 2 ? utility::parseValue<unsigned int>(vec[2]) : 0;
103 
104  return Version(major, minor, patch);
105  }
106 
107  private:
108  unsigned mMajor : 8;
109  unsigned mMinor : 8;
110  unsigned mPatch : 16;
111  };
112 
113 } // namespace MyGUI
114 
115 #endif // __MYGUI_VERSION_H__