//$----------------------------------------------------------------------------- //@ Initialize an item for an existing pool. //&----------------------------------------------------------------------------- public void PoolListItemInit(int ipoolListID) { // we do this so we dont have to access a indexed List // each time we move or acces an item from a List active_last = active_lastList[ipoolListID]; inactive_last = inactive_lastList[ipoolListID]; }
//$-------------------------------------------------------------------------- //@ Returns free inactive item. //&-------------------------------------------------------------------------- public static EchoLinkedList PoolGetFreeInactive(int ipoolListID) { EchoLinkedList epl = inactive_firstList[ipoolListID].inactive_next; if (epl == null || epl.inactive_next == null) { if (newObjCallbacks[ipoolListID].dynamicAdd) { newObjCallbacks[ipoolListID].CallCreateNewObject(); epl = inactive_firstList[ipoolListID].inactive_next; } else { return(null); } } // remove from inactive list epl.inactive_prev.inactive_next = epl.inactive_next; epl.inactive_next.inactive_prev = epl.inactive_prev; // add to active epl.active_next = epl.active_last; epl.active_prev = epl.active_last.active_prev; epl.active_last.active_prev.active_next = epl; epl.active_last.active_prev = epl; return(epl); }
//$-------------------------------------------------------------------------- //@ Adds item to active list //&-------------------------------------------------------------------------- public static void PoolAddListActive(EchoLinkedList epl) { epl.active_next = epl.active_last; epl.active_prev = epl.active_last.active_prev; epl.active_last.active_prev.active_next = epl; epl.active_last.active_prev = epl; }
//$-------------------------------------------------------------------------- //@ Moves item from inactive to active list //&-------------------------------------------------------------------------- public static void PoolMoveInactive2Active(EchoLinkedList epl) { epl.inactive_prev.inactive_next = epl.inactive_next; epl.inactive_next.inactive_prev = epl.inactive_prev; epl.active_next = epl.active_last; epl.active_prev = epl.active_last.active_prev; epl.active_last.active_prev.active_next = epl; epl.active_last.active_prev = epl; }
//$-------------------------------------------------------------------------- //@ Removes item from active list //&-------------------------------------------------------------------------- public static void PoolRemoveListActive(EchoLinkedList epl) { epl.active_prev.active_next = epl.active_next; epl.active_next.active_prev = epl.active_prev; }