Skip to content

Commit 4300564

Browse files
author
Ricardo de Cillo
committed
Make internal functions private
1 parent 61eab50 commit 4300564

File tree

1 file changed

+38
-43
lines changed

1 file changed

+38
-43
lines changed

lib/rrb_tree.ex

Lines changed: 38 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -26,26 +26,26 @@ defmodule RrbTree do
2626
end
2727

2828
# Given two subtrees, returns a balanced tree
29-
def make_tree(nodes, h) do
29+
defp make_tree(nodes, h) do
3030
a = Enum.count(nodes)
3131
p = Enum.reduce(nodes, 0, fn node, sum -> count_items(node) + sum end)
3232
extra_steps = a - ((p - 1) >>> @m) - 1
3333

3434
nodes |> balance(extra_steps) |> root(h)
3535
end
3636

37-
def root(nodes, h) do
37+
defp root(nodes, h) do
3838
do_root(nodes, %RrbTree{
3939
h: h,
4040
node: %Node{}
4141
})
4242
end
4343

44-
def do_root([], root) do
44+
defp do_root([], root) do
4545
root
4646
end
4747

48-
def do_root(nodes, root = %RrbTree{node: %Node{slots: root_slots}}) when tuple_size(root_slots) == @b do
48+
defp do_root(nodes, root = %RrbTree{node: %Node{slots: root_slots}}) when tuple_size(root_slots) == @b do
4949
nr = root(nodes, root.h)
5050

5151
%RrbTree{
@@ -57,7 +57,7 @@ defmodule RrbTree do
5757
}
5858
end
5959

