Repository navigation
Expand file tree
/
Copy pathBHash.rb
More file actions
109 lines (98 loc) · 2.24 KB
/
Copy pathBHash.rb
File metadata and controls
109 lines (98 loc) · 2.24 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
class BHash
def initialize(hmap = nil)
@hash = Hash.new()
@rhash = Hash.new()
if hmap
hmap.each do |r,s|
add(r,s)
end
end
end
def find(h)
if @hash.has_key?(h)
return @hash[h]
elsif @rhash.has_key?(h)
return @rhash[h]
end
return nil
end
def add(r, s = nil)
if s
if not present?(r)
else
raise "Error! #{r} already Present"
return
end
if not present?(s)
else
raise "Error! #{s} already Present"
return
end
@hash[r] = s
@rhash[s] = r
elsif r.is_a?(Hash)
r.each do |r,s|
add(r,s)
end
else
raise "Error! Invalid Type"
end
end
def delete(h)
if @hash.has_key?(h)
value = @hash[h]
@hash.delete(h)
@rhash.delete(value)
elsif @rhash.has_key?(h)
value = @rhash[h]
@rhash.delete(h)
@hash.delete(value)
end
end
def print()
puts @hash.to_s
end
def present?(h)
if @hash.has_key?(h)
return true
end
if @rhash.has_key?(h)
return true
end
return false
end
def update_key(m,n)
if present?(n)
raise "Error! #{n} already present"
return
end
if @hash.has_key?(m)
value = @hash[m]
@hash.delete(m)
@hash[n] = value
@rhash[value] = n
elsif @rhash.has_key?(m)
value = @rhash[m]
@rhash.delete(m)
@rhash[n] = value
@hash[value] = n
end
end
def update_value(r,s)
if present?(s)
raise "Error! #{s} already present"
return
end
if @hash.has_key?(r)
value = @hash[r]
@hash[r] = s
@rhash.delete(value)
@rhash[s] = r
elsif @rhash.has_key?(r)
value = @rhash[r]
@rhash[r] = s
@hash.delete(value)
@hash[s] = r
end
end
end