X-Git-Url: https://git.stg.codes/stg.git/blobdiff_plain/becf6dfe4fe2ecd43792aa53a302c5866483f306..72797a0baa15ce75663a8dc662a132a6dd1a0de1:/projects/stargazer/admins_impl.h diff --git a/projects/stargazer/admins_impl.h b/projects/stargazer/admins_impl.h index 09933230..9c443a77 100644 --- a/projects/stargazer/admins_impl.h +++ b/projects/stargazer/admins_impl.h @@ -22,67 +22,62 @@ * Author : Boris Mikhailenko */ - /* - $Revision: 1.10 $ - $Date: 2010/10/04 20:17:12 $ - $Author: faust $ - */ - -#ifndef ADMINS_H -#define ADMINS_H +#pragma once -#include -#include -#include +#include "stg/admins.h" +#include "stg/admin.h" +#include "stg/store.h" +#include "stg/logger.h" -#include "admin.h" -#include "stg_locker.h" -#include "base_store.h" -#include "noncopyable.h" +#include +#include +#include +#include -using namespace std; +namespace STG +{ -//----------------------------------------------------------------------------- -class ADMINS : private NONCOPYABLE +class AdminsImpl : public Admins { -public: - ADMINS(BASE_STORE * st); - ~ADMINS() {}; + public: + explicit AdminsImpl(Store& st); - int Add(const string & login, const ADMIN & admin); - int Del(const string & login, const ADMIN & admin); - int Change(const ADMIN_CONF & ac, const ADMIN & admin); - void PrintAdmins() const; - const ADMIN GetSysAdmin() const { return stg; }; - const ADMIN GetNoAdmin() const { return noAdmin; }; - bool FindAdmin(const string & l, ADMIN * admin) const; - bool AdminExists(const std::string & login) const; - bool AdminCorrect(const std::string & login, - const std::string & password, - ADMIN * admin) const; - const string & GetStrError() const { return strError; }; + AdminsImpl(const AdminsImpl&) = delete; + AdminsImpl& operator=(const AdminsImpl&) = delete; - int OpenSearch() const; - int SearchNext(int, ADMIN_CONF * ac) const; - int CloseSearch(int) const; + 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; -private: - typedef list::iterator admin_iter; - typedef list::const_iterator const_admin_iter; + const std::string& strError() const override { return m_strError; } - int ReadAdmins(); + size_t count() const override { return m_data.size(); } - ADMIN stg; - ADMIN noAdmin; - list data; - BASE_STORE * store; - STG_LOGGER & WriteServLog; - mutable map searchDescriptors; - mutable unsigned int handle; - mutable pthread_mutex_t mutex; - string strError; -}; -//----------------------------------------------------------------------------- -#endif + 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; +}; +}