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 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