edlib 0.0.4 → 0.0.6
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +1 -0
- data/ext/edlib/edlibext.c +60 -49
- 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
|
[![Gem Version](https://badge.fury.io/rb/edlib.svg)](https://badge.fury.io/rb/edlib)
|
4
4
|
[![test](https://github.com/kojix2/ruby-edlib/actions/workflows/ci.yml/badge.svg)](https://github.com/kojix2/ruby-edlib/actions/workflows/ci.yml)
|
5
|
+
[![DOI](https://zenodo.org/badge/559318048.svg)](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,24 +372,18 @@ 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");
|
362
379
|
}
|
363
|
-
EdlibAlignConfig cfg = edlibNewAlignConfig(
|
364
|
-
config->k,
|
365
|
-
config->mode,
|
366
|
-
config->task,
|
367
|
-
config->additionalEqualities,
|
368
|
-
config->additionalEqualitiesLength);
|
369
380
|
|
370
381
|
EdlibAlignResult result = edlibAlign(
|
371
382
|
StringValueCStr(query),
|
372
383
|
RSTRING_LEN(query),
|
373
384
|
StringValueCStr(target),
|
374
385
|
RSTRING_LEN(target),
|
375
|
-
|
386
|
+
*config);
|
376
387
|
|
377
388
|
if (result.status != 0)
|
378
389
|
{
|
@@ -433,8 +444,8 @@ void Init_edlibext(void)
|
|
433
444
|
{
|
434
445
|
mEdlib = rb_define_module("Edlib");
|
435
446
|
cAligner = rb_define_class_under(mEdlib, "Aligner", rb_cObject);
|
436
|
-
rb_define_alloc_func(cAligner,
|
437
|
-
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);
|
438
449
|
rb_define_method(cAligner, "k", aligner_get_k, 0);
|
439
450
|
rb_define_method(cAligner, "k=", aligner_set_k, 1);
|
440
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
|