#include "pool.h"

#define NEWLIST(l) ((l)->mlh_Head = (struct MinNode *)&(l)->mlh_Tail, \
                    (l)->mlh_Tail = NULL, \
                    (l)->mlh_TailPred = (struct MinNode *)&(l)->mlh_Head)

APTR LibCreatePool(ULONG requirements, ULONG puddleSize, ULONG threshSize)
{
  if (SysBase->LibNode.lib_Version>=39)
    return (CreatePool(requirements,puddleSize,threshSize));
  else {

    POOL *pool=NULL;

    if (threshSize<=puddleSize) {
      puddleSize+=7;
      if ((pool=(POOL *)AllocMem(sizeof(POOL),MEMF_ANY))!=NULL) {
        NEWLIST(&pool->PuddleList);
        pool->MemoryFlags=requirements;
        pool->PuddleSize=puddleSize&~7;
        pool->ThreshSize=threshSize;
      }
    }
    return pool;
  }
}

VOID LibDeletePool(POOL *poolHeader)
{
  if (SysBase->LibNode.lib_Version>=39)
    DeletePool(poolHeader);
  else {

    if (poolHeader!=NULL) {

      ULONG *pool,size;

      while((pool=(ULONG *)RemHead((struct List *)&poolHeader->PuddleList))!=NULL) {
        size=*--pool; FreeMem(pool,size);
      }
      FreeMem(poolHeader,sizeof(POOL));
    }
  }
}