60-
def do_root([node = %Node{} | nodes], root = %RrbTree{}) do
60+
defp do_root([node = %Node{} | nodes], root = %RrbTree{}) do
6161
do_root(nodes,
6262
%{root |
6363
node: %{ root.node |
@@ -69,7 +69,7 @@ defmodule RrbTree do
6969
end
7070

7171
# TODO: remove duplication of logic for Leaf and Nodes
72-
def do_root([node | nodes], root = %RrbTree{}) do
72+
defp do_root([node | nodes], root = %RrbTree{}) do
7373
do_root(nodes,
7474
%{root |
7575
node: %{ root.node |
@@ -80,61 +80,61 @@ defmodule RrbTree do
8080
)
8181
end
8282

83-
def last_range(ranges) when tuple_size(ranges) == 0 do
83+
defp last_range(ranges) when tuple_size(ranges) == 0 do
8484
0
8585
end
8686

87-
def last_range(ranges) do
87+
defp last_range(ranges) do
8888
last(ranges)
8989
end
9090

91-
def balance(nodes, extra_steps) do
91+
defp balance(nodes, extra_steps) do
9292
balance(nodes, extra_steps, [])
9393
end
9494

95-
def balance([], _e, result) do
95+
defp balance([], _e, result) do
9696
Enum.reverse(result)
9797
end
9898

99-
def balance([x | xs], e, result) when e <= @e do
99+
defp balance([x | xs], e, result) when e <= @e do
100100
balance(xs, e, [x | result])
101101
end
102102

103-
def balance([x1 = %Node{}, x2 = %Node{slots: slots} | xs], extra_steps, result) when tuple_size(slots) == 0 do
103+
defp balance([x1 = %Node{}, x2 = %Node{slots: slots} | xs], extra_steps, result) when tuple_size(slots) == 0 do
104104
balance(xs, extra_steps - 1, [x1 | result])
105105
end
106106

107-
def balance([x1 = %Node{slots: slots}, x2 | xs], extra_steps, result) when tuple_size(slots) == @b do
107+
defp balance([x1 = %Node{slots: slots}, x2 | xs], extra_steps, result) when tuple_size(slots) == @b do
108108
balance([x2 | xs], extra_steps, [x1 | result])
109109
end
110110

111-
def balance([x1 = %Node{slots: slots}, x2 | xs], extra_steps, result) when tuple_size(slots) < @b do
111+
defp balance([x1 = %Node{slots: slots}, x2 | xs], extra_steps, result) when tuple_size(slots) < @b do
112112
[x1, x2] = join_nodes(x1, x2)
113113
balance([x1, x2 | xs], extra_steps, result)
114114
end
115115

116116
# TODO: Leaf only
117-
def balance([x1, x2 | xs], e, result) when tuple_size(x2) == 0 do
117+
defp balance([x1, x2 | xs], e, result) when tuple_size(x2) == 0 do
118118
balance(xs, e - 1, [x1 | result])
119119
end
120120

121-
def balance([x1, x2 | xs], e, result) when tuple_size(x1) == @b do
121+
defp balance([x1, x2 | xs], e, result) when tuple_size(x1) == @b do
122122
balance([x2 | xs], e, [x1 | result])
123123
end
124124

125-
def balance([x1, x2 | xs], extra_steps, result) when tuple_size(x1) < @b do
125+
defp balance([x1, x2 | xs], extra_steps, result) when tuple_size(x1) < @b do
126126
[x1, x2] = join_nodes(x1, x2)
127127
balance([x1, x2 | xs], extra_steps, result)
128128
end
129129

130130
# TODO: Node only
131-
def join_nodes(n1 = %Node{slots: n1_slots}, n2 = %Node{slots: n2_slots}) when tuple_size(n1_slots) == @b or tuple_size(n2_slots) == 0 do
131+
defp join_nodes(n1 = %Node{slots: n1_slots}, n2 = %Node{slots: n2_slots}) when tuple_size(n1_slots) == @b or tuple_size(n2_slots) == 0 do
132132
[n1, n2]
133133
end
134134

135135
# TODO: try not to generate many nodes untill have a full node
136136
# TODO: handle leafs differently then internal nodes
137-
def join_nodes(n1 = %Node{}, n2 = %Node{}) do
137+
defp join_nodes(n1 = %Node{}, n2 = %Node{}) do
138138
join_nodes(
139139
%Node{
140140
ranges: Tuple.insert_at(n1.ranges, tuple_size(n1.ranges), elem(n2.ranges, tuple_size(n2.ranges) - 1) + elem(n1.ranges, tuple_size(n1.ranges) - 1)),
@@ -148,30 +148,30 @@ defmodule RrbTree do
148148
end
149149

150150
# TODO: Leaf only
151-
def join_nodes(n1, n2) when tuple_size(n1) == @b or tuple_size(n2) == 0 do
151+
defp join_nodes(n1, n2) when tuple_size(n1) == @b or tuple_size(n2) == 0 do
152152
[n1, n2]
153153
end
154154

155-
def join_nodes(n1, n2) do
155+
defp join_nodes(n1, n2) do
156156
join_nodes(
157157
append(n1, elem(n2, 0)),
158158
Tuple.delete_at(n2, 0)
159159
)
160160
end
161161

162-
def count_items(%Node{} = node) do
162+
defp count_items(%Node{} = node) do
163163
tuple_size(node.slots)
164164
end
165165

166-
def count_items(leaf) do
166+
defp count_items(leaf) do
167167
tuple_size(leaf)
168168
end
169169

170-
def do_concat(%Node{} = ltree, %Node{} = rtree, _hl = 2, _hr = 2) do
170+
defp do_concat(%Node{} = ltree, %Node{} = rtree, _hl = 2, _hr = 2) do
171171
make_tree(Tuple.to_list(ltree.slots) ++ Tuple.to_list(rtree.slots), 2)
172172
end
173173

174-
def do_concat(%Node{} = ltree, %Node{} = rtree, hl, hr) when hl == hr do
174+
defp do_concat(%Node{} = ltree, %Node{} = rtree, hl, hr) when hl == hr do
175175
mtree = do_concat(rhand(ltree), lhand(rtree), hl - 1, hr - 1)
176176

177177
# TODO: check correctness when mtree.h > ltree.h OR mtree.h > rtree.h
@@ -184,65 +184,60 @@ defmodule RrbTree do
184184
end
185185
end
186186

187-
def do_concat(%Node{} = ltree, %Node{} = rtree, hl, hr) when hl > hr do
187+
defp do_concat(%Node{} = ltree, %Node{} = rtree, hl, hr) when hl > hr do
188188
mtree = do_concat(rhand(ltree), rtree, hl - 1, hr)
189189

190190
make_tree(Tuple.to_list(lbody(ltree).slots) ++ Tuple.to_list(mtree.node.slots), hl)
191191
end
192192

193-
def do_concat(%Node{} = ltree, %Node{} = rtree, hl, hr) when hl < hr do
193+
defp do_concat(%Node{} = ltree, %Node{} = rtree, hl, hr) when hl < hr do
194194
mtree = do_concat(ltree, lhand(rtree), hl, hr - 1)
195195

196196
make_tree(Tuple.to_list(mtree.node.slots) ++ Tuple.to_list(rbody(rtree).slots), hr)
197197
end
198198

199-
def rhand(%Node{} = node) do
199+
defp rhand(%Node{} = node) do
200200
last(node.slots)
201201
end
202202

203-
def lhand(%Node{} = node) do
203+
defp lhand(%Node{} = node) do
204204
first(node.slots)
205205
end
206206

207-
def lbody(%Node{ranges: ranges, slots: slots}) do
207+
defp lbody(%Node{ranges: ranges, slots: slots}) do
208208
%Node{
209209
ranges: Tuple.delete_at(ranges, tuple_size(ranges) - 1),
210210
slots: Tuple.delete_at(slots, tuple_size(slots) - 1)
211211
}
212212
end
213213

214-
def rbody(%Node{ranges: ranges, slots: slots}) do
214+
defp rbody(%Node{ranges: ranges, slots: slots}) do
215215
%Node{
216216
ranges: delete_first_range(ranges),
217217
slots: Tuple.delete_at(slots, 0)
218218
}
219219
end
220220

221-
def delete_first_range(ranges) do
221+
defp delete_first_range(ranges) do
222222
fst = elem(ranges, 0)
223223

224224
Tuple.delete_at(ranges, 0)
225225
|> Tuple.to_list
226226
|> Enum.reduce({}, fn(r, rs) -> append(rs, r - fst) end)
227227
end
228228

229-
def first(tuple) do
229+
defp first(tuple) do
230230
elem(tuple, 0)
231231
end
232232

233-
def last(tuple) do
233+
defp last(tuple) do
234234
elem(tuple, tuple_size(tuple) - 1)
235235
end
236236

237-
def append(tuple, e) do
237+
defp append(tuple, e) do
238238
Tuple.insert_at(tuple, tuple_size(tuple), e)
239239
end
240240

241-
#defp do_concat(%RrbTree{h: hl} = ltree, %RrbTree{h: hr} = rtree) when hl > hr do
242-
# mtree = do_concat(rhand(ltree), rtree)
243-
# make_tree(ltree, mtree)
244-
#end
245-
246241
def get(%RrbTree{} = t, index) do
247242
do_get(t.h, t.node, index)
248243
end
@@ -259,7 +254,7 @@ defmodule RrbTree do
259254
elem(leaf, i)
260255
end
261256

262-
# Finds the branch in which the index is expected to be found.
257+
# Internal: Finds the branch in which the index is expected to be found.
263258
# Equivalent to, since the branching factor is a power of 2:
264259
#
265260
# 1. find the number of items in each branch: $n = 2^{m^{h - 1}}$
@@ -270,7 +265,7 @@ defmodule RrbTree do
270265
i >>> (@m * (h - 1))
271266
end
272267

273-
# Since our constraints over the branching factor $2^m$ are relaxed,
268+
# Internal: Since our constraints over the branching factor $2^m$ are relaxed,
274269
# e.g. we may have both $2^m - 1$ and $2^m$ branching, sometimes
275270
# the expected branch calculated with `do_radix` may not be correct,
276271
# so here we do a linear search for the correct branch.
@@ -282,7 +277,7 @@ defmodule RrbTree do
282277
end
283278
end
284279

285-
# In order to recursively get an item from the tree, we need to
280+
# Internal: In order to recursively get an item from the tree, we need to
286281
# adjust the index, reducing it by the number of items to the
287282
# left of the branch we are going to search.
288283
defp do_new_index(ranges, branch_index, i) do

0 commit comments

Comments
 (0)