]> git.stg.codes - stg.git/commitdiff
Added const user accessors.
authorMaxim Mamontov <faust.madf@gmail.com>
Mon, 5 Aug 2013 17:27:08 +0000 (20:27 +0300)
committerMaxim Mamontov <faust.madf@gmail.com>
Mon, 5 Aug 2013 17:27:08 +0000 (20:27 +0300)
include/stg/users.h
projects/stargazer/users_impl.cpp
projects/stargazer/users_impl.h

index b97a9be5b67cde56472999f0c0e39ada583ff59c..19a9d7b7446a8b01cc647b8ad7b63a496ddbd59e 100644 (file)
@@ -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;
 
index c4f63c6476763548a8f29da093d4ae9aea5f8797..5b88e685904a1d2ff0f509ea729f6491a5472247 100644 (file)
@@ -88,23 +88,39 @@ pthread_mutex_destroy(&mutex);
 //-----------------------------------------------------------------------------
 int USERS_IMPL::FindByNameNonLock(const std::string & login, user_iter * user)
 {
-std::map<std::string, user_iter>::iterator iter;
-iter = loginIndex.find(login);
-if (iter != loginIndex.end())
-    {
-    if (user)
-        *user = iter->second;
-    return 0;
-    }
-return -1;
+const std::map<std::string, user_iter>::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<std::string, user_iter>::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;
index 0c2af78d5f84fea5bbab66e25e0deed6787964e2..b9d2b22d34e894f123862de2d089dbedc8e489ee 100644 (file)
@@ -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();