Class: Ragel::Array

Inherits:
Object
  • Object
show all
Defined in:
lib/ragel/array.rb,
lib/ragel/array/replace.rb,
lib/ragel/array/version.rb,
ext/ragel/array/ragel_array.c

Defined Under Namespace

Classes: Replace

Constant Summary collapse

VERSION =
'0.1.0'

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(rb_string, rb_size) ⇒ Object



19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# File 'ext/ragel/array/ragel_array.c', line 19

static VALUE ragel_array_initialize(VALUE self, VALUE rb_string, VALUE rb_size) {
  Check_Type(rb_string, T_STRING);
  Check_Type(rb_size, T_FIXNUM);

  ragel_array_t *array;
  Data_Get_Struct(self, ragel_array_t, array);

  long size = FIX2LONG(rb_size);
  array->data = calloc(size, sizeof(uint32_t));
  array->size = size;

  char *string = StringValueCStr(rb_string);
  long length = RSTRING_LEN(rb_string);
  char buffer[5];

  for (long data_index = 0, num_start = 0, num_end = 0; data_index < size; data_index += 1) {
    while (string[num_end++] != ' ' && num_end < length);
    strncpy(buffer, string + num_start, num_end - num_start);

    array->data[data_index] = (uint32_t) atoi(buffer);
    num_start = num_end;
  }

  return self;
}

Class Method Details

.replace(filepath) ⇒ Object



8
9
10
11
12
# File 'lib/ragel/array.rb', line 8

def self.replace(filepath)
  require 'ragel/array/replace'

  File.write(filepath, Replace.replace(File.read(filepath)))
end

Instance Method Details

#[](rb_index) ⇒ Object



45
46
47
48
49
50
51
52
53
54
55
56
57
# File 'ext/ragel/array/ragel_array.c', line 45

static VALUE ragel_array_get(VALUE self, VALUE rb_index) {
  Check_Type(rb_index, T_FIXNUM);

  ragel_array_t *array;
  Data_Get_Struct(self, ragel_array_t, array);

  long index = FIX2LONG(rb_index);
  if (index < 0 || (unsigned) index >= array->size) {
    return Qnil;
  }

  return LONG2FIX(array->data[index]);
}