From: Maxim Mamontov Date: Mon, 5 Aug 2013 17:27:08 +0000 (+0300) Subject: Added const user accessors. X-Git-Tag: 2.409~342 X-Git-Url: https://git.stg.codes/stg.git/commitdiff_plain/27266b5280c04292ca621da13f36ba70cac403bb?ds=inline Added const user accessors. --- diff --git a/include/stg/users.h b/include/stg/users.h index b97a9be5..19a9d7b7 100644 --- a/include/stg/users.h +++ b/include/stg/users.h @@ -32,6 +32,7 @@ class USERS { public: virtual ~USERS() {} virtual int FindByName(const std::string & login, USER_PTR * user) = 0; + virtual int FindByName(const std::string & login, CONST_USER_PTR * user) const = 0; virtual bool TariffInUse(const std::string & tariffName) const = 0; diff --git a/projects/stargazer/users_impl.cpp b/projects/stargazer/users_impl.cpp index c4f63c64..5b88e685 100644 --- a/projects/stargazer/users_impl.cpp +++ b/projects/stargazer/users_impl.cpp @@ -88,23 +88,39 @@ pthread_mutex_destroy(&mutex); //----------------------------------------------------------------------------- int USERS_IMPL::FindByNameNonLock(const std::string & login, user_iter * user) { -std::map::iterator iter; -iter = loginIndex.find(login); -if (iter != loginIndex.end()) - { - if (user) - *user = iter->second; - return 0; - } -return -1; +const std::map::const_iterator iter(loginIndex.find(login)); +if (iter == loginIndex.end()) + return -1; +if (user) + *user = iter->second; +return 0; +} +//----------------------------------------------------------------------------- +int USERS_IMPL::FindByNameNonLock(const std::string & login, const_user_iter * user) const +{ +const std::map::const_iterator iter(loginIndex.find(login)); +if (iter == loginIndex.end()) + return -1; +if (user) + *user = iter->second; +return 0; } //----------------------------------------------------------------------------- int USERS_IMPL::FindByName(const std::string & login, USER_PTR * user) { STG_LOCKER lock(&mutex, __FILE__, __LINE__); user_iter u; -int res = FindByNameNonLock(login, &u); -if (res) +if (FindByNameNonLock(login, &u)) + return -1; +*user = &(*u); +return 0; +} +//----------------------------------------------------------------------------- +int USERS_IMPL::FindByName(const std::string & login, CONST_USER_PTR * user) const +{ +STG_LOCKER lock(&mutex, __FILE__, __LINE__); +const_user_iter u; +if (FindByNameNonLock(login, &u)) return -1; *user = &(*u); return 0; diff --git a/projects/stargazer/users_impl.h b/projects/stargazer/users_impl.h index 0c2af78d..b9d2b22d 100644 --- a/projects/stargazer/users_impl.h +++ b/projects/stargazer/users_impl.h @@ -75,6 +75,7 @@ public: virtual ~USERS_IMPL(); int FindByName(const std::string & login, USER_PTR * user); + int FindByName(const std::string & login, CONST_USER_PTR * user) const; bool TariffInUse(const std::string & tariffName) const; @@ -122,6 +123,7 @@ private: bool FindByIPIdx(uint32_t ip, user_iter & iter) const; int FindByNameNonLock(const std::string & login, user_iter * user); + int FindByNameNonLock(const std::string & login, const_user_iter * user) const; void RealDelUser(); void ProcessActions();