//subsetHolder.h #define subsetsPerHolder 16 #define aFewSubsets 4 #define aLotOfSubsets 12 class subsetHolder { friend class RankedSet; private: RankedSet * partOf; int levelNr; int nrAtThisLevel; long grandNrSpanned; RAType grandMinRA; memberType mIDofGrandMin; RAType grandMaxRA; memberType mIDofGrandMax; int firstInUseNr; int lastInUseNr; int firstFreeNr; //Attributes of subsetRep, implemented as arrays for efficiency of inner loop //Old definitions, in version with memory leak. /* RAType minRA[subsetsPerHolder]; memberType mIDofMin[subsetsPerHolder]; RAType maxRA[subsetsPerHolder]; memberType mIDofMax[subsetsPerHolder]; int nextRepNr[subsetsPerHolder]; int priorRepNr[subsetsPerHolder]; int nrAtLevelRepd[subsetsPerHolder]; long nrSpanned[subsetsPerHolder]; union { setMemberHolder *smhPtr; subsetHolder *sshPtr; }repPtr[subsetsPerHolder]; */ RAType * minRA; memberType * mIDofMin; RAType * maxRA; memberType * mIDofMax; int * nextRepNr; int * priorRepNr; int * nrAtLevelRepd; long * nrSpanned; union SMHorSSH { setMemberHolder *smhPtr; subsetHolder *sshPtr; } * repPtr; subsetHolder(int levelNumber=0, RankedSet * rs=NULL); ~subsetHolder(); fileReturnCode fileMemberIntoSubsetHolder(RAType RA,memberType mID); RAandMID removeFOrLMemberFromSubsetHolder(insertLocType ilt); removeReturnCode removeThisMemberFromSubsetHolder(RAType RA,memberType mID); void copySmhToRep(int repNr, setMemberHolder * smhP); void copySshToRep(int repNr, subsetHolder * sshP); setMemberHolder * dropSmhFromRep(int slotNr); subsetHolder * dropSshFromRep(int slotNr); fileReturnCode fileMemberIntoSmhInUse(int slotNr, RAType RA, memberType memberID); fileReturnCode fileMemberIntoLowerSshInUse(int slotNr, RAType RA, memberType memberID); fileReturnCode fileSmhFirstOrLastInSsh(setMemberHolder * smhP, insertLocType ilt); fileReturnCode fileSmhAfterArg2Slot(setMemberHolder * smhP, int slotNr); fileReturnCode fileLowerSshFirstOrLastInSsh(subsetHolder * sshP, insertLocType ilt); fileReturnCode fileSshAfterArg2Slot(subsetHolder * sshP, int slotNr); RAandMID removeFOrLMemberFromSmhInUse(int slotNr, insertLocType ilt); RAandMID removeFOrLMemberFromSshInUse(int slotNr, insertLocType ilt); removeReturnCode removeThisMemberFromSmhInUse(int slotNr, RAType RA, memberType memberID); removeReturnCode removeThisMemberFromSshInUse(int slotNr, RAType RA, memberType memberID); setMemberHolder * removeFOrLSmhFromSsh(insertLocType ilt); setMemberHolder * removeFOrLSmhFromSshInUse(int slotNr, insertLocType ilt); setMemberHolder * removeThisSmhFromSsh(int slotNr); // subsetHolder * removeThisLowerSshFromSsh(int slotNr); //Never called subsetHolder * removeFOrL_LowerSshFromSsh(insertLocType ilt); subsetHolder * removeFOrL_LowerSshFromSshInUse(int slotNr, insertLocType ilt); inline void fileSlotNrFirstIntoInUse(int i); inline void fileSlotNrLastIntoInUse(int i); inline void fileSlotNr1AfterSlotNr2InUse(int newNr, int oldNr); inline int removeFirstSlotNrFromInUse(); inline int removeLastSlotNrFromInUse(); inline void removeThisSlotNrFromInUse(int slotNr); inline int removeFreeSlotNr(); inline void fileFreeSlotNr(int slotNr); RAandMID findFirstOrLast(Cursor * cuPtr, insertLocType ilt); RAandMID findAsInstructed(Cursor * cuPtr, findInstruction fI); public: static int Ecount; };