dph_array.h
上传用户:gzelex
上传日期:2007-01-07
资源大小:707k
文件大小:2k
开发平台:

MultiPlatform

  1. /*******************************************************************************
  2. +
  3. +  LEDA-R  3.2.3
  4. +
  5. +  dph_array.h
  6. +
  7. +  Copyright (c) 1995  by  Max-Planck-Institut fuer Informatik
  8. +  Im Stadtwald, 66123 Saarbruecken, Germany     
  9. +  All rights reserved.
  10. *******************************************************************************/
  11. #ifndef LEDA_DPHARRAY_H
  12. #define LEDA_DPHARRAY_H
  13. //------------------------------------------------------------------------------
  14. // dph_array  
  15. //------------------------------------------------------------------------------ 
  16. #include <LEDA/basic.h> 
  17. #include <LEDA/impl/slist.h> 
  18. #include <LEDA/impl/dp_hash.h> 
  19. template<class itype, class etype>
  20. class dph_array : public dp_hash {
  21. void clear_key(GenPtr& x)   const { LEDA_CLEAR(itype,x); }
  22. void clear_inf(GenPtr& x)   const { LEDA_CLEAR(etype,x); }
  23. void copy_key(GenPtr& x)    const { LEDA_COPY(itype,x);  }
  24. void copy_inf(GenPtr& x)    const { LEDA_COPY(etype,x);  }
  25. int  int_type() const { return 1; }
  26. etype init;
  27. SLIST def_list;
  28. slist_item iterator;
  29. public:
  30. etype& operator[](itype y) 
  31. { stp i=lookup(Convert(y));
  32.   if (i==nil) 
  33.   { GenPtr p = Convert(init);
  34.     i=insert(Convert(y),p);
  35.     def_list.append(Convert(y));  
  36.    }
  37.   return LEDA_ACCESS(etype,info(i)); 
  38. }
  39. etype  operator[](itype y) const
  40. { stp i=lookup(Convert(y));
  41.   if (i==nil) return init;
  42.   else return LEDA_ACCESS(etype,info(i)); 
  43.  }
  44. bool defined(itype y) const { return (lookup(Convert(y)) != nil); }
  45. slist_item first_item() const { return def_list.first(); }
  46. void loop_to_succ(GenPtr& x) const 
  47. { x = def_list.succ(slist_item(x)); }
  48. GenPtr forall_defined_test(GenPtr it, itype& x) const
  49. { if (it) x = LEDA_ACCESS(itype,def_list[slist_item(it)]);
  50.   return it;
  51. }
  52.  dph_array() { }
  53.  dph_array(int n,itype* I,etype* E): dp_hash(n,(GenPtr*)I,(GenPtr*)E) { }
  54.  dph_array(etype i) { init=i; }
  55.  dph_array(const dph_array<itype,etype>& A): dp_hash((dp_hash&)A) { init = A.init; }
  56. virtual ~dph_array() { def_list.clear(); }
  57. };
  58. #endif