visualize_helper 0.0.10.27 → 0.0.10.28

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
  SHA1:
3
- metadata.gz: 3f2f9c1de5d9b0195c106f2c6b869bdae2711864
4
- data.tar.gz: 8b5e01587c9ccd2e5d7bf158f80183983de2b95d
3
+ metadata.gz: b4100947c618bdc4518f2f89923495306bfbecfb
4
+ data.tar.gz: 04e6517f9f601470538a1f11fc706df5fa593752
5
5
  SHA512:
6
- metadata.gz: e9fb451f383a415fea20d4d355990d9e3798f77e8e82056f3d60b32d044f7941659fe2ea3de9c99d890557f26e24249165ae082d3492df87ed962ce90b3ccecf
7
- data.tar.gz: 1a2405ba64a3d15088b9f0396b5e8f4c33b51b5082bf4c9ca493d8ee2ab98634cc077e55c6c9f7223d57b26688ca7313cf5526803b7667b475d9841f12bc885d
6
+ metadata.gz: a86285f6896472865180c8ce1e303eb2d4752698aad4a0e55744bd1ebcf5058409294c8852f576b82581903471dcbd8b74414a57cc44277951ac179c1831c9cc
7
+ data.tar.gz: 7d534c2c3bf23c1d72b329a39ec105124a02feb129dee77adee43969f2e73a9011c8df3266070d0fd0c5d87350ca9781e1d3f92858abe2e7588b7d0b024312c1
@@ -1,11 +1,105 @@
1
1
  #include <ruby.h>
2
+ #include <stdlib.h>
3
+ #include <string.h>
4
+ #include <stdio.h>
5
+ #include <math.h>
2
6
 
3
- // Hello World without parameters
4
- static VALUE hello_world()
7
+
8
+ int myCompare (const void * a, const void * b ) {
9
+ const char *pa = *(const char**)a;
10
+ const char *pb = *(const char**)b;
11
+
12
+ return strcmp(pa,pb);
13
+ }
14
+
15
+ // recive a sorted array of strings and return a sorted array with only the unique elements
16
+ static VALUE uniq(VALUE sorted_array){
17
+
18
+ //initialize return variable in ruby
19
+ VALUE uniq_array = rb_ary_new();
20
+
21
+ //initialize variables for compare
22
+ char* previous;
23
+ char* current;
24
+
25
+ for( int i = 0; i < RARRAY_LEN(sorted_array); i++){
26
+ VALUE current_temp = rb_ary_entry(sorted_array,i);
27
+ current = StringValuePtr(current_temp);
28
+ // initial case, when there is no previous
29
+ if ( i == 0 ){
30
+ VALUE previous_temp = rb_ary_entry(sorted_array,i);
31
+ previous = StringValuePtr(previous_temp);
32
+ rb_ary_push(uniq_array,rb_ary_entry(sorted_array,i));
33
+ } else {
34
+ if (strcmp(previous,current) != 0 ){
35
+ rb_ary_push(uniq_array,rb_ary_entry(sorted_array,i));
36
+ VALUE previous_temp = rb_ary_entry(sorted_array,i);
37
+ previous = StringValuePtr(previous_temp);
38
+ }
39
+ }
40
+ }
41
+
42
+ return uniq_array;
43
+ }
44
+
45
+ //static VALUE join(VALUE self, VALUE strings){
46
+ static VALUE join(VALUE strings){
47
+
48
+ // initial variables
49
+ char* joined;
50
+ int strings_size = RARRAY_LEN(strings);
51
+ int string_size;
52
+ VALUE string_temp;
53
+ VALUE result;
54
+
55
+ string_temp = rb_ary_entry(strings,0);
56
+ string_size = strlen(StringValuePtr(string_temp));
57
+ joined = (char*) malloc(strings_size + 1);
58
+ sprintf(joined,"%s", StringValuePtr(string_temp));
59
+
60
+ for (int i = 1 ; i < strings_size; i++) {
61
+
62
+ string_temp = rb_ary_entry(strings,i);
63
+ string_size = strlen(StringValuePtr(string_temp));
64
+
65
+ joined = (char*) realloc(joined, string_size + strlen(joined) + 1);
66
+ sprintf(joined,"%s,%s", joined, StringValuePtr(string_temp));
67
+
68
+ }
69
+ result = rb_str_new2(joined);
70
+ free(joined);
71
+ return result;
72
+ }
73
+
74
+
75
+
76
+ // Receive an array of unsorted strings with repeated strings and return a single a sorted array with unique elementes or with all
77
+ // strings = array of strings
78
+ // unique = 0 or 1 if want to call unique or not
79
+ static VALUE sort_uniq(VALUE self, VALUE strings, int unique)
5
80
  {
6
- return rb_str_new_cstr("hello world");
81
+ int strings_size = RARRAY_LEN(strings);
82
+ const char *input[strings_size];
83
+
84
+ for (int i = 0; i< strings_size; i++){
85
+ VALUE string = rb_ary_entry(strings,i);
86
+ input[i] = StringValuePtr(string);
87
+ }
88
+
89
+ int stringLen = sizeof(input) / sizeof(char *);
90
+ qsort(input, stringLen, sizeof(char *), myCompare);
91
+
92
+
93
+ // Transform the result input into a ruby array
94
+ VALUE resultado = rb_ary_new();
95
+ for (int i=0; i<stringLen; ++i) {
96
+ rb_ary_push(resultado,rb_str_new2(input[i]));
97
+ }
98
+
99
+ return (unique == 0 ) ? resultado : uniq(resultado);
7
100
  }
