hashtable 0.1.1 → 0.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 84378d52b624dfc1274b36c694b9651af59bbd941ee2cfae71592c48b69b82d8
4
- data.tar.gz: cf4de36cd314ecc33538e14db09e768fecbcb54eb53546e545cbd40e96e7c8c3
3
+ metadata.gz: a5852fb24336d190f81a89d83eb6b23184f37972507641ac2e0b78c323a3ef65
4
+ data.tar.gz: a809dbacc1536fd55d18e30d677aba9fdbe331cdda5f2612942a394fa7bad5f7
5
5
  SHA512:
6
- metadata.gz: 85562898eb56576dd0f846eea330b66e561acee762071bf08a60ab4e0f683f510b8744b86c40cb61c6401c357fbef9f096e015f1f6aa8143bf040adc24a77dfa
7
- data.tar.gz: c58e25d6e72d7b5c46de97db5be5d4592bdd50b2a0ac54e921dc79a20e5d0fd156cf46df6e0c68ae4f73a1451feb85e1ab15ff30686adc390a0d7585c8da67e6
6
+ metadata.gz: 044d20bcefe08d1c84d7a7fec897fc4d2f892b5a29c28e8f373ddb804039fc0679f9bb1b52992415e3c9cf8f0d62adf39ba42bd4deee7181422062b97916e01f
7
+ data.tar.gz: 47d1688da243dd2b5377f880bee64e7b91709b7b1efd0ff252d8a85849f5b5bfe155f68ffe780e8a87689e96e379849001c4757727a977d4b809faecb6cdd700
@@ -88,7 +88,7 @@ module HashTable
88
88
  # @param [object] key
89
89
  # @param [object] traits
90
90
  def adds(keys, traits)
91
- (keys || []).map { |key| set_as_interal(key, traits) }
91
+ keys.map { |key| set_as_interal(key, traits) }
92
92
  end
93
93
 
94
94
  protected
@@ -135,6 +135,8 @@ module HashTable
135
135
 
136
136
  bucket[1] = value unless value.nil?
137
137
  end
138
+ return index if traits.respond_to?(:lookup_key_and_value)
139
+
138
140
  bucket[0]
139
141
  end
140
142
 
@@ -54,7 +54,7 @@ module HashTable
54
54
  end
55
55
 
56
56
  def reset(index)
57
- bits[index / BITWORD_SIZE] &= ~(1 << (index % BITWORD_SIZE))
57
+ @bits[index / BITWORD_SIZE] &= ~(1 << (index % BITWORD_SIZE))
58
58
  end
59
59
 
60
60
  # v = @bits[i]
@@ -274,7 +274,7 @@ module HashTable
274
274
  @current_index = if element.index > index
275
275
  @elements[0..element_i].rindex { |e| e.index <= index } || 0
276
276
  else
277
- @elements[element_i..-1].select { |e| e.index < index }.length + element_i
277
+ @elements[element_i..].select { |e| e.index < index }.length + element_i
278
278
  end
279
279
  end
280
280
  end
@@ -0,0 +1,84 @@
1
+ # frozen_string_literal: true
2
+
3
+ # module HashTable
4
+ module HashTable
5
+ class Traits
6
+ def hash_lookup_key(key)
7
+ key
8
+ end
9
+
10
+ def lookup_key_to_storage_key(key)
11
+ key
12
+ end
13
+
14
+ def storage_key_to_lookup_key(key)
15
+ key
16
+ end
17
+ end
18
+
19
+ class StringTraits
20
+ attr_reader :string_table, :string_index
21
+
22
+ def initialize
23
+ @string_table = "\0"
24
+ @string_index = 1
25
+ end
26
+
27
+ def hash_lookup_key(key)
28
+ result = 0
29
+ key.each_byte { |byte| result += byte * 13 }
30
+ result
31
+ end
32
+
33
+ def lookup_key_to_storage_key(key)
34
+ @string_table += "#{key}\0"
35
+ old_si = @string_index
36
+ @string_index += key.length + 1
37
+ old_si
38
+ end
39
+
40
+ def storage_key_to_lookup_key(offset)
41
+ @string_table[offset..][/[^\0]+/]
42
+ end
43
+ end
44
+
45
+ class StringTraits2
46
+ attr_reader :string_table, :buckets, :hash_h
47
+
48
+ def initialize
49
+ @string_table = "\0"
50
+ @string_index = 1
51
+ @buckets = {}
52
+ @hash_h = {}
53
+ end
54
+
55
+ def hash_lookup_key(key)
56
+ return @hash_h[key] unless @hash_h[key].nil?
57
+
58
+ result = 0
59
+ key.each_byte { |byte| result += byte * 13 }
60
+ @hash_h[key] = result
61
+ result
62
+ end
63
+
64
+ def lookup_key_to_storage_key(key)
65
+ return @buckets[key] unless @buckets[key].nil?
66
+
67
+ @string_table += "#{key}\0"
68
+ old_si = @string_index
69
+ @string_index += key.length + 1
70
+ @buckets[key] = old_si
71
+ old_si
72
+ end
73
+
74
+ def lookup_key_and_value(key, value)
75
+ value.inject([@buckets[key]]) do |sum, v|
76
+ sum << lookup_key_to_storage_key(v)
77
+ end
78
+ end
79
+
80
+ def storage_key_to_lookup_key(offset)
81
+ @string_table[offset..][/[^\0]+/]
82
+ end
83
+ end
84
+ end
@@ -1,3 +1,3 @@
1
1
  module Hashtable
2
- VERSION = '0.1.1'
2
+ VERSION = '0.1.3'
3
3
  end
data/lib/hashtable.rb CHANGED
@@ -2,4 +2,5 @@ module HashTable
2
2
  require_relative 'hashtable/version'
3
3
  require_relative 'hashtable/sparse_bit_array'
4
4
  require_relative 'hashtable/hash_table'
5
+ require_relative 'hashtable/traits'
5
6
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hashtable
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Cat1237
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-05-17 00:00:00.000000000 Z
11
+ date: 2022-05-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -65,6 +65,7 @@ files:
65
65
  - lib/hashtable.rb
66
66
  - lib/hashtable/hash_table.rb
67
67
  - lib/hashtable/sparse_bit_array.rb
68
+ - lib/hashtable/traits.rb
68
69
  - lib/hashtable/version.rb
69
70
  homepage: https://github.com/Cat1237/hashtable.git
70
71
  licenses: