Fennel: /home/pub/open/dev/fennel/segment/ScratchSegment.h Source File (original) (raw)

00001 00002 00003 00004 00005 00006 00007 00008 00009 00010 00011 00012 00013 00014 00015 00016 00017 00018 00019 00020 00021 00022 00023 00024 #ifndef Fennel_ScratchSegment_Included 00025 #define Fennel_ScratchSegment_Included 00026 00027 #include "fennel/segment/Segment.h" 00028 #include "fennel/cache/CacheAccessor.h" 00029 #include "fennel/synch/SynchObj.h" 00030 #include 00031 00032 FENNEL_BEGIN_NAMESPACE 00033 00040 class FENNEL_SEGMENT_EXPORT ScratchSegment 00041 : public Segment, public CacheAccessor 00042 { 00043 friend class SegmentFactory; 00044 00045 typedef std::vector<CachePage *> PageList; 00046 typedef PageList::iterator PageListIter; 00047 00051 BlockNum nPagesMax; 00052 00056 PageList pages; 00057 00061 StrictMutex mutex; 00062 00063 explicit ScratchSegment( 00064 SharedCache pCache, 00065 uint nPagesMax); 00066 00067
00068 virtual void closeImpl(); 00069 00070 void clearPages(); 00071 00072 public: 00073 00074
00075 virtual BlockId translatePageId(PageId); 00076 virtual PageId translateBlockId(BlockId); 00077 virtual PageId allocatePageId(PageOwnerId ownerId); 00078 virtual void deallocatePageRange(PageId startPageId,PageId endPageId); 00079 virtual bool isPageIdAllocated(PageId pageId); 00080 virtual BlockNum getAllocatedSizeInPages(); 00081 virtual BlockNum getNumPagesOccupiedHighWater(); 00082 virtual BlockNum getNumPagesExtended(); 00083 virtual PageId getPageSuccessor(PageId pageId); 00084 virtual void setPageSuccessor(PageId pageId, PageId successorId); 00085 virtual AllocationOrder getAllocationOrder() const; 00086 00087
00088 virtual CachePage *lockPage( 00089 BlockId blockId, 00090 LockMode lockMode, 00091 bool readIfUnmapped = true, 00092 MappedPageListener *pMappedPageListener = NULL, 00093 TxnId txnId = IMPLICIT_TXN_ID); 00094 virtual void unlockPage( 00095 CachePage &page,LockMode lockMode,TxnId txnId = IMPLICIT_TXN_ID); 00096 virtual void discardPage(BlockId blockId); 00097 virtual bool prefetchPage( 00098 BlockId blockId, 00099 MappedPageListener *pMappedPageListener = NULL); 00100 virtual void prefetchBatch( 00101 BlockId blockId,uint nPages, 00102 MappedPageListener *pMappedPageListener = NULL); 00103 virtual void flushPage(CachePage &page,bool async); 00104 virtual void nicePage(CachePage &page); 00105 virtual SharedCache getCache(); 00106 virtual uint getMaxLockedPages(); 00107 virtual void setMaxLockedPages(uint nPages); 00108 virtual void setTxnId(TxnId txnId); 00109 virtual TxnId getTxnId() const; 00110 virtual void getPrefetchParams( 00111 uint &nPagesPerBatch, 00112 uint &nBatchPrefetches); 00113 }; 00114 00115 FENNEL_END_NAMESPACE 00116 00117 #endif 00118 00119