DataStore.h

Go to the documentation of this file.
00001 // Copyright CERN 2012 - Developed in collaboration with GSI
00002 
00003 #ifndef DATA_STORE_H_
00004 #define DATA_STORE_H_
00005 
00006 #include <vector>
00007 #include <string>
00008 
00009 #include <stdint.h>
00010 
00011 namespace fesa
00012 {
00013 
00014 class AbstractField;
00015 class MultiplexingContext;
00016 class DataStoreElement;
00017 class AbstractMutex;
00018 
00024 class DataStore
00025 {
00026   public:
00027 
00031     DataStore();
00032 
00037     virtual ~DataStore();
00038 
00044     const std::vector<AbstractField*>& getFieldCollection();
00045 
00051     const std::vector<AbstractField*>& getPersistentFieldsCollection();
00052 
00058     AbstractField* getField(const std::string& name);
00059 
00064     void synchronizeSettingFields(MultiplexingContext& context);
00065 
00070     void synchronizeSettingFields();
00071 
00078     int32_t getMemorySizeToAllocate();
00079 
00087     void mapMemory(char* p, bool initializeFields);
00088 
00089   protected:
00090 
00096     void initializeFromElement(DataStoreElement& element);
00097 
00101     virtual void initialize();
00102 
00108     void restoreFromElement(DataStoreElement& element);
00109 
00114     virtual void registerField(AbstractField* pField);
00115 
00120     virtual int32_t getSizeOfAdditionalFields();
00121 
00126     virtual void mapAdditionalFields(char* p);
00127 
00131     std::vector<AbstractField*> pFieldCol_;
00132 
00136     std::vector<AbstractField*> persistentCol_;
00137 
00142     AbstractMutex* pMutex_;
00143 
00144 
00149     uint32_t numberOfSettingFields_;
00150 
00151 
00152   private:
00153 
00154     template<typename GlobalDeviceType, typename DomainStoreType, typename DevInstType>
00155     friend class HeapFactory;
00156 
00157     template<typename GlobalDeviceType, typename DomainStoreType, typename DevInstType>
00158     friend class DeviceFactoryImp;
00159 
00160     template<typename GlobalDeviceType, typename DomainStoreType, typename DevInstType>
00161     friend class ShmFactory;
00162 
00163     friend class AbstractField;
00164     friend class StoreManager;
00165 
00170     void createMutex(char* pAddrMemory);
00171 
00172 };
00173 
00174 inline const std::vector<AbstractField*>& DataStore::getFieldCollection()
00175 {
00176     return pFieldCol_;
00177 }
00178 
00179 inline const std::vector<AbstractField*>& DataStore::getPersistentFieldsCollection()
00180 {
00181     return persistentCol_;
00182 }
00183 
00184 } // fesa
00185 
00186 #endif // DATA_STORE_H_

Generated on 18 Jan 2013 for Fesa by  doxygen 1.6.1