edlib 0.0.5 → 0.0.6
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/README.md +1 -0
- data/ext/edlib/edlibext.c +59 -42
- data/ext/edlib/edlibext.h +42 -0
- data/lib/edlib/version.rb +1 -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: 41a9c8bdf279436f3ca2da4840a62d875c62ab5630c0411c7751446dd7c6db48
|
4
|
+
data.tar.gz: 62436d4433d308d71e76ec5095a57d85c1da88a3a6addf1531cb00e65ed37d72
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9afed6c6ab4e8a59906a98441c464f093ad45a4b92464b0efba67166d925cf0243e4e484b063264940a2afb4867a181deb7dc55733cfb8ae0f082b472f47f286
|
7
|
+
data.tar.gz: c472407d2aa613f12c75c554d525c3adafa21f689921c82e9fac3d43395ce3759f5240fafa06fe4c6985bac7d6ba5bf42944c746e55c0584b067ba57d8b455fb
|
data/README.md
CHANGED
@@ -2,6 +2,7 @@
|
|
2
2
|
|
3
3
|
[](https://badge.fury.io/rb/edlib)
|
4
4
|
[](https://github.com/kojix2/ruby-edlib/actions/workflows/ci.yml)
|
5
|
+
[](https://zenodo.org/badge/latestdoi/559318048)
|
5
6
|
|
6
7
|
[Edlib](https://github.com/Martinsos/edlib) - A lightweight and super fast C/C++ library for sequence alignment using edit distance
|
7
8
|
|
data/ext/edlib/edlibext.c
CHANGED
@@ -1,58 +1,72 @@
|
|
1
1
|
#include "ruby.h"
|
2
|
-
#include "
|
2
|
+
#include "edlibext.h"
|
3
3
|
|
4
4
|
VALUE mEdlib;
|
5
5
|
VALUE cAligner;
|
6
|
-
EdlibEqualityPair *eqpairs;
|
7
6
|
|
8
|
-
|
9
|
-
static void config_free(void *ptr);
|
7
|
+
// Aligner class
|
10
8
|
|
11
9
|
static const rb_data_type_t config_type = {
|
12
|
-
.wrap_struct_name = "
|
10
|
+
.wrap_struct_name = "RbAlignConfig",
|
13
11
|
.function = {
|
14
|
-
.dfree =
|
15
|
-
.dsize =
|
12
|
+
.dfree = aligner_config_free,
|
13
|
+
.dsize = aligner_config_memsize,
|
16
14
|
},
|
17
15
|
.flags = RUBY_TYPED_FREE_IMMEDIATELY,
|
18
16
|
};
|
19
17
|
|
20
18
|
static VALUE
|
21
|
-
|
19
|
+
aligner_config_allocate(VALUE klass)
|
22
20
|
{
|
23
|
-
|
24
|
-
|
25
|
-
|
21
|
+
RbAlignConfig *aligner_config;
|
22
|
+
|
23
|
+
VALUE obj = TypedData_Make_Struct(klass, RbAlignConfig, &config_type, aligner_config);
|
24
|
+
aligner_config->config = (EdlibAlignConfig *)malloc(sizeof(EdlibAlignConfig));
|
25
|
+
aligner_config->equalityPairs = NULL;
|
26
26
|
return obj;
|
27
27
|
}
|
28
28
|
|
29
29
|
static void
|
30
|
-
|
30
|
+
aligner_config_free(void *ptr)
|
31
31
|
{
|
32
|
-
|
32
|
+
RbAlignConfig *aligner_config = ptr;
|
33
|
+
if (aligner_config->config != NULL)
|
33
34
|
{
|
34
|
-
free(
|
35
|
-
eqpairs = NULL;
|
35
|
+
free(aligner_config->config);
|
36
36
|
}
|
37
|
-
|
37
|
+
if (aligner_config->equalityPairs != NULL)
|
38
|
+
{
|
39
|
+
free(aligner_config->equalityPairs);
|
40
|
+
}
|
41
|
+
|
42
|
+
free(ptr);
|
38
43
|
}
|
39
44
|
|
40
45
|
static size_t
|
41
|
-
|
46
|
+
aligner_config_memsize(const void *ptr)
|
42
47
|
{
|
43
|
-
const
|
44
|
-
return sizeof(ptr) + 2 * sizeof(char) *
|
48
|
+
const RbAlignConfig *aligner_config = ptr;
|
49
|
+
return sizeof(ptr) + sizeof(aligner_config->config) + 2 * sizeof(char) * aligner_config->config->additionalEqualitiesLength;
|
45
50
|
}
|
46
51
|
|
47
52
|
static EdlibAlignConfig *
|
48
|
-
|
53
|
+
aligner_get_config(VALUE self)
|
49
54
|
{
|
50
|
-
|
51
|
-
TypedData_Get_Struct(self,
|
55
|
+
RbAlignConfig *aligner_config = NULL;
|
56
|
+
TypedData_Get_Struct(self, RbAlignConfig, &config_type, aligner_config);
|
57
|
+
return aligner_config->config;
|
58
|
+
}
|
52
59
|
|
53
|
-
|
60
|
+
static EdlibEqualityPair *
|
61
|
+
aligner_get_equalityPairs(VALUE self)
|
62
|
+
{
|
63
|
+
RbAlignConfig *aligner_config = NULL;
|
64
|
+
TypedData_Get_Struct(self, RbAlignConfig, &config_type, aligner_config);
|
65
|
+
return aligner_config->equalityPairs;
|
54
66
|
}
|
55
67
|
|
68
|
+
// Config
|
69
|
+
|
56
70
|
static VALUE
|
57
71
|
get_k(EdlibAlignConfig *config)
|
58
72
|
{
|
@@ -62,7 +76,7 @@ get_k(EdlibAlignConfig *config)
|
|
62
76
|
static VALUE
|
63
77
|
aligner_get_k(VALUE self)
|
64
78
|
{
|
65
|
-
EdlibAlignConfig *config =
|
79
|
+
EdlibAlignConfig *config = aligner_get_config(self);
|
66
80
|
return get_k(config);
|
67
81
|
}
|
68
82
|
|
@@ -76,7 +90,7 @@ set_k(EdlibAlignConfig *config, VALUE k)
|
|
76
90
|
static VALUE
|
77
91
|
aligner_set_k(VALUE self, VALUE k)
|
78
92
|
{
|
79
|
-
EdlibAlignConfig *config =
|
93
|
+
EdlibAlignConfig *config = aligner_get_config(self);
|
80
94
|
return set_k(config, k);
|
81
95
|
}
|
82
96
|
|
@@ -99,7 +113,7 @@ get_mode(EdlibAlignConfig *config)
|
|
99
113
|
static VALUE
|
100
114
|
aligner_get_mode(VALUE self)
|
101
115
|
{
|
102
|
-
EdlibAlignConfig *config =
|
116
|
+
EdlibAlignConfig *config = aligner_get_config(self);
|
103
117
|
return get_mode(config);
|
104
118
|
}
|
105
119
|
|
@@ -148,7 +162,7 @@ set_mode(EdlibAlignConfig *config, VALUE mode)
|
|
148
162
|
static VALUE
|
149
163
|
aligner_set_mode(VALUE self, VALUE mode)
|
150
164
|
{
|
151
|
-
EdlibAlignConfig *config =
|
165
|
+
EdlibAlignConfig *config = aligner_get_config(self);
|
152
166
|
return set_mode(config, mode);
|
153
167
|
}
|
154
168
|
|
@@ -171,7 +185,7 @@ get_task(EdlibAlignConfig *config)
|
|
171
185
|
static VALUE
|
172
186
|
aligner_get_task(VALUE self)
|
173
187
|
{
|
174
|
-
EdlibAlignConfig *config =
|
188
|
+
EdlibAlignConfig *config = aligner_get_config(self);
|
175
189
|
return get_task(config);
|
176
190
|
}
|
177
191
|
|
@@ -220,7 +234,7 @@ set_task(EdlibAlignConfig *config, VALUE task)
|
|
220
234
|
static VALUE
|
221
235
|
aligner_set_task(VALUE self, VALUE task)
|
222
236
|
{
|
223
|
-
EdlibAlignConfig *config =
|
237
|
+
EdlibAlignConfig *config = aligner_get_config(self);
|
224
238
|
return set_task(config, task);
|
225
239
|
}
|
226
240
|
|
@@ -244,18 +258,19 @@ get_additional_equalities(EdlibAlignConfig *config)
|
|
244
258
|
static VALUE
|
245
259
|
aligner_get_additional_equalities(VALUE self)
|
246
260
|
{
|
247
|
-
EdlibAlignConfig *config =
|
261
|
+
EdlibAlignConfig *config = aligner_get_config(self);
|
248
262
|
return get_additional_equalities(config);
|
249
263
|
}
|
250
264
|
|
251
265
|
static VALUE
|
252
|
-
set_additional_equalities(EdlibAlignConfig *config, VALUE equalities)
|
266
|
+
set_additional_equalities(EdlibAlignConfig *config, EdlibEqualityPair *eqpairs, VALUE equalities)
|
253
267
|
{
|
254
268
|
Check_Type(equalities, T_ARRAY);
|
255
269
|
int len = RARRAY_LEN(equalities);
|
256
270
|
if (len == 0)
|
257
271
|
{
|
258
|
-
if(eqpairs != NULL)
|
272
|
+
if (eqpairs != NULL)
|
273
|
+
{
|
259
274
|
free(eqpairs);
|
260
275
|
eqpairs = NULL;
|
261
276
|
}
|
@@ -312,14 +327,15 @@ set_additional_equalities(EdlibAlignConfig *config, VALUE equalities)
|
|
312
327
|
static VALUE
|
313
328
|
aligner_set_additional_equalities(VALUE self, VALUE equalities)
|
314
329
|
{
|
315
|
-
EdlibAlignConfig *config =
|
316
|
-
|
330
|
+
EdlibAlignConfig *config = aligner_get_config(self);
|
331
|
+
EdlibEqualityPair *eqpairs = aligner_get_equalityPairs(self);
|
332
|
+
return set_additional_equalities(config, eqpairs, equalities);
|
317
333
|
}
|
318
334
|
|
319
335
|
static VALUE
|
320
336
|
aligner_config_hash(VALUE self)
|
321
337
|
{
|
322
|
-
EdlibAlignConfig *config =
|
338
|
+
EdlibAlignConfig *config = aligner_get_config(self);
|
323
339
|
|
324
340
|
VALUE hash = rb_hash_new();
|
325
341
|
|
@@ -332,16 +348,17 @@ aligner_config_hash(VALUE self)
|
|
332
348
|
}
|
333
349
|
|
334
350
|
static VALUE
|
335
|
-
|
351
|
+
aligner_initialize_raw(VALUE self, VALUE k, VALUE mode, VALUE task, VALUE additional_equalities)
|
336
352
|
{
|
337
|
-
EdlibAlignConfig *config =
|
338
|
-
|
353
|
+
EdlibAlignConfig *config = aligner_get_config(self);
|
354
|
+
EdlibEqualityPair *eqpairs = aligner_get_equalityPairs(self);
|
339
355
|
config->k = NUM2INT(k);
|
340
356
|
set_mode(config, mode);
|
341
357
|
set_task(config, task);
|
358
|
+
|
342
359
|
if (additional_equalities != Qnil)
|
343
360
|
{
|
344
|
-
set_additional_equalities(config, additional_equalities);
|
361
|
+
set_additional_equalities(config, eqpairs, additional_equalities);
|
345
362
|
}
|
346
363
|
else
|
347
364
|
{
|
@@ -355,7 +372,7 @@ aligner_initialize(VALUE self, VALUE k, VALUE mode, VALUE task, VALUE additional
|
|
355
372
|
static VALUE
|
356
373
|
aligner_align(VALUE self, VALUE query, VALUE target)
|
357
374
|
{
|
358
|
-
EdlibAlignConfig *config =
|
375
|
+
EdlibAlignConfig *config = aligner_get_config(self);
|
359
376
|
if (!config)
|
360
377
|
{
|
361
378
|
rb_raise(rb_eRuntimeError, "config is NULL");
|
@@ -427,8 +444,8 @@ void Init_edlibext(void)
|
|
427
444
|
{
|
428
445
|
mEdlib = rb_define_module("Edlib");
|
429
446
|
cAligner = rb_define_class_under(mEdlib, "Aligner", rb_cObject);
|
430
|
-
rb_define_alloc_func(cAligner,
|
431
|
-
rb_define_private_method(cAligner, "initialize_raw",
|
447
|
+
rb_define_alloc_func(cAligner, aligner_config_allocate);
|
448
|
+
rb_define_private_method(cAligner, "initialize_raw", aligner_initialize_raw, 4);
|
432
449
|
rb_define_method(cAligner, "k", aligner_get_k, 0);
|
433
450
|
rb_define_method(cAligner, "k=", aligner_set_k, 1);
|
434
451
|
rb_define_method(cAligner, "mode", aligner_get_mode, 0);
|
@@ -0,0 +1,42 @@
|
|
1
|
+
#ifndef EDLIBEXT_H
|
2
|
+
#define EDLIBEXT_H
|
3
|
+
|
4
|
+
#include "edlib.h"
|
5
|
+
|
6
|
+
typedef struct
|
7
|
+
{
|
8
|
+
EdlibAlignConfig *config;
|
9
|
+
EdlibEqualityPair *equalityPairs;
|
10
|
+
} RbAlignConfig;
|
11
|
+
|
12
|
+
static VALUE aligner_config_allocate(VALUE klass);
|
13
|
+
static size_t aligner_config_memsize(const void *ptr);
|
14
|
+
static void aligner_config_free(void *ptr);
|
15
|
+
|
16
|
+
static EdlibAlignConfig *aligner_get_config(VALUE self);
|
17
|
+
static EdlibEqualityPair *aligner_get_equalityPairs(VALUE self);
|
18
|
+
|
19
|
+
static VALUE get_k(EdlibAlignConfig *config);
|
20
|
+
static VALUE aligner_get_k(VALUE self);
|
21
|
+
static VALUE set_k(EdlibAlignConfig *config, VALUE k);
|
22
|
+
static VALUE aligner_set_k(VALUE self, VALUE k);
|
23
|
+
static VALUE get_mode(EdlibAlignConfig *config);
|
24
|
+
static VALUE aligner_get_mode(VALUE self);
|
25
|
+
static VALUE set_mode(EdlibAlignConfig *config, VALUE mode);
|
26
|
+
static VALUE aligner_set_mode(VALUE self, VALUE mode);
|
27
|
+
static VALUE get_task(EdlibAlignConfig *config);
|
28
|
+
static VALUE aligner_get_task(VALUE self);
|
29
|
+
static VALUE set_task(EdlibAlignConfig *config, VALUE task);
|
30
|
+
static VALUE aligner_set_task(VALUE self, VALUE task);
|
31
|
+
static VALUE get_additional_equalities(EdlibAlignConfig *config);
|
32
|
+
static VALUE aligner_get_additional_equalities(VALUE self);
|
33
|
+
static VALUE set_additional_equalities(EdlibAlignConfig *config, EdlibEqualityPair *eqpairs, VALUE equalities);
|
34
|
+
static VALUE aligner_set_additional_equalities(VALUE self, VALUE equalities);
|
35
|
+
|
36
|
+
static VALUE aligner_config_hash(VALUE self);
|
37
|
+
|
38
|
+
static VALUE aligner_initialize_raw(VALUE self, VALUE k, VALUE mode, VALUE task, VALUE additional_equalities);
|
39
|
+
static VALUE aligner_align(VALUE self, VALUE query, VALUE target);
|
40
|
+
void Init_edlibext(void);
|
41
|
+
|
42
|
+
#endif // EDLIBEXT_H
|
data/lib/edlib/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: edlib
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- kojix2
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-
|
11
|
+
date: 2022-11-02 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: 'Lightweight, super fast C/C++ library for sequence alignment using edit
|
14
14
|
(Levenshtein) distance. '
|
@@ -23,6 +23,7 @@ files:
|
|
23
23
|
- ext/edlib/edlib.cpp
|
24
24
|
- ext/edlib/edlib.h
|
25
25
|
- ext/edlib/edlibext.c
|
26
|
+
- ext/edlib/edlibext.h
|
26
27
|
- ext/edlib/extconf.rb
|
27
28
|
- lib/edlib.rb
|
28
29
|
- lib/edlib/version.rb
|