X-Git-Url: https://git.stg.codes/stg.git/blobdiff_plain/7f4a67cabd5fbf8cfe9c2e658bd4a255a6764b0e..102a98fb1218ebee228837b895d7132e7d2628ec:/include/stg/user_property.h diff --git a/include/stg/user_property.h b/include/stg/user_property.h index d76326f1..567df9fa 100644 --- a/include/stg/user_property.h +++ b/include/stg/user_property.h @@ -25,10 +25,14 @@ $Author: faust $ #include "noncopyable.h" extern volatile time_t stgTime; - +//----------------------------------------------------------------------------- +class USER_PROPERTY_BASE { +public: + virtual std::string ToString() const = 0; +}; //----------------------------------------------------------------------------- template -class USER_PROPERTY { +class USER_PROPERTY : USER_PROPERTY_BASE { public: USER_PROPERTY(varT & val); virtual ~USER_PROPERTY(); @@ -68,7 +72,8 @@ public: bool isPassword, bool isStat, STG_LOGGER & logger, - const std::string & sd); + const std::string & sd, + std::map & properties); virtual ~USER_PROPERTY_LOGGED() {} USER_PROPERTY_LOGGED * GetPointer() throw() { return this; } @@ -118,6 +123,7 @@ private: USER_STAT stat; USER_CONF conf; + std::map & properties; public: USER_PROPERTIES(const std::string & sd); @@ -130,6 +136,8 @@ public: void SetProperties(const USER_PROPERTIES & p) { stat = p.stat; conf = p.conf; } + std::string GetPropertyValue(const std::string & name) const; + USER_PROPERTY_LOGGED cash; USER_PROPERTY_LOGGED up; USER_PROPERTY_LOGGED down; @@ -268,7 +276,8 @@ USER_PROPERTY_LOGGED::USER_PROPERTY_LOGGED(varT & val, bool isPass, bool isSt, STG_LOGGER & logger, - const std::string & sd) + const std::string & sd, + std::map & properties) : USER_PROPERTY(val), stgLogger(logger), @@ -277,6 +286,7 @@ USER_PROPERTY_LOGGED::USER_PROPERTY_LOGGED(varT & val, name(n), scriptsDir(sd) { +properties.insert(std::make_pair(name, this)); } //------------------------------------------------------------------------- template @@ -376,6 +386,17 @@ else //------------------------------------------------------------------------- //------------------------------------------------------------------------- //------------------------------------------------------------------------- +inline +std::string USER_PROPERTIES::GetPropertyValue(const std::string & name) const +{ +std::map::iterator it = properties.find(name); +if (it == properties.end()) + return ""; +return it->second->ToString(); +} +//------------------------------------------------------------------------- +//------------------------------------------------------------------------- +//------------------------------------------------------------------------- template inline std::ostream & operator<< (std::ostream & stream, const USER_PROPERTY & value) @@ -384,11 +405,11 @@ return stream << value.ConstData(); } //----------------------------------------------------------------------------- template +inline std::string USER_PROPERTY::ToString() const { std::stringstream stream; stream << value; -std::string stringValue = stream.str(); -return stringValue; +return stream.str(); } #endif // USER_PROPERTY_H