00001 #ifndef _ots_ConfigurationVersion_h_
00002 #define _ots_ConfigurationVersion_h_
00003
00004 #include <ostream>
00005
00006 namespace ots
00007 {
00008
00009
00010
00011
00012
00013 class ConfigurationVersion
00014 {
00015 public:
00016 static const unsigned int INVALID;
00017 static const unsigned int DEFAULT;
00018 static const unsigned int SCRATCH;
00019
00020 explicit ConfigurationVersion (unsigned int version=INVALID);
00021 explicit ConfigurationVersion (char* const &versionStr);
00022 explicit ConfigurationVersion (const std::string &versionStr);
00023 virtual ~ConfigurationVersion (void);
00024
00025 unsigned int version (void) const;
00026 bool isTemporaryVersion (void) const;
00027 bool isScratchVersion (void) const;
00028 bool isInvalid (void) const;
00029 std::string toString (void) const;
00030
00031
00032 ConfigurationVersion& operator= (const unsigned int version);
00033 bool operator== (unsigned int version) const;
00034 bool operator== (const ConfigurationVersion& version) const;
00035 bool operator!= (unsigned int version) const;
00036 bool operator!= (const ConfigurationVersion& version) const;
00037 bool operator< (const ConfigurationVersion& version) const;
00038 bool operator> (const ConfigurationVersion& version) const;
00039 bool operator<= (const ConfigurationVersion& version) const { return !operator>(version);}
00040 bool operator>= (const ConfigurationVersion& version) const { return !operator<(version);}
00041
00042 friend std::ostream& operator<< (std::ostream& out, const ConfigurationVersion& version)
00043 {
00044 if(version.isScratchVersion())
00045 out << "ScratchVersion";
00046 else if(version.isInvalid())
00047 out << "InvalidVersion";
00048 else
00049 out << version.toString();
00050 return out;
00051 }
00052
00053 static ConfigurationVersion getNextVersion (const ConfigurationVersion& version=ConfigurationVersion());
00054 static ConfigurationVersion getNextTemporaryVersion (const ConfigurationVersion& version=ConfigurationVersion());
00055
00056 private:
00057
00058 enum{ NUM_OF_TEMP_VERSIONS = 10000 };
00059
00060 unsigned int version_;
00061 std::string versionString_;
00062
00063 };
00064 }
00065 #endif