pike.git / lib / modules / ADT.pmod / Heap.pike

version» Context lines:

pike.git/lib/modules/ADT.pmod/Heap.pike:1:   #pike __REAL_VERSION__      #define SWAP(X,Y) do{ mixed tmp=values[X]; values[X]=values[Y]; values[Y]=tmp; }while(0)      static private array values=allocate(10);   static private int num_values;      #ifdef DEBUG   void verify_heap()   { -  int e; -  for(e=1;e<num_values;e++) -  { +  for(int e=1; e<num_values; e++)    if(values[(e-1)/2] > values[e]) -  { -  write(sprintf("Error in HEAP (%d, %d) num_values=%d\n", -  (e-1)/2, e, num_values)); -  exit(1); +  error("Error in HEAP (%d, %d) num_values=%d\n", +  (e-1)/2, e, num_values);   } -  } - } +    #else   #define verify_heap()   #endif      static void adjust_down(int elem)   {    int steps;    while(1)    {    int child=elem*2+1;
pike.git/lib/modules/ADT.pmod/Heap.pike:88:   //! Document this function   void adjust(mixed value)   {    int pos=search(values, value);    if(pos>=0)    if(!adjust_up(pos))    adjust_down(pos);    verify_heap();   }    - //! @fixme - //! Document this function - mixed top() + //! Removes and returns the item on top of the heap, + //! which also is the smallest value in the heap. + mixed pop()   {    mixed ret;    if(!num_values)    error("Heap underflow!\n");       ret=values[0];    if(sizeof(values) > 1)    {    num_values--;    values[0]=values[num_values];    values[num_values]=0;    adjust_down(0);       if(num_values * 3 + 10 < sizeof(values))    values=values[..num_values+10];    }    return ret;    verify_heap();   }    - //! @fixme - //! Document this function - int size() { return num_values; } + //! Returns the number of elements in the heap. + int _sizeof() { return num_values; }    -  + // compat + mixed top() { return pop(); } + int size() { return _sizeof(); }