X-Git-Url: https://git.stg.codes/stg.git/blobdiff_plain/4e101b93cafd0881518fc2be53c051d47d374d93..c3d4d096451b5c683492e81574b302e5486950e1:/include/stg/user_property.h diff --git a/include/stg/user_property.h b/include/stg/user_property.h index fbcf8856..824c668e 100644 --- a/include/stg/user_property.h +++ b/include/stg/user_property.h @@ -12,12 +12,14 @@ $Author: faust $ #include #include #include +#include #include #include #include "stg/logger.h" #include "stg/locker.h" #include "stg/scriptexecuter.h" +#include "stg/common.h" #include "store.h" #include "admin.h" @@ -31,8 +33,10 @@ public: virtual std::string ToString() const = 0; }; //----------------------------------------------------------------------------- +typedef std::map REGISTRY; +//----------------------------------------------------------------------------- template -class USER_PROPERTY : USER_PROPERTY_BASE { +class USER_PROPERTY : public USER_PROPERTY_BASE { public: USER_PROPERTY(varT & val); virtual ~USER_PROPERTY(); @@ -72,7 +76,8 @@ public: bool isPassword, bool isStat, STG_LOGGER & logger, - const std::string & sd); + const std::string & sd, + REGISTRY & properties); virtual ~USER_PROPERTY_LOGGED() {} USER_PROPERTY_LOGGED * GetPointer() throw() { return this; } @@ -122,6 +127,7 @@ private: USER_STAT stat; USER_CONF conf; + REGISTRY properties; public: USER_PROPERTIES(const std::string & sd); @@ -135,6 +141,7 @@ public: void SetProperties(const USER_PROPERTIES & p) { stat = p.stat; conf = p.conf; } std::string GetPropertyValue(const std::string & name) const; + bool Exists(const std::string & name) const; USER_PROPERTY_LOGGED cash; USER_PROPERTY_LOGGED up; @@ -171,8 +178,6 @@ public: USER_PROPERTY_LOGGED userdata7; USER_PROPERTY_LOGGED userdata8; USER_PROPERTY_LOGGED userdata9; - - std::map params; }; //============================================================================= @@ -209,7 +214,7 @@ template inline void USER_PROPERTY::Set(const varT & rvalue) { -STG_LOCKER locker(&mutex, __FILE__, __LINE__); +STG_LOCKER locker(&mutex); typename std::set *>::iterator ni; @@ -239,7 +244,7 @@ template inline void USER_PROPERTY::AddBeforeNotifier(PROPERTY_NOTIFIER_BASE * n) { -STG_LOCKER locker(&mutex, __FILE__, __LINE__); +STG_LOCKER locker(&mutex); beforeNotifiers.insert(n); } //----------------------------------------------------------------------------- @@ -247,7 +252,7 @@ template inline void USER_PROPERTY::DelBeforeNotifier(const PROPERTY_NOTIFIER_BASE * n) { -STG_LOCKER locker(&mutex, __FILE__, __LINE__); +STG_LOCKER locker(&mutex); beforeNotifiers.erase(const_cast *>(n)); } //----------------------------------------------------------------------------- @@ -255,7 +260,7 @@ template inline void USER_PROPERTY::AddAfterNotifier(PROPERTY_NOTIFIER_BASE * n) { -STG_LOCKER locker(&mutex, __FILE__, __LINE__); +STG_LOCKER locker(&mutex); afterNotifiers.insert(n); } //----------------------------------------------------------------------------- @@ -263,7 +268,7 @@ template inline void USER_PROPERTY::DelAfterNotifier(const PROPERTY_NOTIFIER_BASE * n) { -STG_LOCKER locker(&mutex, __FILE__, __LINE__); +STG_LOCKER locker(&mutex); afterNotifiers.erase(const_cast *>(n)); } //----------------------------------------------------------------------------- @@ -276,7 +281,8 @@ USER_PROPERTY_LOGGED::USER_PROPERTY_LOGGED(varT & val, bool isPass, bool isSt, STG_LOGGER & logger, - const std::string & sd) + const std::string & sd, + REGISTRY & properties) : USER_PROPERTY(val), stgLogger(logger), @@ -285,6 +291,7 @@ USER_PROPERTY_LOGGED::USER_PROPERTY_LOGGED(varT & val, name(n), scriptsDir(sd) { +properties.insert(std::make_pair(ToLower(name), this)); } //------------------------------------------------------------------------- template @@ -384,11 +391,19 @@ else //------------------------------------------------------------------------- //------------------------------------------------------------------------- //------------------------------------------------------------------------- +inline std::string USER_PROPERTIES::GetPropertyValue(const std::string & name) const { - std::map::iterator it = params.find(name); - if (it != params.end()) return it->second.ToString(); - else return ""; +REGISTRY::const_iterator it = properties.find(ToLower(name)); +if (it == properties.end()) + return ""; +return it->second->ToString(); +} +//----------------------------------------------------------------------------- +inline +bool USER_PROPERTIES::Exists(const std::string & name) const +{ +return properties.find(ToLower(name)) != properties.end(); } //------------------------------------------------------------------------- //------------------------------------------------------------------------- @@ -401,9 +416,10 @@ return stream << value.ConstData(); } //----------------------------------------------------------------------------- template +inline std::string USER_PROPERTY::ToString() const { -std::stringstream stream; +std::ostringstream stream; stream << value; return stream.str(); }