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

version» Context lines:

pike.git/lib/modules/ADT.pmod/Stack.pike:1:   #pike __REAL_VERSION__    - // $Id$ -  +    //! This class implements a simple stack. Instead of adding and removing   //! elements to an array, and thus making it vary in size for every push   //! and pop operation, this stack tries to keep the stack size constant.   //! If however the stack risks to overflow, it will allocate double its   //! current size, i.e. pushing an element on an full 32 slot stack will   //! result in a 64 slot stack with 33 elements.      int ptr;   array arr;   
pike.git/lib/modules/ADT.pmod/Stack.pike:113:   int _sizeof() {    return ptr;   }      //! @[values] on a stack returns all the entries in   //! the stack, in order.   array _values() {    return arr[..ptr-1];   }    + //! Return the stack-depth to @[item]. + //! + //! This function makes it possible to use + //! eg @[search()] and @[has_value()] on the stack. + protected int _search(mixed item) + { +  int i; +  for (i = ptr; i--;) { +  if (arr[i] == item) return ptr-(i+1); +  } +  return -1; + } +    //! A stack added with another stack yields a third   //! a third stack will all the stack elements from   //! the two first stacks.   this_program `+(this_program s) {    array elem = arr[..ptr-1]+values(s);    this_program ns = this_program(1);    ns->set_stack(elem);    return ns;   }    - mixed cast(string to) { -  switch(to) { -  case "array": + protected mixed cast(string to) + { +  if( to=="array" )    return _values(); -  default: -  error("Cannot cast to %s.\n", to); +  return UNDEFINED;   } - } +       string _sprintf(int t) {    return t=='O' && sprintf("%O%O", this_program, _values());   }