buckets.h 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. /*
  2. * CDE - Common Desktop Environment
  3. *
  4. * Copyright (c) 1993-2012, The Open Group. All rights reserved.
  5. *
  6. * These libraries and programs are free software; you can
  7. * redistribute them and/or modify them under the terms of the GNU
  8. * Lesser General Public License as published by the Free Software
  9. * Foundation; either version 2 of the License, or (at your option)
  10. * any later version.
  11. *
  12. * These libraries and programs are distributed in the hope that
  13. * they will be useful, but WITHOUT ANY WARRANTY; without even the
  14. * implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
  15. * PURPOSE. See the GNU Lesser General Public License for more
  16. * details.
  17. *
  18. * You should have received a copy of the GNU Lesser General Public
  19. * License along with these libraries and programs; if not, write
  20. * to the Free Software Foundation, Inc., 51 Franklin Street, Fifth
  21. * Floor, Boston, MA 02110-1301 USA
  22. */
  23. /*
  24. * $XConsortium: buckets.h /main/3 1996/06/11 17:19:58 cde-hal $
  25. *
  26. * Copyright (c) 1993 HAL Computer Systems International, Ltd.
  27. * All rights reserved. Unpublished -- rights reserved under
  28. * the Copyright Laws of the United States. USE OF A COPYRIGHT
  29. * NOTICE IS PRECAUTIONARY ONLY AND DOES NOT IMPLY PUBLICATION
  30. * OR DISCLOSURE.
  31. *
  32. * THIS SOFTWARE CONTAINS CONFIDENTIAL INFORMATION AND TRADE
  33. * SECRETS OF HAL COMPUTER SYSTEMS INTERNATIONAL, LTD. USE,
  34. * DISCLOSURE, OR REPRODUCTION IS PROHIBITED WITHOUT THE
  35. * PRIOR EXPRESS WRITTEN PERMISSION OF HAL COMPUTER SYSTEMS
  36. * INTERNATIONAL, LTD.
  37. *
  38. * RESTRICTED RIGHTS LEGEND
  39. * Use, duplication, or disclosure by the Government is subject
  40. * to the restrictions as set forth in subparagraph (c)(l)(ii)
  41. * of the Rights in Technical Data and Computer Software clause
  42. * at DFARS 252.227-7013.
  43. *
  44. * HAL COMPUTER SYSTEMS INTERNATIONAL, LTD.
  45. * 1315 Dell Avenue
  46. * Campbell, CA 95008
  47. *
  48. */
  49. #ifndef _buckets_h
  50. #define _buckets_h 1
  51. #include <stdio.h>
  52. #include "utility/atoi_pearson.h"
  53. #include "dstr/slist_void_ptr_cell.h"
  54. #include "hmphf/params.h"
  55. #include "hmphf/pattern.h"
  56. class bucket
  57. {
  58. public:
  59. bucket(char*, int orig_pos = 0, Boolean copy = true);
  60. ~bucket();
  61. int add_key(char*, Boolean copy = true);
  62. short no_keys() { return v_no_keys; };
  63. int g_value() { return v_g_value; };
  64. int control_bit() { return v_control_bit; };
  65. int orig_pos() { return v_orig_pos; };
  66. void set_count(int i) { v_count = i; };
  67. void set_control_bit(int cb) { v_control_bit = cb; };
  68. void set_g_value(int gv) { v_g_value = gv; };
  69. friend ostream& operator<<(ostream&, bucket&);
  70. protected:
  71. short v_no_keys;
  72. int v_count;
  73. int v_control_bit;
  74. int v_g_value;
  75. int v_orig_pos;
  76. slist_void_ptr_cell* key_ptr;
  77. friend class buckets;
  78. friend class sorter;
  79. };
  80. typedef bucket* bucketPtr;
  81. class buckets
  82. {
  83. public:
  84. //buckets(char* key_file, params& params);
  85. buckets(char** keys, params& params);
  86. ~buckets();
  87. void set_control_bit(int cb);
  88. int get_pattern(int i, int_pattern&, params&);
  89. int use_current_params(int i, int_pattern&, params& pms,
  90. Boolean use_g_value = false);
  91. int no_buckets() { return v_no_buckets; };
  92. int max_bucket_sz() { return v_max_bucket_sz; };
  93. bucket* operator[](int i) { return v_bucket_array[i]; };
  94. friend ostream& operator<<(ostream&, buckets&);
  95. protected:
  96. void sort_by_size();
  97. int bucket_num(char* k, params& pms);
  98. inline int hash_value(char* k, int offset, int range)
  99. {
  100. return h_convertor.atoi(k, strlen(k), offset+1, range);
  101. };
  102. protected:
  103. bucket** v_bucket_array;
  104. int v_no_buckets;
  105. int v_max_bucket_sz;
  106. pm_random rnd;
  107. atoi_pearson b_convertor;
  108. atoi_pearson h_convertor;
  109. };
  110. #endif