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

MultiPlatform

  1. /*******************************************************************************
  2. +
  3. +  LEDA-R  3.2.3
  4. +
  5. +  map.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_MAP_H
  12. #define LEDA_MAP_H
  13. //------------------------------------------------------------------------------
  14. // map  
  15. //------------------------------------------------------------------------------ 
  16. #include <LEDA/basic.h> 
  17. #include <LEDA/impl/ch_map.h> 
  18. /*{Manpage {map} {I,E} {Maps}}*/
  19. template<class I, class E>
  20. class map : private ch_map {
  21.  
  22. /*{Mdefinition
  23. An instance $M$ of the parameterized data type name is an injective 
  24. mapping from the data type $I$, called the index type of $M$,
  25. to the set of variables of data type $E$, called the element type of $M$.
  26. $I$ must be a pointer, item, or handle type or the type int. We use
  27. $M(i)$ to denote the variable indexed by $i$.}*/
  28.  E X;
  29.  void copy_inf(GenPtr& x)   const { LEDA_COPY(E,x);  }
  30.  void clear_inf(GenPtr& x)  const { LEDA_CLEAR(E,x); }
  31.  void init_inf(GenPtr& x)   const { x = Copy((E&)X); }
  32.  public:
  33. /*{Mcreation M }*/
  34. map() { }
  35. /*{Mcreate
  36. creates an injective function $a$ from $I$ to the set of unused variables of
  37. type $E$, initializes all variables in the range of $a$ using the 
  38. default constructor of type $E$ and assigns $a$ to $M$.}*/
  39. map(E x,int index_sz, int table_sz) : ch_map(index_sz,table_sz) { X = x; }
  40. map(E x,int index_sz) : ch_map(index_sz) { X = x; }
  41. map(E x) : ch_map(1) { X = x; }
  42. /*{Mcreate
  43. creates an injective function $a$ from $I$ to the set of unused variables of
  44. type $E$, assigns $x$ to all variables in the range of $a$ and initializes $M$
  45. with $a$.}*/
  46.  map(const map<I,E>& M): ch_map((ch_map&)M) { X = M.X; }
  47. ~map() { clear_entries(); }
  48.  
  49. /*{Moperations 2 4.5 }*/
  50.  
  51. E& operator[](I i) { return LEDA_ACCESS(E,access(ID_Number(i))); }
  52. /*{Marrop        returns the variable $M(i)$.}*/
  53.  
  54. E operator[](I i) const { return LEDA_ACCESS(E,access(ID_Number(i))); }
  55.  
  56. bool defined(I i) const { return lookup(ID_Number(i)) != nil; }
  57. /*{Mop      returns true if $i in dom(M)$, false otherwise; here
  58.              $dom(M)$ is the set of all $iin I$ for which $M[i]$ has
  59.              already been executed.}*/
  60.  
  61. };
  62. /*{Mimplementation
  63. Maps are implemented by hashing with chaining and table doubling. 
  64. Access operations $M[i]$ take expected time $O(1)$. }*/
  65.  
  66. #endif