00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027 #include <PVLE/Util/Version.h>
00028 #include <PVLE/Config.h>
00029
00030 #include <boost/version.hpp>
00031 #if (BOOST_VERSION < 103800)
00032
00033 #include <boost/spirit/actor.hpp>
00034 #include <boost/spirit/core.hpp>
00035 #else
00036
00037 #include <boost/spirit/include/classic_actor.hpp>
00038 #include <boost/spirit/include/classic_core.hpp>
00039 #endif
00040
00041 #include <PVLE/Util/Assert.h>
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052 const char * const VERSION_QUALITY_SHORT_STRS[Version::MAX_QUALITY] = {
00053 "dev",
00054 "a",
00055 "b",
00056 "RC",
00057 ""
00058 };
00059
00060
00061 std::string Version::toString() const {
00062 return format_str("%1%.%2%.%3%.%4%%5%", majorNumber % minorNumber % revision % build % VERSION_QUALITY_SHORT_STRS[quality] );
00063 }
00064
00065 std::string Version::toShortString() const {
00066 return format_str("%1%.%2%%3%", majorNumber % minorNumber % VERSION_QUALITY_SHORT_STRS[quality] );
00067 }
00068
00069 bool Version::fromString(const std::string & str)
00070 {
00071 #if (BOOST_VERSION < 103800)
00072 using namespace boost::spirit;
00073 #else
00074 using namespace boost::spirit::classic;
00075 #endif
00076
00077 Version save = *this;
00078 reset();
00079
00080
00081 rule<> separator = ch_p('.') | ',' | '-' | '_' | ' ';
00082 if (parse(str.c_str(),
00083
00084 (
00085
00086
00087 uint_p[assign_a(majorNumber)] >> !(
00088 separator >> uint_p[assign_a(minorNumber)] >> !(
00089 separator >> uint_p[assign_a(revision)] >> !(
00090 separator >> uint_p[assign_a(build)]
00091 )
00092 )
00093 )
00094 )
00095
00096 ).full)
00097 {
00098
00099 return true;
00100 }
00101
00102 *this = save;
00103 return false;
00104 }