ScratchSegment.h

Go to the documentation of this file.
00001 /*
00002 // $Id: //open/dev/fennel/segment/ScratchSegment.h#14 $
00003 // Fennel is a library of data storage and processing components.
00004 // Copyright (C) 2005-2009 The Eigenbase Project
00005 // Copyright (C) 2005-2009 SQLstream, Inc.
00006 // Copyright (C) 2005-2009 LucidEra, Inc.
00007 // Portions Copyright (C) 1999-2009 John V. Sichi
00008 //
00009 // This program is free software; you can redistribute it and/or modify it
00010 // under the terms of the GNU General Public License as published by the Free
00011 // Software Foundation; either version 2 of the License, or (at your option)
00012 // any later version approved by The Eigenbase Project.
00013 //
00014 // This program is distributed in the hope that it will be useful,
00015 // but WITHOUT ANY WARRANTY; without even the implied warranty of
00016 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00017 // GNU General Public License for more details.
00018 //
00019 // You should have received a copy of the GNU General Public License
00020 // along with this program; if not, write to the Free Software
00021 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
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 <vector>
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     // implement ClosableObject
00068     virtual void closeImpl();
00069 
00070     void clearPages();
00071 
00072 public:
00073 
00074     // implementation of Segment interface
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     // implementation of CacheAccessor interface
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 // End ScratchSegment.h

Generated on Mon Jun 22 04:00:20 2009 for Fennel by  doxygen 1.5.1