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_RandomAllocationSegment_Included
00025 #define Fennel_RandomAllocationSegment_Included
00026
00027 #include "fennel/segment/RandomAllocationSegmentBase.h"
00028
00029 FENNEL_BEGIN_NAMESPACE
00030
00031 struct ExtentAllocationNode;
00032
00038 class FENNEL_SEGMENT_EXPORT RandomAllocationSegment
00039 : public RandomAllocationSegmentBase
00040 {
00041
00042 virtual PageId getSegAllocPageIdForWrite(PageId origSegAllocPageId);
00043 virtual void undoSegAllocPageWrite(PageId segAllocPageId);
00044 virtual PageId getExtAllocPageIdForWrite(ExtentNum extentNum);
00045 virtual PageId allocateFromExtent(ExtentNum extentNum, PageOwnerId ownerId);
00046 virtual void formatPageExtents(
00047 SegmentAllocationNode &segAllocNode,
00048 ExtentNum &extentNum);
00049 virtual PageId allocateFromNewExtent(
00050 ExtentNum extentNum,
00051 PageOwnerId ownerId);
00052 virtual void freePageEntry(ExtentNum extentNum, BlockNum iPageInExtent);
00053 virtual PageOwnerId getPageOwnerId(PageId pageId, bool thisSegment);
00054 virtual PageId getSegAllocPageIdForRead(
00055 PageId origSegAllocPageId,
00056 SharedSegment &allocNodeSegment);
00057 virtual PageId getExtAllocPageIdForRead(
00058 ExtentNum extentNum,
00059 SharedSegment &allocNodeSegment);
00060 virtual void getPageEntryCopy(
00061 PageId pageId,
00062 PageEntry &pageEntryCopy,
00063 bool isAllocated,
00064 bool thisSegment);
00065
00066 public:
00067 explicit RandomAllocationSegment(SharedSegment delegateSegment);
00068
00069
00070 virtual PageId allocatePageId(PageOwnerId ownerId);
00071 virtual PageId getPageSuccessor(PageId pageId);
00072 virtual void setPageSuccessor(PageId pageId, PageId successorId);
00073 };
00074
00075 FENNEL_END_NAMESPACE
00076
00077 #endif
00078
00079