native_btree 0.6.0 → 0.6.1
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 +4 -4
- data/CHANGELOG.md +6 -0
- data/CMakeLists.txt +2 -2
- data/README.md +5 -31
- data/Rakefile +1 -1
- data/ext/native_btree/constructor.c +8 -0
- data/ext/native_btree/conversion.c +24 -4
- data/ext/native_btree/instance.c +75 -10
- data/ext/native_btree/iterators.c +28 -5
- data/ext/native_btree/native_btree.c +8 -12
- data/ext/native_btree/search.c +14 -0
- data/lib/native_btree/btree.rb +6 -0
- data/lib/native_btree/native_btree.bundle +0 -0
- data/lib/native_btree/version.rb +2 -1
- data/lib/native_btree.rb +3 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 48b0e894826a65be636d9e13813c6d084c69a306d0778caf3fc709511dc5d2f5
|
4
|
+
data.tar.gz: 18f2f200813df0762181ebb4e7d3cc32c1cd8ae337ab9a35547d9265fa91eaeb
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4c574719cc0366f86f8459e5e17c59739dab7886ae2cfe56450ed8696906fe4c13be6e90265756a195d04548a627018540c8d119e143d19e0b5cab378c166448
|
7
|
+
data.tar.gz: 8239197687c68a713da92c7d108b41acfe83c30dcbee888e7363e0842b2f6bdc7af30e584e96a5438c08bb5bd306399f986cb31d0dad86d2cf17c9ee65820638
|
data/CHANGELOG.md
CHANGED
data/CMakeLists.txt
CHANGED
@@ -2,7 +2,7 @@ cmake_minimum_required(VERSION 3.5)
|
|
2
2
|
|
3
3
|
project(ruby-native-btree
|
4
4
|
LANGUAGES C
|
5
|
-
VERSION 0.6.
|
5
|
+
VERSION 0.6.1)
|
6
6
|
|
7
7
|
include(CheckSymbolExists)
|
8
8
|
include(CheckCCompilerFlag)
|
@@ -22,7 +22,7 @@ if(HAVE_CC_MARCH_NATIVE)
|
|
22
22
|
string(APPEND CMAKE_C_FLAGS " -march=native")
|
23
23
|
endif()
|
24
24
|
|
25
|
-
set(CMAKE_C_FLAGS_DEBUG "-O0 -ggdb3 -Wall -Wextra -Wno-unused-parameter")
|
25
|
+
set(CMAKE_C_FLAGS_DEBUG "-O0 -ggdb3 -Wall -Wextra -Wno-unused-parameter --coverage")
|
26
26
|
set(CMAKE_C_FLAGS_RELEASE "-O3 -fomit-frame-pointer")
|
27
27
|
|
28
28
|
# Force -fPIC
|
data/README.md
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
# GLib Balanced binary tree (GTree) bindings for Ruby
|
2
2
|
|
3
3
|
[](https://github.com/unixs/ruby-native-btree/actions/workflows/main.yml)
|
4
|
+
[](https://codecov.io/gh/unixs/ruby-native-btree)
|
4
5
|
[](https://badge.fury.io/rb/native_btree)
|
5
6
|
[](https://www.gnu.org/licenses/lgpl-3.0)
|
6
7
|
|
@@ -87,38 +88,11 @@ tree.to_a
|
|
87
88
|
#]
|
88
89
|
```
|
89
90
|
|
90
|
-
## API
|
91
|
+
## API
|
91
92
|
|
92
|
-
You must provide your own comparator for keys in `new` class method block.
|
93
|
+
* You must provide your own comparator for keys in `new` class method block.
|
94
|
+
* You can mix in the `Enumerable` module if additional methods are needed.
|
93
95
|
|
94
96
|
### API methods
|
95
97
|
|
96
|
-
|
97
|
-
|
98
|
-
Implemented methods:
|
99
|
-
|
100
|
-
* `[]= (alias: set)`
|
101
|
-
* `[] (alias: get)`
|
102
|
-
* `==`
|
103
|
-
* `delete`
|
104
|
-
* `size`
|
105
|
-
* `height`
|
106
|
-
* `each`
|
107
|
-
* `include?`
|
108
|
-
* `clear`
|
109
|
-
* `to_h`
|
110
|
-
* `to_a`
|
111
|
-
* `to_proc`
|
112
|
-
* `to_s`
|
113
|
-
* `inspect`
|
114
|
-
* `filter` (alias: select)
|
115
|
-
* `filter!` (alias: select!)
|
116
|
-
* `each_value`
|
117
|
-
* `each_key`
|
118
|
-
* `search_before` (GLib version >= 2.68) - Select keys <= first arg, ret new Btree
|
119
|
-
* `search_after` (GLib version >= 2.68) - Select keys >= first arg, ret new Btree
|
120
|
-
* `empty?`
|
121
|
-
* `reverse_each`
|
122
|
-
* `delete_if`
|
123
|
-
|
124
|
-
You can mix in the `Enumerable` module if additional methods are needed.
|
98
|
+
[YARD documentation](https://rubydoc.info/gems/native_btree)
|
data/Rakefile
CHANGED
@@ -27,6 +27,14 @@ init_rbtree(RBTree *rbtree, gushort flags)
|
|
27
27
|
rbtree->flags = flags;
|
28
28
|
}
|
29
29
|
|
30
|
+
/**
|
31
|
+
* Constructor
|
32
|
+
*
|
33
|
+
* Accepts block as "comparator" function.
|
34
|
+
* This function will recive two keys for comparison.
|
35
|
+
*
|
36
|
+
* @return [Btree] new instance
|
37
|
+
*/
|
30
38
|
VALUE
|
31
39
|
rbtree_initialize(int argc, VALUE* argv, VALUE self)
|
32
40
|
{
|
@@ -26,7 +26,11 @@ rbtree_to_a_callback(gpointer key, gpointer value, gpointer data)
|
|
26
26
|
return FALSE;
|
27
27
|
}
|
28
28
|
|
29
|
-
|
29
|
+
/**
|
30
|
+
* Converts tree to Hash
|
31
|
+
*
|
32
|
+
* @return [Hash] result
|
33
|
+
*/
|
30
34
|
VALUE
|
31
35
|
rbtree_to_h(VALUE self)
|
32
36
|
{
|
@@ -39,7 +43,13 @@ rbtree_to_h(VALUE self)
|
|
39
43
|
return hash;
|
40
44
|
}
|
41
45
|
|
42
|
-
|
46
|
+
/**
|
47
|
+
* Converts tree to array
|
48
|
+
*
|
49
|
+
* Coverts tree to array of arrays with key and value
|
50
|
+
*
|
51
|
+
* @return [Array] result
|
52
|
+
*/
|
43
53
|
VALUE
|
44
54
|
rbtree_to_a(VALUE self)
|
45
55
|
{
|
@@ -70,14 +80,24 @@ to_proc_proc(RB_BLOCK_CALL_FUNC_ARGLIST(key, callback_arg))
|
|
70
80
|
return value;
|
71
81
|
}
|
72
82
|
|
73
|
-
|
83
|
+
/**
|
84
|
+
* Returns a Proc object that maps a key to its value
|
85
|
+
*
|
86
|
+
* @return [Proc] block
|
87
|
+
*/
|
74
88
|
VALUE
|
75
89
|
rbtree_to_proc(VALUE self)
|
76
90
|
{
|
77
91
|
return rb_proc_new(to_proc_proc, self);
|
78
92
|
}
|
79
93
|
|
80
|
-
|
94
|
+
/**
|
95
|
+
* Converts tree to string.
|
96
|
+
*
|
97
|
+
* Under hood will convert tree to Hash.
|
98
|
+
*
|
99
|
+
* @return [String] result
|
100
|
+
*/
|
81
101
|
VALUE
|
82
102
|
rbtree_to_s(VALUE self)
|
83
103
|
{
|
data/ext/native_btree/instance.c
CHANGED
@@ -110,7 +110,15 @@ legacy_rbtree_compare(const RBTree *a, const RBTree *b)
|
|
110
110
|
|
111
111
|
#endif
|
112
112
|
|
113
|
-
|
113
|
+
/**
|
114
|
+
* Adds key/value pair in to tree.
|
115
|
+
*
|
116
|
+
* Key/value will be replaced if key already exists.
|
117
|
+
*
|
118
|
+
* @param key [Object]
|
119
|
+
* @param value [Object]
|
120
|
+
* @return [Btree] self
|
121
|
+
*/
|
114
122
|
VALUE
|
115
123
|
rbtree_set(VALUE self, VALUE key, VALUE value)
|
116
124
|
{
|
@@ -121,7 +129,14 @@ rbtree_set(VALUE self, VALUE key, VALUE value)
|
|
121
129
|
return self;
|
122
130
|
}
|
123
131
|
|
124
|
-
|
132
|
+
/**
|
133
|
+
* Gets value by key from tree.
|
134
|
+
*
|
135
|
+
* * Returns +nil+ if key does not exist.
|
136
|
+
*
|
137
|
+
* @param key [Object]
|
138
|
+
* @return [Object] result
|
139
|
+
*/
|
125
140
|
VALUE
|
126
141
|
rbtree_get(VALUE self, VALUE key)
|
127
142
|
{
|
@@ -138,7 +153,16 @@ rbtree_get(VALUE self, VALUE key)
|
|
138
153
|
return result;
|
139
154
|
}
|
140
155
|
|
141
|
-
|
156
|
+
/**
|
157
|
+
* Deletes key/value pair from tree.
|
158
|
+
*
|
159
|
+
* * Returns value if key exists
|
160
|
+
* * Returns +nil+ if key does not exists
|
161
|
+
* * Returns result of block if block was given
|
162
|
+
*
|
163
|
+
* @param key [Object] Key
|
164
|
+
* @return [Object] result
|
165
|
+
*/
|
142
166
|
VALUE
|
143
167
|
rbtree_delete(VALUE self, VALUE key)
|
144
168
|
{
|
@@ -166,7 +190,11 @@ rbtree_delete(VALUE self, VALUE key)
|
|
166
190
|
}
|
167
191
|
}
|
168
192
|
|
169
|
-
|
193
|
+
/**
|
194
|
+
* Returns tree height
|
195
|
+
*
|
196
|
+
* @return [Integer] maximum nodes in path from root to leaf
|
197
|
+
*/
|
170
198
|
VALUE
|
171
199
|
rbtree_height(VALUE self)
|
172
200
|
{
|
@@ -178,7 +206,11 @@ rbtree_height(VALUE self)
|
|
178
206
|
return result;
|
179
207
|
}
|
180
208
|
|
181
|
-
|
209
|
+
/**
|
210
|
+
* Returns number of nodes
|
211
|
+
*
|
212
|
+
* @return [Integer] number of nodes
|
213
|
+
*/
|
182
214
|
VALUE
|
183
215
|
rbtree_size(VALUE self)
|
184
216
|
{
|
@@ -190,7 +222,11 @@ rbtree_size(VALUE self)
|
|
190
222
|
return result;
|
191
223
|
}
|
192
224
|
|
193
|
-
|
225
|
+
/**
|
226
|
+
* Remove all nodes from tree.
|
227
|
+
*
|
228
|
+
* @return [Btree] self
|
229
|
+
*/
|
194
230
|
VALUE
|
195
231
|
rbtree_clear(VALUE self)
|
196
232
|
{
|
@@ -206,6 +242,12 @@ rbtree_clear(VALUE self)
|
|
206
242
|
}
|
207
243
|
|
208
244
|
|
245
|
+
/**
|
246
|
+
* Checks that the given key is in the tree.
|
247
|
+
*
|
248
|
+
* @param key [Object]
|
249
|
+
* @return [Boolean] result
|
250
|
+
*/
|
209
251
|
VALUE
|
210
252
|
rbtree_is_include(VALUE self, VALUE key)
|
211
253
|
{
|
@@ -220,7 +262,11 @@ rbtree_is_include(VALUE self, VALUE key)
|
|
220
262
|
return Qtrue;
|
221
263
|
}
|
222
264
|
|
223
|
-
|
265
|
+
/**
|
266
|
+
* Checks that self tree is empty.
|
267
|
+
*
|
268
|
+
* @return [Boolean] result
|
269
|
+
*/
|
224
270
|
VALUE
|
225
271
|
rbtree_is_empty(VALUE self)
|
226
272
|
{
|
@@ -231,7 +277,18 @@ rbtree_is_empty(VALUE self)
|
|
231
277
|
return size > 0 ? Qfalse : Qtrue;
|
232
278
|
}
|
233
279
|
|
234
|
-
|
280
|
+
/**
|
281
|
+
* Checks if two trees are equal.
|
282
|
+
*
|
283
|
+
* Compares with +==+ method all keys and values from trees by order.
|
284
|
+
*
|
285
|
+
* * Returns +false+ if number of keys are not equal.
|
286
|
+
* * Returns +false+ if one keys or one values pair are not equal.
|
287
|
+
* * Returns +true+ if all keys and values are equal.
|
288
|
+
*
|
289
|
+
* @param second [Btree]
|
290
|
+
* @return [Boolean] result
|
291
|
+
*/
|
235
292
|
VALUE
|
236
293
|
rbtree_equal(VALUE self, VALUE second)
|
237
294
|
{
|
@@ -266,7 +323,11 @@ rbtree_equal(VALUE self, VALUE second)
|
|
266
323
|
return result;
|
267
324
|
}
|
268
325
|
|
269
|
-
|
326
|
+
/**
|
327
|
+
* Returns value from smallest key
|
328
|
+
*
|
329
|
+
* @return [Object] result
|
330
|
+
*/
|
270
331
|
VALUE
|
271
332
|
rbtree_first(VALUE self)
|
272
333
|
{
|
@@ -299,7 +360,11 @@ rbtree_first(VALUE self)
|
|
299
360
|
#endif
|
300
361
|
}
|
301
362
|
|
302
|
-
|
363
|
+
/**
|
364
|
+
* Returns value from largest key
|
365
|
+
*
|
366
|
+
* @return [Object] result
|
367
|
+
*/
|
303
368
|
VALUE
|
304
369
|
rbtree_last(VALUE self)
|
305
370
|
{
|
@@ -48,7 +48,11 @@ rbtree_enum_length(VALUE rbtree, VALUE args, VALUE eobj)
|
|
48
48
|
return rbtree_size(rbtree);
|
49
49
|
}
|
50
50
|
|
51
|
-
|
51
|
+
/**
|
52
|
+
* Execute block for each key/value pairs
|
53
|
+
*
|
54
|
+
* @return [Btree] self
|
55
|
+
*/
|
52
56
|
VALUE
|
53
57
|
rbtree_each(VALUE self)
|
54
58
|
{
|
@@ -63,7 +67,11 @@ rbtree_each(VALUE self)
|
|
63
67
|
return self;
|
64
68
|
}
|
65
69
|
|
66
|
-
|
70
|
+
/**
|
71
|
+
* Execute block for each key
|
72
|
+
*
|
73
|
+
* @return [Btree] self
|
74
|
+
*/
|
67
75
|
VALUE
|
68
76
|
rbtree_each_key(VALUE self)
|
69
77
|
{
|
@@ -78,7 +86,11 @@ rbtree_each_key(VALUE self)
|
|
78
86
|
return self;
|
79
87
|
}
|
80
88
|
|
81
|
-
|
89
|
+
/**
|
90
|
+
* Execute block for each value
|
91
|
+
*
|
92
|
+
* @return [Btree] self
|
93
|
+
*/
|
82
94
|
VALUE
|
83
95
|
rbtree_each_value(VALUE self)
|
84
96
|
{
|
@@ -93,7 +105,11 @@ rbtree_each_value(VALUE self)
|
|
93
105
|
return self;
|
94
106
|
}
|
95
107
|
|
96
|
-
|
108
|
+
/**
|
109
|
+
* Execute block for each key/value pairs in reverse order
|
110
|
+
*
|
111
|
+
* @return [Btree] self
|
112
|
+
*/
|
97
113
|
VALUE
|
98
114
|
rbtree_reverse_each(VALUE self)
|
99
115
|
{
|
@@ -149,7 +165,14 @@ rbtree_delete_if_cb(gpointer k, gpointer v, gpointer data)
|
|
149
165
|
return FALSE;
|
150
166
|
}
|
151
167
|
|
152
|
-
|
168
|
+
/**
|
169
|
+
* Deletes key/value pair from tree by result of block.
|
170
|
+
*
|
171
|
+
* Will execute block for each key/value pairs
|
172
|
+
* and delete them if block returns +true+
|
173
|
+
*
|
174
|
+
* @return [Btree] self
|
175
|
+
*/
|
153
176
|
VALUE
|
154
177
|
rbtree_delete_if(VALUE self)
|
155
178
|
{
|
@@ -2,29 +2,25 @@
|
|
2
2
|
#include <rbtree_type.h>
|
3
3
|
#include <glib_module.h>
|
4
4
|
|
5
|
-
#define NATIVE_BTREE_MODULE "NativeBtree"
|
6
|
-
#define NATIVE_BTREE_CLASS "Btree"
|
7
|
-
#define NATIVE_BTREE_CONST_INT_COMPARATOR "INT_COMPARATOR"
|
8
|
-
|
9
|
-
|
10
5
|
VALUE native_btree_class;
|
11
6
|
VALUE native_btree_module;
|
12
7
|
|
13
8
|
void
|
14
9
|
Init_native_btree()
|
15
10
|
{
|
16
|
-
native_btree_module = rb_define_module(
|
17
|
-
native_btree_class = rb_define_class_under(
|
18
|
-
native_btree_module,
|
19
|
-
NATIVE_BTREE_CLASS,
|
20
|
-
rb_cObject
|
21
|
-
);
|
11
|
+
native_btree_module = rb_define_module("NativeBtree");
|
12
|
+
native_btree_class = rb_define_class_under(native_btree_module, "Btree", rb_cObject);
|
22
13
|
|
23
14
|
VALUE int_comparator = USHORT2NUM(RBTREE_FLAG_INT_COMPARATOR);
|
24
15
|
OBJ_FREEZE(int_comparator);
|
16
|
+
|
17
|
+
/**
|
18
|
+
* Represents native comparator for integer keys
|
19
|
+
* @note Can be replaced with specific class in future releases
|
20
|
+
*/
|
25
21
|
rb_define_const(
|
26
22
|
native_btree_class,
|
27
|
-
|
23
|
+
"INT_COMPARATOR",
|
28
24
|
int_comparator
|
29
25
|
);
|
30
26
|
|
data/ext/native_btree/search.c
CHANGED
@@ -43,6 +43,13 @@ filter_bang_callback(gpointer a, gpointer b, gpointer data)
|
|
43
43
|
return FALSE;
|
44
44
|
}
|
45
45
|
|
46
|
+
/**
|
47
|
+
* Filters btree by block call
|
48
|
+
*
|
49
|
+
* If block returns true, key/value will include in result tree
|
50
|
+
*
|
51
|
+
* @return [Btree] result
|
52
|
+
*/
|
46
53
|
VALUE
|
47
54
|
rbtree_filter(VALUE self)
|
48
55
|
{
|
@@ -68,6 +75,13 @@ rbtree_filter(VALUE self)
|
|
68
75
|
return new_tree;
|
69
76
|
}
|
70
77
|
|
78
|
+
/**
|
79
|
+
* Filters btree by block call
|
80
|
+
*
|
81
|
+
* Same as #filter but returns changed self.
|
82
|
+
*
|
83
|
+
* @return [Btree] result
|
84
|
+
*/
|
71
85
|
VALUE
|
72
86
|
rbtree_filter_bang(VALUE self)
|
73
87
|
{
|
Binary file
|
data/lib/native_btree/version.rb
CHANGED
data/lib/native_btree.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: native_btree
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.6.
|
4
|
+
version: 0.6.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Alexander Feodorov
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2023-05-05 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: Ruby bindings to GTree balanced binary tree from GLib library.
|
14
14
|
email:
|
@@ -48,6 +48,7 @@ files:
|
|
48
48
|
- ext/native_btree/search.c
|
49
49
|
- ext/native_btree/utils.c
|
50
50
|
- lib/native_btree.rb
|
51
|
+
- lib/native_btree/btree.rb
|
51
52
|
- lib/native_btree/native_btree.bundle
|
52
53
|
- lib/native_btree/version.rb
|
53
54
|
- native_btree.gemspec
|