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

MultiPlatform

  1. /*******************************************************************************
  2. +
  3. +  LEDA-R  3.2.3
  4. +
  5. +  hash.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_HASH_H
  12. #define LEDA_HASH_H
  13. //------------------------------------------------------------------------------
  14. // hash dictionary (based on hashing with chaining)
  15. //------------------------------------------------------------------------------
  16. #include <LEDA/impl/ch_hash.h>
  17. typedef ch_hash_item hash_item;
  18. template<class ktype, class itype> 
  19. class hash : public ch_hash {
  20. int (*hash_ptr)(const ktype&);
  21. int  int_type()              const { return LEDA_INT_TYPE(ktype); }
  22. int  cmp(GenPtr x, GenPtr y) const { return LEDA_COMPARE(ktype,x,y); }
  23. int  hash_fct(GenPtr x)   const 
  24. { return (hash_ptr==0) ? LEDA_HASH(ktype,x):(*hash_ptr)(LEDA_ACCESS(ktype,x)); }
  25. void clear_key(GenPtr& x) const { LEDA_CLEAR(ktype,x); }
  26. void clear_inf(GenPtr& x) const { LEDA_CLEAR(itype,x); }
  27. void copy_key(GenPtr& x)  const { LEDA_COPY(ktype,x); }
  28. void copy_inf(GenPtr& x)  const { LEDA_COPY(itype,x); }
  29. void print_key(GenPtr x)  const { LEDA_PRINT(ktype,x,cout); }
  30. void print_inf(GenPtr x)  const { LEDA_PRINT(itype,x,cout); }
  31. public:
  32. hash_item lookup(ktype y)  const { return ch_hash::lookup(Convert(y)); }
  33. int       defined(ktype x) const { return (lookup(x)) ? false : true; }
  34. void      change_inf(hash_item it, itype i)
  35.                                { ch_hash::change_inf(it,Convert(i)); }
  36. hash_item insert(ktype y,itype x)
  37.                                { return ch_hash::insert(Convert(y),Convert(x));}
  38. void   del(ktype y)            { ch_hash::del(Convert(y)); } 
  39. void   del_item(hash_item it)    { del(key(it)); } 
  40. ktype  key(hash_item it)   const { return LEDA_ACCESS(ktype,ch_hash::key(it)); }
  41. itype  inf(hash_item it)   const { return LEDA_ACCESS(itype,ch_hash::inf(it)); }
  42. hash()                       { hash_ptr=0; }
  43. hash(int (*f)(const ktype&)) { hash_ptr=f; }
  44. hash(int s)  : ch_hash(s) { hash_ptr=0;}
  45. hash(int s, int (*f)(const ktype&)) : ch_hash(s) { hash_ptr=f;}
  46. ~hash() { clear(); }
  47. } ;
  48. #endif