]> git.stg.codes - stg.git/blobdiff - projects/stargazer/services_impl.h
Move strategy into job.
[stg.git] / projects / stargazer / services_impl.h
index 4c7044fafcd71505d38aca36be5be45f5fef06ef..8a66f63dba00d4e8d1d735d782ddfd174e0310f2 100644 (file)
  *    Author : Maxim Mamontov <faust@stargazer.dp.ua>
  */
 
-#ifndef SERVICES_IMPL_H
-#define SERVICES_IMPL_H
-
-#include <pthread.h>
-
-#include <list>
-#include <map>
-#include <string>
+#pragma once
 
 #include "stg/services.h"
 #include "stg/service_conf.h"
 #include "stg/locker.h"
-#include "stg/store.h"
 #include "stg/noncopyable.h"
+#include "stg/logger.h"
+
+#include <vector>
+#include <map>
+#include <string>
+#include <mutex>
+
+namespace STG
+{
 
-class ADMIN;
+struct Admin;
+struct Store;
 
-class SERVICES_IMPL : private NONCOPYABLE, public SERVICES {
-public:
-    SERVICES_IMPL(STORE * st);
-    virtual SERVICES_IMPL() {}
+class ServicesImpl : public Services {
+    public:
+        explicit ServicesImpl(Store* st);
 
-    int Add(const SERVICE_CONF & service, const ADMIN * admin);
-    int Del(const std::string & name, const ADMIN * admin);
-    int Change(const SERVICE_CONF & service, const ADMIN * admin);
-    bool FindService(const std::string & name, SERVICE_CONF & service);
-    bool ServiceExists(const std::string & name) const;
-    const std::string & GetStrError() const;
+        int Add(const ServiceConf& service, const Admin* admin) override;
+        int Del(const std::string& name, const Admin* admin) override;
+        int Change(const ServiceConf& service, const Admin* admin) override;
+        bool Find(const std::string& name, ServiceConf* service) const override;
+        bool Find(const std::string& name, ServiceConfOpt* service) const override;
+        bool Exists(const std::string& name) const override;
+        const std::string& GetStrError() const override { return strError; }
 
-    int OpenSearch() const;
-    int SearchNext(int, SERVICE_CONF * service) const;
-    int CloseSearch(int) const;
+        size_t Count() const override { return data.size(); }
 
-private:
-    typedef list<SERVICE_CONF>::iterator       srv_iter;
-    typedef list<SERVICE_CONF>::const_iterator const_srv_iter;
+        int OpenSearch() const override;
+        int SearchNext(int, ServiceConf* service) const override;
+        int CloseSearch(int) const override;
 
-    bool ReadServices();
+    private:
+        typedef std::vector<ServiceConf>::iterator       iterator;
+        typedef std::vector<ServiceConf>::const_iterator const_iterator;
 
-    std::list<SERVICE_CONF> data;
-    STORE *                 store;
-    STG_LOGGER &            WriteServLog;
-    mutable std::map<int, const_srv_iter> searchDescriptors;
-    mutable unsigned int    handle;
-    mutable pthread_mutex_t mutex;
-    std::string             strError;
+        bool Read();
+
+        std::vector<ServiceConf> data;
+        Store*                 store;
+        Logger&            WriteServLog;
+        mutable std::map<int, const_iterator> searchDescriptors;
+        mutable unsigned int    handle;
+        mutable std::mutex mutex;
+        std::string             strError;
 };
+
+}