X-Git-Url: https://git.stg.codes/stg.git/blobdiff_plain/72229403aae25f742c07d07d625bdc1e313b401d..8c7a6befad791ac242f15233365893b18953a627:/projects/stargazer/admins_impl.h?ds=sidebyside diff --git a/projects/stargazer/admins_impl.h b/projects/stargazer/admins_impl.h index 7434c445..9c443a77 100644 --- a/projects/stargazer/admins_impl.h +++ b/projects/stargazer/admins_impl.h @@ -22,70 +22,62 @@ * Author : Boris Mikhailenko */ - /* - $Revision: 1.10 $ - $Date: 2010/10/04 20:17:12 $ - $Author: faust $ - */ - -#ifndef ADMINS_IMPL_H -#define ADMINS_IMPL_H - -#include - -#include -#include -#include +#pragma once #include "stg/admins.h" #include "stg/admin.h" -#include "stg/locker.h" #include "stg/store.h" -#include "stg/noncopyable.h" #include "stg/logger.h" -#include "admin_impl.h" - -class ADMINS_IMPL : private NONCOPYABLE, public ADMINS { -public: - ADMINS_IMPL(STORE * st); - virtual ~ADMINS_IMPL() {} - - int Add(const std::string & login, const ADMIN * admin); - int Del(const std::string & login, const ADMIN * admin); - int Change(const ADMIN_CONF & ac, const ADMIN * admin); - const ADMIN * GetSysAdmin() const { return &stg; } - const ADMIN * GetNoAdmin() const { return &noAdmin; } - bool Find(const std::string & l, ADMIN ** admin); - bool Exists(const std::string & login) const; - bool Correct(const std::string & login, - const std::string & password, - ADMIN ** admin); - const std::string & GetStrError() const { return strError; } - size_t Count() const { return data.size(); } - - int OpenSearch() const; - int SearchNext(int, ADMIN_CONF * ac) const; - int CloseSearch(int) const; - -private: - ADMINS_IMPL(const ADMINS_IMPL & rvalue); - ADMINS_IMPL & operator=(const ADMINS_IMPL & rvalue); - - typedef std::list::iterator admin_iter; - typedef std::list::const_iterator const_admin_iter; - - int Read(); - - ADMIN_IMPL stg; - ADMIN_IMPL noAdmin; - std::list data; - STORE * store; - STG_LOGGER & WriteServLog; - mutable std::map searchDescriptors; - mutable unsigned int handle; - mutable pthread_mutex_t mutex; - std::string strError; +#include +#include +#include +#include + +namespace STG +{ + +class AdminsImpl : public Admins +{ + public: + explicit AdminsImpl(Store& st); + + AdminsImpl(const AdminsImpl&) = delete; + AdminsImpl& operator=(const AdminsImpl&) = delete; + + int add(const std::string& login, const Admin& admin) override; + int del(const std::string& login, const Admin& admin) override; + int change(const AdminConf& ac, const Admin& admin) override; + const Admin& sysAdmin() const override { return m_stg; } + const Admin& noAdmin() const override { return m_noAdmin; } + bool find(const std::string& login, Admin** admin) override; + bool exists(const std::string& login) const override; + bool correct(const std::string& login, + const std::string& password, + Admin** admin) override; + + const std::string& strError() const override { return m_strError; } + + size_t count() const override { return m_data.size(); } + + void fmap(std::function callback) const + { + for (const auto& admin : m_data) + callback(admin); + } + + private: + void read(); + auto find(const std::string& login) { return std::find(m_data.begin(), m_data.end(), Admin(Priv(0), login, "")); } + auto find(const std::string& login) const { return std::find(m_data.begin(), m_data.end(), Admin(Priv(0), login, "")); } + + Admin m_stg; + Admin m_noAdmin; + std::vector m_data; + Store& m_store; + Logger& WriteServLog; + mutable std::mutex m_mutex; + std::string m_strError; }; -#endif +}