edlib 0.0.5 → 0.0.6

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 5c9cf154ed1668d991a4476b501981a245a9b758950699fcba36062f73d312dd
4
- data.tar.gz: 716d869b8fc5dc870b9bbcdf3bfb2bceb99567b4e22197214cd99a948e850b86
3
+ metadata.gz: 41a9c8bdf279436f3ca2da4840a62d875c62ab5630c0411c7751446dd7c6db48
4
+ data.tar.gz: 62436d4433d308d71e76ec5095a57d85c1da88a3a6addf1531cb00e65ed37d72
5
5
  SHA512:
6
- metadata.gz: b32f9755d963c17fba0c1b76364f9969f3a84fdb5c5e123020b02733699b313ff4d46e6203956640ad795c5686b0d00ff914645cd68a711add89e9d8250430eb
7
- data.tar.gz: a776f6b8c67c9f9a7f16440cd8630688f2bba4bca8822e2b76b32f4b6f2095cf31ce259dbc92b6ea923503403c135becd85a8e7e953caa52a4c51df16e2bcbfa
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 "edlib.h"
2
+ #include "edlibext.h"
3
3
 
4
4
  VALUE mEdlib;
5
5
  VALUE cAligner;
6
- EdlibEqualityPair *eqpairs;
7
6
 
8
- static size_t config_memsize(const void *ptr);
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 = "EdlibAlignConfig",
10
+ .wrap_struct_name = "RbAlignConfig",
13
11
  .function = {
14
- .dfree = config_free,
15
- .dsize = config_memsize,
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
- config_allocate(VALUE klass)
19
+ aligner_config_allocate(VALUE klass)
22
20
  {
23
- EdlibAlignConfig *config;
24
- VALUE obj = TypedData_Make_Struct(klass, EdlibAlignConfig,
25
- &config_type, config);
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
- config_free(void *ptr)
30
+ aligner_config_free(void *ptr)
31
31
  {
32
- if (eqpairs != NULL)
32
+ RbAlignConfig *aligner_config = ptr;
33
+ if (aligner_config->config != NULL)
33
34
  {
34
- free(eqpairs);
35
- eqpairs = NULL;
35
+ free(aligner_config->config);
36
36
  }
37
- xfree(ptr);
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
- config_memsize(const void *ptr)
46
+ aligner_config_memsize(const void *ptr)
42
47
  {
43
- const EdlibAlignConfig *config = ptr;
44
- return sizeof(ptr) + 2 * sizeof(char) * (config->additionalEqualitiesLength);
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
- get_config(VALUE self)
53
+ aligner_get_config(VALUE self)
49
54
  {
50
- EdlibAlignConfig *ptr = NULL;
51
- TypedData_Get_Struct(self, EdlibAlignConfig, &config_type, ptr);
55
+ RbAlignConfig *aligner_config = NULL;
56
+ TypedData_Get_Struct(self, RbAlignConfig, &config_type, aligner_config);
57
+ return aligner_config->config;
58
+ }
52
59
 
53
- return ptr;
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 = get_config(self);
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 = get_config(self);
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 = get_config(self);
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 = get_config(self);
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 = get_config(self);
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 = get_config(self);
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 = get_config(self);
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 = get_config(self);
316
- return set_additional_equalities(config, equalities);
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 = get_config(self);
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
- aligner_initialize(VALUE self, VALUE k, VALUE mode, VALUE task, VALUE additional_equalities)
351
+ aligner_initialize_raw(VALUE self, VALUE k, VALUE mode, VALUE task, VALUE additional_equalities)
336
352
  {
337
- EdlibAlignConfig *config = get_config(self);
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 = get_config(self);
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, config_allocate);
431
- rb_define_private_method(cAligner, "initialize_raw", aligner_initialize, 4);
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
@@ -1,3 +1,3 @@
1
1
  module Edlib
2
- VERSION = '0.0.5'
2
+ VERSION = '0.0.6'
3
3
  end
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.5
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-10-31 00:00:00.000000000 Z
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