// prefill the protected void fillReserve(int fillCount) { Debug.Assert(fillCount > 0); // create the Data Node of the Derieved class and add it to reserve list at front for (int i = 0; i < fillCount; i++) { MLink dataNode = this.createConcreteNode(); Debug.Assert(dataNode != null); MLink.addToFront(dataNode, ref this.reserveList); mNumReserveNodes++; mTotalNodes++; } }
// remove a node from active and add it to reserve protected void genericRemove(MLink dataNode) { Debug.Assert(dataNode != null); // remove from active MLink.removeNode(dataNode, ref this.activeList); //wash the data node dataNode.wash(); //add it to reserve list MLink.addToFront(dataNode, ref this.reserveList); mNumActiveNodes--; mNumReserveNodes++; }
// Removes a node from reserve and add it to active protected MLink genericAdd() { //Check if the reserve list is empty, If yes, refill if (reserveList == null) { fillReserve(deltaRefillCount); } // remove from front of reserve list MLink dNode = MLink.removeFromFront(ref reserveList); Debug.Assert(dNode != null); // add it to the front of active list MLink.addToFront(dNode, ref activeList); mNumReserveNodes--; mNumActiveNodes++; return(dNode); }