416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
|
# File 'ext/text_sentencer_c/text_sentencer.c', line 416
VALUE text_sentencer_segment(VALUE self, VALUE rb_text) {
TextSentencer *ts;
TypedData_Get_Struct(self, TextSentencer, &text_sentencer_type, ts);
Check_Type(rb_text, T_STRING);
const char *text = StringValueCStr(rb_text);
long *segment_starts = NULL;
long *segment_ends = NULL;
long num_segments = 0;
struct segment_args args = {ts, text, segment_starts, segment_ends, num_segments};
rb_thread_call_without_gvl(segment_without_gvl, &args, RUBY_UBF_IO, NULL);
VALUE segments = rb_ary_new();
for (long i = 0; i < args.num_segments; ++i) {
VALUE segment = rb_ary_new();
rb_ary_push(segment, LONG2NUM(args.segment_starts[i]));
rb_ary_push(segment, LONG2NUM(args.segment_ends[i]));
rb_ary_push(segments, segment);
}
free(args.segment_starts);
free(args.segment_ends);
return segments;
}
|