Class: Nanoarrow::CArrayView

Inherits:
Object
  • Object
show all
Defined in:
ext/nanoarrow/array_view.c

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.from_schema(schema) ⇒ Object



40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
# File 'ext/nanoarrow/array_view.c', line 40

static VALUE array_view_from_schema(VALUE klass, VALUE schema)
{
    struct ArrowArrayView* c_array_view;
    VALUE base = alloc_c_array_view(&c_array_view);

    schema_t* schema_ptr;
    GetSchema(schema, schema_ptr);

    struct ArrowError error;
    int code = ArrowArrayViewInitFromSchema(c_array_view, schema_ptr->ptr, &error);
    raise_message_not_ok(&error, "ArrowArrayViewInitFromSchema()", code);

    array_view_t* view;
    VALUE obj = TypedData_Make_Struct(klass, array_view_t, &array_view_data_type, view);
    view->base = base;
    view->array_base = Qnil;
    view->ptr = c_array_view;
    return obj;
}

Instance Method Details

#child(idx) ⇒ Object



87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
# File 'ext/nanoarrow/array_view.c', line 87

static VALUE array_view_child(VALUE self, VALUE idx)
{
    array_view_t* view;
    GetArrayView(self, view);

    int64_t i = NUM2LL(idx);
    if (i < 0 || i >= view->ptr->n_children)
        rb_raise(rb_eIndexError, "out of range");

    VALUE child = array_view_allocate(cCArrayView);
    array_view_t* child_ptr;
    GetArrayView(child, child_ptr);
    child_ptr->base = view->base;
    child_ptr->ptr = view->ptr->children[i];

    return child;
}

#childrenObject



105
106
107
108
109
110
111
112
# File 'ext/nanoarrow/array_view.c', line 105

static VALUE array_view_children(VALUE self)
{
    int64_t n_children = NUM2LL(array_view_n_children(self));
    VALUE children = rb_ary_new();
    for (int64_t i = 0; i < n_children; i++)
        rb_ary_push(children, array_view_child(self, LL2NUM(i)));
    return children;
}

#each_binaryObject



179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
# File 'ext/nanoarrow/array_view.c', line 179

static VALUE array_view_each_binary(VALUE self)
{
    array_view_t* view;
    GetArrayView(self, view);

    for (int64_t i = 0; i < view->ptr->length; i++)
    {
        VALUE v;
        if (ArrowArrayViewIsNull(view->ptr, i))
            v = Qnil;
        else
        {
            struct ArrowBufferView bv = ArrowArrayViewGetBytesUnsafe(view->ptr, i);
            v = rb_str_new(bv.data.data, bv.size_bytes);
        }
        rb_yield(v);
    }

    return self;
}

#each_boolObject



114
115
116
117
118
119
120
121
122
123
# File 'ext/nanoarrow/array_view.c', line 114

static VALUE array_view_each_bool(VALUE self)
{
    array_view_t* view;
    GetArrayView(self, view);

    for (int64_t i = 0; i < view->ptr->length; i++)
        rb_yield(ArrowArrayViewIsNull(view->ptr, i) ? Qnil : ArrowArrayViewGetIntUnsafe(view->ptr, i) ? Qtrue : Qfalse);

    return self;
}

#each_decimal(bitwidth, precision, scale) ⇒ Object



200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
# File 'ext/nanoarrow/array_view.c', line 200

static VALUE array_view_each_decimal(VALUE self, VALUE bitwidth, VALUE precision, VALUE scale)
{
    array_view_t* view;
    GetArrayView(self, view);

    struct ArrowDecimal decimal;
    ArrowDecimalInit(&decimal, NUM2INT(bitwidth), NUM2INT(precision), NUM2INT(scale));

    struct ArrowBuffer buffer;
    ArrowBufferInit(&buffer);

    for (int64_t i = 0; i < view->ptr->length; i++)
    {
        VALUE v;
        if (ArrowArrayViewIsNull(view->ptr, i))
            v = Qnil;
        else
        {
            ArrowArrayViewGetDecimalUnsafe(view->ptr, i, &decimal);
            int code = ArrowDecimalAppendStringToBuffer(&decimal, &buffer);
            raise_error_not_ok("ArrowDecimalAppendStringToBuffer()", code);
            v = rb_str_new((char*) buffer.data, buffer.size_bytes);
            ArrowBufferReset(&buffer);
        }
        rb_yield(v);
    }

    return self;
}

#each_doubleObject



147
148
149
150
151
152
153
154
155
156
# File 'ext/nanoarrow/array_view.c', line 147

static VALUE array_view_each_double(VALUE self)
{
    array_view_t* view;
    GetArrayView(self, view);

    for (int64_t i = 0; i < view->ptr->length; i++)
        rb_yield(ArrowArrayViewIsNull(view->ptr, i) ? Qnil : DBL2NUM(ArrowArrayViewGetDoubleUnsafe(view->ptr, i)));

    return self;
}

#each_intObject



125
126
127
128
129
130
131
132
133
134
# File 'ext/nanoarrow/array_view.c', line 125

static VALUE array_view_each_int(VALUE self)
{
    array_view_t* view;
    GetArrayView(self, view);

    for (int64_t i = 0; i < view->ptr->length; i++)
        rb_yield(ArrowArrayViewIsNull(view->ptr, i) ? Qnil : LL2NUM(ArrowArrayViewGetIntUnsafe(view->ptr, i)));

    return self;
}

#each_stringObject



158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
# File 'ext/nanoarrow/array_view.c', line 158

static VALUE array_view_each_string(VALUE self)
{
    array_view_t* view;
    GetArrayView(self, view);

    for (int64_t i = 0; i < view->ptr->length; i++)
    {
        VALUE v;
        if (ArrowArrayViewIsNull(view->ptr, i))
            v = Qnil;
        else
        {
            struct ArrowStringView sv = ArrowArrayViewGetStringUnsafe(view->ptr, i);
            v = rb_str_new(sv.data, sv.size_bytes);
        }
        rb_yield(v);
    }

    return self;
}

#each_uintObject



136
137
138
139
140
141
142
143
144
145
# File 'ext/nanoarrow/array_view.c', line 136

static VALUE array_view_each_uint(VALUE self)
{
    array_view_t* view;
    GetArrayView(self, view);

    for (int64_t i = 0; i < view->ptr->length; i++)
        rb_yield(ArrowArrayViewIsNull(view->ptr, i) ? Qnil : ULL2NUM(ArrowArrayViewGetUIntUnsafe(view->ptr, i)));

    return self;
}

#n_childrenObject



79
80
81
82
83
84
85
# File 'ext/nanoarrow/array_view.c', line 79

static VALUE array_view_n_children(VALUE self)
{
    array_view_t* view;
    GetArrayView(self, view);

    return LL2NUM(view->ptr->n_children);
}

#set_array(array) ⇒ Object



60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
# File 'ext/nanoarrow/array_view.c', line 60

static VALUE array_view_set_array(VALUE self, VALUE array)
{
    array_view_t* view;
    GetArrayView(self, view);

    struct ArrowError error;
    int code;

    array_t* array_ptr;
    GetArray(array, array_ptr);

    code = ArrowArrayViewSetArray(view->ptr, array_ptr->ptr, &error);

    raise_message_not_ok(&error, "ArrowArrayViewSetArray()", code);
    view->array_base = array_ptr->base;

    return self;
}