stock_data_manger.h

来自「股票分析源代码」· C头文件 代码 · 共 158 行

H
158
字号
#ifndef __HBSTOCK2_STOCK_DATA_MANGER_H__
#define __HBSTOCK2_STOCK_DATA_MANGER_H__

#include "hbstock2/stock_data.h"
#include <ace/Singleton.h>

namespace hbstock2
{

class MarketSort
{
public:
	bool operator() (const Market& market1,const Market& market2) const;	
};


class DataLoaderPtrSort
{
public:
	bool operator() (const DataLoaderPtr dataloaderPtr1,const DataLoaderPtr dataloaderPtr2) const;	
};

typedef std::set<DataLoaderPtr,DataLoaderPtrSort> SetDataLoader;
typedef std::set<Market,MarketSort > SetMarket;
typedef ACE_Refcounted_Auto_Ptr<SetMarket ,ACE_Null_Mutex> SetMarketPtr;

typedef ACE_Refcounted_Auto_Ptr<SetDataLoader ,ACE_Null_Mutex> SetDataLoaderPtr;

class DataManger{
private:
	std::map<std::string,gnu::ACE_DLL_Ptr> map_dll_loader;
		
	SetMarketPtr set_market_ptr;

	SetDataLoaderPtr set_dataloader_ptr;
	
	SetDataLoaderPtr m_set_default_day_dataloader_ptr;
	SetDataLoaderPtr m_set_default_min5_dataloader_ptr;	
	
	//void init_market();
	bool is_contain_dataloader(DataLoaderPtr dataloaderPtr);
	
	std::string str_default_dir;
	char p_file_prefix_default[256];
	bool is_inited ;
	
protected:
	void* dso_loader(const std::string& str_file,const char* symbolname) throw (hbstock_exception);
	bool do_div(VectStockData& vect_stockdata,
		const std::string& str_market_code,
		const std::string& str_stock_code,
		DIV_TYPE div_type=NONE,	
		bool is_included_div_data=true);
		
public:
	DataManger();
	virtual ~DataManger();
	
	// dynamic load dataloader
	int load_dso_from_dir(const std::string& str_dir,const char* p_file_prefix=NULL);
	int load_dso_from_file(const std::string& str_file);
	int load_dso_from_default_dir(void);
	int load_default_day_dataloader();
	int load_default_min5_dataloader();
		
	//market type
	bool register_market(const Market& market);
	bool unregister_market(const std::string& market_code);
	bool get_market(Market& market)const;
	bool check_market(const std::string& market_code)const;
	SetMarketPtr get_all_market() const;

	// dataloader
	void reset_default_dataloader();
	bool set_default_day_dataloader(const char* p_dataloader_name = NULL);
	bool set_default_min5_dataloader(const char* p_dataloader_name = NULL);
	SetDataLoaderPtr get_default_day_dataloaders() const;
	SetDataLoaderPtr get_default_min5_dataloaders() const;	
	
	DataLoaderPtr get_dataloader(const std::string& dataloader_name) const;	
	
	DataLoaderPtr get_day_default_dataloader(const std::string& market_code) const;
	DataLoaderPtr get_min5_default_dataloader(const std::string& market_code) const;
	
	SetDataLoaderPtr get_day_dataloaders(const std::string& market_code) const;
	SetDataLoaderPtr get_min5_dataloaders(const std::string& market_code)const;
	
	SetDataLoaderPtr get_all_dataloaders() const;	
	SetDataLoaderPtr get_all_day_dataloaders() const;
	SetDataLoaderPtr get_all_min5_dataloaders() const;
	
	
	bool register_dataloader(DataLoaderPtr dataloaderPtr);	
	bool unregister_dataloader(const std::string& dataloader_name);
	
	void print_info() const;
	
	// init and finit
	virtual int init (void);
	virtual int fini (void);
	
	// get stock code of index
	std::string get_stock_code_of_index(const std::string& market_code);
	//get stocks
	bool get_stock_code(std::vector<std::string>& vect_stock_code,
    	const std::string& market_code, const char* p_prefix_name=NULL) 
    	throw (stock_data_exception);
    
    bool check_transform_stock_code(const std::string& str_stock_code_in,
    	std::string& str_stock_code_out,std::string& str_market_code);
    	
	//load data
	virtual bool is_support_div(const std::string& str_market_code) const ;
	
	virtual bool load_day_data(VectStockData& vect_stockdata,
		const std::string& str_stock_code,
		const char* p_ch_from_date,
		const char* p_ch_to_date=0,
		DIV_TYPE div_type=NONE,	
		bool is_included_div_data=true)
		throw (stock_data_exception);
	/*
	*  is_previous_data=true , means 20051010 is in 20051030's front
	*/
	virtual bool load_day_data(VectStockData& vect_stockdata,
		const std::string& str_stock_code, 
		const char* p_ch_date,
		int data_length=0,
		bool is_previous_data=true,
		DIV_TYPE div_type=NONE , 
		bool is_included_div_data=true)
		throw (stock_data_exception) ;

	virtual bool load_min5_data(VectStockData& vect_stockdata,
		const std::string& str_stock_code, 
		const char* p_ch_from_date,
		const char* p_ch_to_date=0,
		DIV_TYPE div_type=NONE, 
		bool is_included_div_data=true)
		throw (stock_data_exception) ;
	virtual bool load_min5_data(VectStockData& vect_stockdata,
		const std::string& str_stock_code, 
		const char* p_ch_date,
		int data_length=0, 
		bool is_previous_data=true,
		DIV_TYPE div_type=NONE , 
		bool is_included_div_data=true)
		throw (stock_data_exception);
	
}; //DataManger

// ACE_Recursive_Thread_Mutex ACE_Null_Mutex
typedef ACE_Singleton<DataManger,ACE_Thread_Mutex> DataMangerInst;

} // namespace hbstock2
#endif  // #ifndef __HBSTOCK2_STOCK_DATA_MANGER_H__

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?