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

MultiPlatform

  1. /*******************************************************************************
  2. +
  3. +  LEDA-R  3.2.3
  4. +
  5. +  array2.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_ARRAY2_H
  12. #define LEDA_ARRAY2_H
  13. //--------------------------------------------------------------------------
  14. // 2 dimensional arrays                                                   
  15. //--------------------------------------------------------------------------
  16. #include <LEDA/array.h>
  17. /*{Manpage {array2} {E} {Two Dimensional Arrays} }*/
  18. template<class E> 
  19. class array2 : private gen_array2 {
  20. /*{Mdefinition
  21. An instance $A$ of the parameterized data type name is a mapping from a 
  22. set of pairs $I = [a..b] times [c..d]$, called the index set of $A$, to the 
  23. set of variables of data type $E$, called the element type of $A$, for two 
  24. fixed intervals of integers $[a..b]$ and $[c..d]$.  $A(i,j)$ is called the 
  25. element at position $(i,j)$.
  26. }*/
  27. void clear_entry(GenPtr& x) const { LEDA_CLEAR(E,x);  }
  28. void copy_entry(GenPtr& x)  const { LEDA_COPY(E,x);   }
  29. void init_entry(GenPtr& x)  const { LEDA_CREATE(E,x); }
  30. public:
  31. /*{Mcreation  A }*/
  32. array2(int a, int b, int c, int d) :gen_array2(a,b,c,d) { init(a,b,c,d);}
  33. /*{Mcreate      creates an instance var of type name with index set 
  34.                  $[a..b]times [c..d]$.  }*/
  35. array2(int n, int m)             :gen_array2(n,m)     { init(0,n-1,0,m-1);}
  36. /*{Mcreate      creates an instance var of type name with index set 
  37.                  $[0..n-1]times [0..m-1]$.  }*/
  38. ~array2() { clear(); }
  39. /*{Moperations 1.5 5 }*/
  40. E& operator()(int i, int j)  { return LEDA_ACCESS(E,row(i)->entry(j)); }
  41. /*{Mfunop      returns $A(i,j)$.\
  42.          precond $ale ile b$ and $cle jle d$.}*/
  43. /*
  44. E  operator()(int i, int j) const { return LEDA_ACCESS(E,row(i)->entry(j)); }
  45. */
  46. int low1() const { return gen_array2::low1();}
  47. /*{Mop         returns $a$. }*/
  48. int high1() const {return gen_array2::high1();}
  49. /*{Mop         returns $b$. }*/
  50. int low2() const {return gen_array2::low2();}
  51. /*{Mop         returns $c$. }*/
  52. int high2() const {return gen_array2::high2();}
  53. /*{Mop         returns $d$. }*/
  54. };
  55. /*{Mimplementation
  56. Two dimensional arrays are implemented by CC vectors. All operations
  57. take time $O(1)$, the space requirement is $O(|I|* sizeof(E))$.
  58. }*/
  59. #endif