00001 #ifndef MEMORY_BACKING_STORE
00002 #define MEMORY_BACKING_STORE
00003
00004 #include "IMemoryBackingStore.h"
00005 #include "MemoryTupleData.h"
00006 #include "MemoryPersistentTuple.h"
00007
00008 #include <map>
00009 #include <string>
00010 #include <vector>
00011
00012 namespace AIDA {
00013 namespace Dev {
00014 class IDevTupleFactory;
00015 }
00016 }
00017
00018 namespace Anaphe {
00019 namespace AIDA_MemoryStore {
00020
00021 class MemoryBackingStore : virtual public IMemoryBackingStore
00022 {
00023 public:
00024 MemoryBackingStore( AIDA::Dev::IDevTupleFactory& factory );
00025 ~MemoryBackingStore();
00026
00027
00028 bool writeTupleHeader( AIDA::Dev::ITupleHeader& header );
00029 bool readTupleHeader( AIDA::Dev::ITupleHeader& header );
00030 bool bindVariable( AIDA::Dev::ITupleHeader& header, int variableIndex );
00031 void* variableAddress( AIDA::Dev::ITupleHeader& header, int variableIndex );
00032 const void* variableAddress( const AIDA::Dev::ITupleHeader& header, int variableIndex ) const;
00033 bool clearBindings( const AIDA::Dev::ITupleHeader& header );
00034 bool writeTupleRow( AIDA::Dev::ITupleHeader& header );
00035 bool readTupleRow( AIDA::Dev::ITupleHeader& header );
00036 bool resetTuple( AIDA::Dev::ITupleHeader& header );
00037
00038
00039 bool removePersistentTuple( const std::string& path );
00040 bool setTupleData( const std::string& path, MemoryTupleData* data );
00041 IMemoryPersistentTuple* findPersistentTuple( const std::string& path );
00042
00043 private:
00044 AIDA::Dev::IDevTupleFactory& m_factory;
00045 std::map< std::string, MemoryTupleData* > m_tupleData;
00046 std::map< std::string, MemoryPersistentTuple > m_tuples;
00047 };
00048
00049 }
00050 }
00051 #endif