LinearDeviceSegment.h

Go to the documentation of this file.
00001 /*
00002 // $Id: //open/dev/fennel/segment/LinearDeviceSegment.h#10 $
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_LinearDeviceSegment_Included
00025 #define Fennel_LinearDeviceSegment_Included
00026 
00027 #include "fennel/segment/Segment.h"
00028 #include <vector>
00029 
00030 FENNEL_BEGIN_NAMESPACE
00031 
00036 struct FENNEL_SEGMENT_EXPORT LinearDeviceSegmentParams
00037 {
00042     BlockId firstBlockId;
00043 
00048     BlockNum nPagesMin;
00049 
00055     BlockNum nPagesAllocated;
00056 
00061     BlockNum nPagesIncrement;
00062 
00067     BlockNum nPagesMax;
00068 
00069     explicit LinearDeviceSegmentParams();
00070 };
00071 
00085 class FENNEL_SEGMENT_EXPORT LinearDeviceSegment
00086     : public Segment
00087 {
00088     friend class SegmentFactory;
00089 
00090     SharedRandomAccessDevice pDevice;
00091     BlockId firstBlockId;
00092     BlockNum nPagesMax,nPagesAllocated,nPagesIncrement,nPagesExtended;
00093 
00094     explicit LinearDeviceSegment(
00095         SharedCache cache,
00096         LinearDeviceSegmentParams const &);
00097 
00098     BlockNum getAvailableDevicePages() const;
00099 
00100 public:
00101     virtual ~LinearDeviceSegment();
00102 
00103     DeviceId getDeviceId() const;
00104 
00105     // implementation of Segment interface
00106 
00107     virtual BlockId translatePageId(PageId);
00108     virtual PageId translateBlockId(BlockId);
00109     virtual PageId allocatePageId(PageOwnerId ownerId);
00110     virtual void deallocatePageRange(PageId startPageId,PageId endPageId);
00111     virtual bool isPageIdAllocated(PageId pageId);
00112     virtual BlockNum getAllocatedSizeInPages();
00113     virtual BlockNum getNumPagesOccupiedHighWater();
00114     virtual BlockNum getNumPagesExtended();
00115     virtual PageId getPageSuccessor(PageId pageId);
00116     virtual void setPageSuccessor(PageId pageId, PageId successorId);
00117     virtual AllocationOrder getAllocationOrder() const;
00118     virtual bool ensureAllocatedSize(BlockNum nPages);
00119     virtual void delegatedCheckpoint(
00120         Segment &delegatingSegment,
00121         CheckpointType checkpointType);
00122 };
00123 
00124 FENNEL_END_NAMESPACE
00125 
00126 #endif
00127 
00128 // End LinearDeviceSegment.h

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