8
101
 
102
+
9
103
  // Find the index of the target value inside array
10
104
  int findIndex(VALUE intervals, size_t size, int target)
11
105
  {
@@ -108,25 +202,171 @@ static VALUE min_max_period(VALUE self, VALUE min, VALUE max, VALUE hash, VALUE
108
202
  }
109
203
 
110
204
 
205
+ //function to remove element from a array of strings
206
+ static VALUE remove_entry_from_array (VALUE strings, char* element){
207
+
208
+ //initial variables
209
+ VALUE result = rb_ary_new();
210
+ char* current_value;
211
+ VALUE current_value_temp;
212
+
213
+ for(int i = 0; i < RARRAY_LEN(strings); i++){
214
+ current_value_temp = rb_ary_entry(strings,i);
215
+ current_value = StringValuePtr(current_value_temp);
216
+ if (strcmp(current_value, element) != 0) {
217
+ rb_ary_push(result,rb_ary_entry(strings,i));
218
+ }
219
+ }
220
+
221
+ return result;
222
+ }
223
+
224
+ // Function to generate the boxes and links of each trajectory
225
+ static VALUE generate_boxes_and_links(VALUE self, VALUE min, VALUE max, VALUE aggr, VALUE boxes, VALUE links, VALUE dict, VALUE type_agroupment, VALUE value)
226
+ {
227
+
228
+ VALUE seq_key_result;
229
+ VALUE prox_key_result;
230
+ // Initial Variables
231
+ int length_seq_sorted;
232
+ int length_prox_sorted;
233
+ VALUE result_final;
234
+ VALUE boxes_period_value;
235
+ VALUE links_period_value;
236
+ VALUE seq_key;
237
+ VALUE prox_key;
238
+ VALUE seq;
239
+ VALUE aggr_prox;
240
+ int seq_size;
241
+ int aggr_prox_size;
242
+ int prox;
243
+ int aggr_size = RARRAY_LEN(aggr);
244
+ char* link_key;
245
+ char* period_s;
246
+ char* prox_s;
247
+
248
+ for(int period = 0; period < aggr_size; period++ ){
249
+ seq_key = rb_ary_new();
250
+
251
+ if (period < aggr_size - 1) {
252
+ prox_key = rb_ary_new();
253
+ }
254
+ seq = rb_ary_entry(aggr,period);
255
+ seq_size = (int) RARRAY_LEN(seq);
256
+
257
+ // Translate sequences with dict
258
+ if (seq_size == 0) {
259
+ rb_ary_push(seq_key,rb_hash_aref(dict, rb_str_new2("M-2")));
260
+ }else{
261
+
262
+ for(int i = 0; i < seq_size; i++ ) {
263
+ rb_ary_push(seq_key,rb_hash_aref(dict,rb_ary_entry(seq,i)));
264
+ }
265
+ }
266
+
267
+ // agroup by unique or not
268
+ if ( strcmp(StringValuePtr(type_agroupment),"s") == 0 ) {
269
+ //sort with uniq
270
+ seq_key = sort_uniq(self,seq_key,1);
271
+ }else{
272
+ //sort without uniq
273
+ seq_key = sort_uniq(self,seq_key,0);
274
+ }
275
+
276
+ // if there is "no-event" and other one selected, remove the "no-event"
277
+ length_seq_sorted = (strcmp(StringValuePtr(type_agroupment),"s") == 0 ) ? RARRAY_LEN(seq_key) : RARRAY_LEN(uniq(seq_key)) ;
278
+ if (length_seq_sorted != 1) {
279
+ seq_key = remove_entry_from_array(seq_key,"M-3");
280
+ }
281
+
282
+ // Generate the key
283
+ seq_key_result = join(seq_key);
284
+
285
+ //
286
+ boxes_period_value = rb_hash_aref(rb_ary_entry(boxes,period),seq_key_result);
287
+ if (boxes_period_value == Qnil) {
288
+ rb_hash_aset(rb_ary_entry(boxes,period),seq_key_result, value);
289
+ }else {
290
+ rb_hash_aset(rb_ary_entry(boxes,period),seq_key_result,INT2FIX(FIX2INT(boxes_period_value) + FIX2INT(value)));
291
+ }
292
+
293
+ prox = period +1;
294
+
295
+ if (prox < aggr_size ) {
296
+ aggr_prox = rb_ary_entry(aggr,prox);
297
+ aggr_prox_size = (int) RARRAY_LEN(aggr_prox);
298
+ if ( aggr_prox_size == 0) {
299
+ rb_ary_push(prox_key,rb_hash_aref(dict, rb_str_new2("M-2")));
300
+ }else{
301
+ for(int i = 0; i < aggr_prox_size ; i++ ) {
302
+ rb_ary_push(prox_key,rb_hash_aref(dict,rb_ary_entry(aggr_prox,i)));
303
+ }
304
+ }
305
+
306
+ // agroup by unique or not
307
+ if ( strcmp(StringValuePtr(type_agroupment),"n") == 0 ) {
308
+ //sort with uniq
309
+ prox_key = sort_uniq(self,prox_key,1);
310
+ }else{
311
+ //sort without uniq
312
+ prox_key = prox_key;
313
+ }
314
+
315
+ //
316
+ // if there is "no-event" and other one selected, remove the "no-event"
317
+ length_prox_sorted = (strcmp(StringValuePtr(type_agroupment),"n") == 0 ) ? RARRAY_LEN(prox_key) : RARRAY_LEN(sort_uniq(self,prox_key,1)) ;
318
+ if (length_prox_sorted != 1) {
319
+ prox_key = remove_entry_from_array(prox_key,"M-3");
320
+ }
321
+
322
+ // Generate the key
323
+ prox_key_result = join(prox_key);
324
+
325
+ // generate a key link
326
+ period_s = ( period == 0 ) ? (char*) malloc(1) : (char*) malloc(floor(log10(abs(period))) + 1);
327
+ prox_s = ( prox == 0 ) ? (char*) malloc(1) : (char*) malloc(floor(log10(abs(prox))) + 1);
328
+ sprintf(period_s,"%d",period);
329
+ sprintf(prox_s,"%d",prox);
330
+ link_key = (char*) malloc( strlen(period_s) + strlen(StringValuePtr(seq_key_result)) + strlen(prox_s) + strlen(StringValuePtr(prox_key_result)) + 3);
331
+ sprintf(link_key,"%s_%s;%s_%s", period_s,StringValuePtr(seq_key_result),prox_s,StringValuePtr(prox_key_result));
332
+
333
+ links_period_value = rb_hash_aref(rb_ary_entry(links,period),rb_str_new2(link_key));
334
+ if (links_period_value == Qnil) {
335
+ rb_hash_aset(rb_ary_entry(links,period),rb_str_new2(link_key),value);
336
+ }else {
337
+ rb_hash_aset(rb_ary_entry(links,period),rb_str_new2(link_key), INT2FIX(FIX2INT(links_period_value) + FIX2INT(value)));
338
+ }
111
339
 
112
- static VALUE test(VALUE self, VALUE param){
113
340
 
114
- int a = INT2FIX(param);
115
- return FIX2INT(a);
341
+
342
+ }//end prox < aggr_size
343
+
344
+ }// end for
345
+
346
+ VALUE ab = rb_ary_new();
347
+ rb_ary_push(ab,1);
348
+ rb_ary_push(ab,2);
349
+ //return result_final;
350
+ return Qnil;
116
351
  }
117
352
 
353
+
354
+
118
355
  // Main function called when the gem is loaded
119
356
  void Init_visualize_helper(void) {
120
357
 
121
358
  // Register the VisualizeHelper module
122
359
  VALUE mVisualizeHelper = rb_define_module("VisualizeHelper");
123
360
 
124
- // Register the method Hello World without parameters
125
- rb_define_singleton_method(mVisualizeHelper, "hello_world", hello_world, 0);
126
-
127
361
  // Register the method min_max_period
128
362
  rb_define_singleton_method(mVisualizeHelper, "min_max_period", min_max_period, 5);
129
363
 
130
- // Register the method for development testing
131
- rb_define_singleton_method(mVisualizeHelper, "test", test, 1 );
364
+ // Register the method generate_boxes_and_links
365
+ rb_define_singleton_method(mVisualizeHelper, "generate_boxes_and_links", generate_boxes_and_links, 8);
366
+
367
+ // Register the method sort
368
+ rb_define_singleton_method(mVisualizeHelper, "sort_uniq", sort_uniq, 2 );
369
+
370
+ // Register the method sort
371
+ rb_define_singleton_method(mVisualizeHelper, "join", join, 1 );
132
372
  }
@@ -1,3 +1,3 @@
1
1
  module VisualizeHelper
2
- VERSION = "0.0.10.27"
2
+ VERSION = "0.0.10.28"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: visualize_helper
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.10.27
4
+ version: 0.0.10.28
5
5
  platform: ruby
6
6
  authors:
7
7
  - Raphael Ottoni Santiago Machado de Faria
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-03-30 00:00:00.000000000 Z
11
+ date: 2016-04-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler