00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016 #ifndef SERVERVERSION_H
00017 #define SERVERVERSION_H
00018
00019 #ifndef USE_PCH
00020 #include <string>
00021 #include <boost/optional/optional.hpp>
00022 #endif
00023
00024 class PersistXML;
00025
00026
00027 class ServerVersion {
00028 public:
00029 enum result_type {
00030 initialized,
00031 the_same,
00032 changed
00033 };
00034
00035 private:
00036 time_t M_time;
00037 std::string M_version;
00038 boost::optional<bool> M_user_supports_umode;
00039
00040 public:
00041
00042 ServerVersion(void) : M_time(0) { }
00043
00044 result_type set_version(std::string const& version, time_t time)
00045 {
00046 result_type result = M_version.empty() ? initialized : (M_version == version) ? the_same : changed;
00047 M_version = version;
00048 M_time = time;
00049 if (result != the_same)
00050 {
00051
00052 M_user_supports_umode = boost::none;
00053 }
00054 return result;
00055 }
00056
00057 result_type set_user_supports_umode(bool value)
00058 {
00059 result_type result = M_user_supports_umode ? ((*M_user_supports_umode == value) ? the_same : changed) : initialized;
00060 *M_user_supports_umode = value;
00061 return result;
00062 }
00063
00064 std::string const& version(void) const { ASSERT(!M_version.empty()); return M_version; }
00065 boost::optional<bool> get_user_supports_umode(void) const { return M_user_supports_umode; }
00066
00067 void print_on(std::ostream& os) const;
00068 void serialize(PersistXML& xml);
00069 };
00070
00071 #endif // SERVERVERSION_H