multi_string_replace 1.0.1 → 1.0.2

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
- SHA1:
3
- metadata.gz: 7df96929960d7cc7880414e1f4e42f288e905878
4
- data.tar.gz: 6c5668af300849f038a8d26af55d1da7062e73aa
2
+ SHA256:
3
+ metadata.gz: 3c5074c0fbcc2384a188df631c14c47759bda65a435c3414095068fa77681952
4
+ data.tar.gz: 8c93d10f3b3e4f04a5316cc39a784933d307e7ebec29f624efc19c0d06a59db6
5
5
  SHA512:
6
- metadata.gz: b7a4437b7b187c37f10cca9f11c6a872d019a146c7438336432de35d8adffc5da03fcb0e4569b3c84b959029365e0c96997171d3b77a024b429e99bbe400131f
7
- data.tar.gz: 9615bd748ec7f2d76f3f55ad9b41069931136e5c9ffdabd2dfead2855bc1752df994d2d0085f842090a1d1935eba9112973dce4a6fe7188e082c66c41f5c7b72
6
+ metadata.gz: 2e94c9f113f6bbdaac2b1e0d4e94d7a21cd0cfe95ec88e26c0bad4aa277560c0df3ec109e5426316d7dff46e651ac652fa69f87c09a1a6a46c257d8c4654e948
7
+ data.tar.gz: 47f44d101bc6885d24ef617b073d85204540c8c3e2edbdf0e08d1e041bf32fc435f051d6e12b154565422f2f32575c91692b93a073899180d727a52d2cefacfc
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- multi_string_replace (1.0.0)
4
+ multi_string_replace (1.0.2)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
data/README.md CHANGED
@@ -1,3 +1,7 @@
1
+
2
+ [![Gem](https://img.shields.io/gem/v/multi_string_replace.svg)](https://rubygems.org/gems/multi_string_replace)
3
+
4
+
1
5
  # MultiStringReplace
2
6
 
3
7
  A fast multiple string replace library for ruby. Uses a C implementation of the Aho–Corasick Algorithm based
@@ -53,6 +57,8 @@ MultiStringReplace 0.260000 0.010000 0.270000 ( 0.277135)
53
57
  mreplace 0.260000 0.020000 0.280000 ( 0.281935)
54
58
  ```
55
59
 
60
+ Benchmark sources can be found here: <https://github.com/jedld/multi_word_replace/blob/master/bin/benchmark.rb>
61
+
56
62
  ## Development
57
63
 
58
64
  After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
@@ -43,7 +43,7 @@ bool aho_add_trie_node(struct aho_trie * restrict t, struct aho_text_t * restric
43
43
  __aho_trie_node_init(travasal_node->child_list[0]);
44
44
  travasal_node->child_list[0]->text = node_text;
45
45
  travasal_node->child_list[0]->parent = travasal_node;
46
-
46
+ travasal_node->child_list[0]->failure_link = &(t->root);
47
47
  travasal_node = travasal_node->child_list[0];
48
48
  continue;
49
49
  }
@@ -81,7 +81,7 @@ bool aho_add_trie_node(struct aho_trie * restrict t, struct aho_text_t * restric
81
81
  __aho_trie_node_init(child_node);
82
82
  child_node->text = node_text;
83
83
  child_node->parent = travasal_node;
84
-
84
+ child_node->failure_link = &(t->root);
85
85
  travasal_node = child_node;
86
86
  }
87
87
  }
@@ -99,7 +99,6 @@ bool __aho_connect_link(struct aho_trie_node* p, struct aho_trie_node* q)
99
99
  {
100
100
  struct aho_trie_node *pf = NULL;
101
101
  int i = 0;
102
-
103
102
  /* is root node */
104
103
  if (p->parent == NULL)
105
104
  {
@@ -108,6 +107,7 @@ bool __aho_connect_link(struct aho_trie_node* p, struct aho_trie_node* q)
108
107
  }
109
108
 
110
109
  pf = p->failure_link;
110
+
111
111
  for (i=0; i < pf->child_count; i++)
112
112
  {
113
113
  /* check child node of failure link(p) */
@@ -161,7 +161,6 @@ void aho_connect_link(struct aho_trie * restrict t)
161
161
  for (i=0; i < p->child_count; i++)
162
162
  {
163
163
  struct aho_trie_node *pf = p;
164
-
165
164
  aho_queue_enqueue(&queue, p->child_list[i]);
166
165
  q = p->child_list[i];
167
166
 
@@ -169,9 +168,9 @@ void aho_connect_link(struct aho_trie * restrict t)
169
168
  {
170
169
  pf = pf->failure_link;
171
170
  }
171
+
172
172
  }
173
173
  }
174
-
175
174
  aho_queue_destroy(&queue);
176
175
  }
177
176
 
@@ -32,6 +32,7 @@ void aho_destroy(struct ahocorasick * restrict aho)
32
32
  int aho_add_match_text(struct ahocorasick * restrict aho, const char* text, unsigned int len)
33
33
  {
34
34
  struct aho_text_t* a_text = NULL;
35
+
35
36
  if (aho->accumulate_text_id == AHO_MAX_TEXT_ID)
36
37
  {
37
38
  return -1;
@@ -42,11 +43,14 @@ int aho_add_match_text(struct ahocorasick * restrict aho, const char* text, unsi
42
43
  goto lack_free_mem;
43
44
 
44
45
  a_text->text = (char*) malloc(sizeof(char)*len);
46
+
45
47
  if (!a_text->text)
46
48
  goto lack_free_mem;
47
49
 
48
50
  a_text->id = aho->accumulate_text_id++;
51
+
49
52
  memcpy(a_text->text, text, len);
53
+
50
54
  a_text->len = len;
51
55
  a_text->prev = NULL;
52
56
  a_text->next = NULL;
@@ -66,6 +70,7 @@ int aho_add_match_text(struct ahocorasick * restrict aho, const char* text, unsi
66
70
  return a_text->id;
67
71
 
68
72
  lack_free_mem:
73
+
69
74
  return -1;
70
75
  }
71
76
 
@@ -122,7 +127,9 @@ void aho_create_trie(struct ahocorasick * restrict aho)
122
127
 
123
128
  for (iter = aho->text_list_head; iter != NULL; iter = iter->next)
124
129
  {
130
+
125
131
  aho_add_trie_node(&(aho->trie), iter);
132
+
126
133
  }
127
134
 
128
135
  aho_connect_link(&(aho->trie));
@@ -204,7 +211,10 @@ VALUE aho_replace_text(struct ahocorasick * restrict aho, const char* data,
204
211
  }
205
212
 
206
213
  // concatenate from last_concat_pos
207
- rb_str_cat(main_result, &data[last_concat_pos], pos - last_concat_pos);
214
+ if (pos > last_concat_pos) {
215
+ rb_str_cat(main_result, &data[last_concat_pos], pos - last_concat_pos);
216
+ }
217
+
208
218
  // concatenate replace
209
219
  if (values[result->id] == NULL) {
210
220
  VALUE proc_result = rb_funcall(ruby_values[result->id], rb_intern("call"), 0);
@@ -65,7 +65,6 @@ VALUE multi_string_replace(VALUE self, VALUE body, VALUE replace)
65
65
  int state;
66
66
 
67
67
  struct ahocorasick aho;
68
- aho_init(&aho);
69
68
 
70
69
  char *target = StringValuePtr(body);
71
70
  VALUE keys = rb_funcall(replace, rb_intern("keys"), 0);
@@ -75,6 +74,8 @@ VALUE multi_string_replace(VALUE self, VALUE body, VALUE replace)
75
74
  long value_sizes[size];
76
75
  char *values[size];
77
76
  VALUE ruby_val[size];
77
+
78
+ aho_init(&aho);
78
79
 
79
80
  for(long idx = 0; idx < size; idx++) {
80
81
  VALUE entry = rb_ary_entry(keys, idx);
@@ -94,9 +95,8 @@ VALUE multi_string_replace(VALUE self, VALUE body, VALUE replace)
94
95
  ruby_val[idx] = value;
95
96
  }
96
97
 
97
- aho_add_match_text(&aho, StringValuePtr(entry), RSTRING_LEN(entry));
98
+ aho_add_match_text(&aho, StringValuePtr(entry), RSTRING_LEN(entry));
98
99
  }
99
-
100
100
  aho_create_trie(&aho);
101
101
 
102
102
  VALUE result = aho_replace_text(&aho, target, RSTRING_LEN(body), values, value_sizes, ruby_val);
@@ -1,3 +1,3 @@
1
1
  module MultiStringReplace
2
- VERSION = "1.0.1"
2
+ VERSION = "1.0.2"
3
3
  end
@@ -11,7 +11,7 @@ Gem::Specification.new do |spec|
11
11
 
12
12
  spec.summary = %q{A fast multiple string replace library for ruby. Uses a C implementation of the Aho–Corasick Algorithm}
13
13
  spec.description = %q{A fast multiple string replace library for ruby. Uses a C implementation of the Aho–Corasick Algorithm}
14
- spec.homepage = "https://github.com/jedld/mutli_word_replace"
14
+ spec.homepage = "https://github.com/jedld/multi_string_replace"
15
15
  spec.license = "MIT"
16
16
 
17
17
  # Prevent pushing this gem to RubyGems.org. To allow pushes either set the 'allowed_push_host'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: multi_string_replace
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.1
4
+ version: 1.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Joseph Dayo
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-09-28 00:00:00.000000000 Z
11
+ date: 2018-09-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -101,7 +101,7 @@ files:
101
101
  - multi_string_replace.gemspec
102
102
  - replaced.txt
103
103
  - replaced2.txt
104
- homepage: https://github.com/jedld/mutli_word_replace
104
+ homepage: https://github.com/jedld/multi_string_replace
105
105
  licenses:
106
106
  - MIT
107
107
  metadata:
@@ -122,7 +122,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
122
122
  version: '0'
123
123
  requirements: []
124
124
  rubyforge_project:
125
- rubygems_version: 2.2.2
125
+ rubygems_version: 2.7.7
126
126
  signing_key:
127
127
  specification_version: 4
128
128
  summary: A fast multiple string replace library for ruby. Uses a C implementation