/******************************************************************************* ModuleName: ODB Real Time Database management system (For New Generation) FileName: odb_system.h DESCRIPTION: class system define FUNCTION LIST: COMMENT: History: Date Version Modifier Activities 2018-11-19 1.0 wuqx created *******************************************************************************/ #ifndef __ODB_SYSTEM_H__ #define __ODB_SYSTEM_H__ #include "db_api/odb_prv_struct.h" #include "db_api/odb_define.h" #include "priv_para.h" #include #include namespace ODB { class COdbSystem { //function to get singleton public: static COdbSystem* GetSystemInstance(); static COdbSystem* pInstance; static pthread_mutex_t _mutex; //creator & destructor public: COdbSystem(); COdbSystem(bool load_flag); ~COdbSystem(); //inneer creator to load config data or initialize all infomation private: int InitSystem(); int LoadSystem(); public: //scenario allocator int AddScenario( const std::string& scenario, const unsigned int scenario_inst_no, const std::string& sub_scenario, const unsigned int sub_scenario_inst_no); int AddScenario( const unsigned int scenario_ID, const unsigned int scenario_inst_no, const unsigned int sub_scenario_ID, const unsigned int sub_scenario_inst_no); int ScenarioRemove( const int scenario_ID, const int scenario_inst_no, const int sub_scenario_ID, const int sub_scenario_inst_no); //scenario locator int IsScenarioCreated( const std::string& scenario, const unsigned int scenario_inst_no, const std::string& sub_scenario, const unsigned int sub_scenario_inst_no); int IsScenarioCreated( const unsigned int scenario_ID, const unsigned int scenario_inst_no, const unsigned int sub_scenario_ID, const unsigned int sub_scenario_inst_no); int IsSubScenarioLoaded( const unsigned int scenario_ID, const unsigned int scenario_inst_no, const unsigned int sub_scenario_ID, const unsigned int sub_scenario_inst_no); int IsSubScenarioLoaded( const std::string& scenario, const unsigned int scenario_inst_no, const std::string& sub_scenario, const unsigned int sub_scenario_inst_no); //sub_scenario manage int LoadSubScenario( const std::string& scenario, const unsigned int scenario_inst_no, const std::string& sub_scenario, const unsigned int sub_scenario_inst_no); int LoadSubScenario( const unsigned int scenario_ID, const unsigned int scenario_inst_no, const unsigned int sub_scenario_ID, const unsigned int sub_scenario_inst_no); int CreateSubScenarioInst( const std::string& scenario, const unsigned int scenario_inst_no, const std::string& sub_scenario, const unsigned int sub_scenario_inst_no); //infomation aquire //exchange name & no int GetScenarioNameByNo(std::string& scenario_name, const unsigned int scenario_id) const; int GetScenarioNoByName(const std::string& scenario_name, unsigned int& scenario_id) const; int GetSubScenarioNameByNo(std::string& sub_scenario_name, const unsigned int sub_scenario_id) const; int GetSubScenarioNoByName(const std::string& sub_scenario_name, unsigned int& sub_scenario_id) const; int GetAllOdbNoBySubScenarioName (std::vector& vec_table, const std::string& scenario_name, const unsigned int scenario_inst, const std::string& sub_scenario, const unsigned int sub_scenario_inst) const; int GetTableNoByChnName(const char* table_name, bool is_real = false); int GetTableNoByName(const char* table_name, bool is_real = false); int GetTableNameByNo(char* table_name, const unsigned int r_table_no, const bool is_eng=true); const char* GetTableNameByNo(const unsigned int r_table_no); int IsTableExisted(const char* table_name) const; int IsTableExisted(const unsigned int table_no) const; //distribute subscn judge bool IsSubScenarioDistribute(const std::string& sub_scenario_name); bool IsSubScenarioDistribute(const unsigned int sub_scenario_id); int DistributeSubScenario(const std::string& DistSubScenarioName, std::string& SubScenarioName); //system reload int ReLoadSystem(); //for debug int Show(); int GetAllScenarioInfo(vector & all_scn_info); public: //ptr access DB_APP_TAB* GetAppPtr() const; DB_CTRL_TAB* GetDbCtrlPtr() const; DB_CTRL_TAB* GetTabDbCtrlPtr(const char* table_name) const; DB_CTRL_TAB* GetTabDbCtrlPtr(unsigned int table_no) const; private: int GenerateSemKey( const unsigned int scenario_ID, const unsigned int scenario_inst_no, const unsigned int sub_scenario_ID, const unsigned int sub_scenario_inst_no); int if_sub_scenario_sliced(const std::string& sub_scenario); private: bool IsSpace(char c); void Trim(string & str); bool AnalyseLine(const string & line, string & key, string & val); int InitMap(); void scenario_table_clear(struct SCENARIO_INFO* ptr); void sub_scenario_table_clear(struct SUB_SCENARIO_INFO* ptr); private: //inner member //id_name map std::map scenario_name_id_map; std::map sub_scenario_name_id_map; std::map scenario_id_name_map; std::map sub_scenario_id_name_map; //system memory ptr struct SYSTEM_INFO* p_sys_info; struct SCENARIO_INFO* p_scenario_table; //sub_scenario DB_APP_TAB* m_AppTabPtr; DB_CTRL_TAB* m_DbCtrlTabPtr; DB_CTRL_TAB* m_CurDbCtrlTabPtr; unsigned int work_mode; //1 means writable 0 means no writable int sem_id; unsigned long memsize; std::string m_sys_path; std::string m_sub_scn_path; std::string m_table_path; }; } #endif