ingramj-bitarray 0.1.0 → 0.1.1
Sign up to get free protection for your applications and to get access to all the features.
- data/VERSION +1 -1
- data/bitarray.gemspec +1 -1
- data/ext/bitarray.c +88 -1
- metadata +1 -1
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.1.
|
1
|
+
0.1.1
|
data/bitarray.gemspec
CHANGED
data/ext/bitarray.c
CHANGED
@@ -138,6 +138,11 @@ rb_bitarray_alloc(VALUE klass)
|
|
138
138
|
}
|
139
139
|
|
140
140
|
|
141
|
+
/* call-seq:
|
142
|
+
* BitArray.new(size)
|
143
|
+
*
|
144
|
+
* Return a new BitArray or the specified size.
|
145
|
+
*/
|
141
146
|
static VALUE
|
142
147
|
rb_bitarray_initialize(VALUE self, VALUE size)
|
143
148
|
{
|
@@ -155,6 +160,12 @@ rb_bitarray_initialize(VALUE self, VALUE size)
|
|
155
160
|
}
|
156
161
|
|
157
162
|
|
163
|
+
/* call-seq:
|
164
|
+
* bitarray.clone -> a_bitarray
|
165
|
+
* bitarray.dup -> a_bitarray
|
166
|
+
*
|
167
|
+
* Produces a copy of _bitarray_.
|
168
|
+
*/
|
158
169
|
static VALUE
|
159
170
|
rb_bitarray_clone(VALUE self)
|
160
171
|
{
|
@@ -174,6 +185,12 @@ rb_bitarray_clone(VALUE self)
|
|
174
185
|
}
|
175
186
|
|
176
187
|
|
188
|
+
/* call-seq:
|
189
|
+
* bitarray.size -> int
|
190
|
+
* bitarray.length -> int
|
191
|
+
*
|
192
|
+
* Returns the number of bits in _bitarray_.
|
193
|
+
*/
|
177
194
|
static VALUE
|
178
195
|
rb_bitarray_size(VALUE self)
|
179
196
|
{
|
@@ -184,6 +201,13 @@ rb_bitarray_size(VALUE self)
|
|
184
201
|
}
|
185
202
|
|
186
203
|
|
204
|
+
/* call-seq:
|
205
|
+
* bitarray.set_bit(index) -> bitarray
|
206
|
+
*
|
207
|
+
* Sets the bit at _index_ to 1. Negative indices count backwards from the end
|
208
|
+
* of _bitarray_. If _index_ is greater than the capacity of _bitarray_, an
|
209
|
+
* +IndexError+ is raised.
|
210
|
+
*/
|
187
211
|
static VALUE
|
188
212
|
rb_bitarray_set_bit(VALUE self, VALUE bit)
|
189
213
|
{
|
@@ -200,6 +224,11 @@ rb_bitarray_set_bit(VALUE self, VALUE bit)
|
|
200
224
|
}
|
201
225
|
|
202
226
|
|
227
|
+
/* call-seq:
|
228
|
+
* bitarray.set_all_bits -> bitarray
|
229
|
+
*
|
230
|
+
* Sets all bits to 1.
|
231
|
+
*/
|
203
232
|
static VALUE
|
204
233
|
rb_bitarray_set_all_bits(VALUE self)
|
205
234
|
{
|
@@ -214,6 +243,13 @@ rb_bitarray_set_all_bits(VALUE self)
|
|
214
243
|
}
|
215
244
|
|
216
245
|
|
246
|
+
/* call-seq:
|
247
|
+
* bitarray.clear_bit(index) -> bitarray
|
248
|
+
*
|
249
|
+
* Sets the bit at _index_ to 0. Negative indices count backwards from the end
|
250
|
+
* of _bitarray_. If _index_ is greater than the capacity of _bitarray_, an
|
251
|
+
* +IndexError+ is raised.
|
252
|
+
*/
|
217
253
|
static VALUE
|
218
254
|
rb_bitarray_clear_bit(VALUE self, VALUE bit)
|
219
255
|
{
|
@@ -230,6 +266,11 @@ rb_bitarray_clear_bit(VALUE self, VALUE bit)
|
|
230
266
|
}
|
231
267
|
|
232
268
|
|
269
|
+
/* call-seq:
|
270
|
+
* bitarray.clear_all_bits -> bitarray
|
271
|
+
*
|
272
|
+
* Sets all bits to 0.
|
273
|
+
*/
|
233
274
|
static VALUE
|
234
275
|
rb_bitarray_clear_all_bits(VALUE self)
|
235
276
|
{
|
@@ -244,6 +285,13 @@ rb_bitarray_clear_all_bits(VALUE self)
|
|
244
285
|
}
|
245
286
|
|
246
287
|
|
288
|
+
/* call-seq:
|
289
|
+
* bitarray[index] -> value
|
290
|
+
*
|
291
|
+
* Bit Reference---Returns the bit at _index_. Negative indices count backwards
|
292
|
+
* from the end of _bitarray_. If _index_ is greater than the capacity of
|
293
|
+
* _bitarray_, an +IndexError+ is raised.
|
294
|
+
*/
|
247
295
|
static VALUE
|
248
296
|
rb_bitarray_get_bit(VALUE self, VALUE bit)
|
249
297
|
{
|
@@ -262,6 +310,16 @@ rb_bitarray_get_bit(VALUE self, VALUE bit)
|
|
262
310
|
}
|
263
311
|
|
264
312
|
|
313
|
+
/* call-seq:
|
314
|
+
* bitarray[index] = value -> value
|
315
|
+
*
|
316
|
+
* Bit Assignment---Sets the bit at _index_. _value_ must be 0 or 1. Negative
|
317
|
+
* indices are allowed, and will count backwards from the end of _bitarray_.
|
318
|
+
*
|
319
|
+
* If _index_ is greater than the capacity of _bitarray_, an +IndexError+ is
|
320
|
+
* raised. If _value_ is something other than 0 or 1, a +RuntimeError+ is
|
321
|
+
* raised.
|
322
|
+
*/
|
265
323
|
static VALUE
|
266
324
|
rb_bitarray_assign_bit(VALUE self, VALUE bit, VALUE value)
|
267
325
|
{
|
@@ -273,7 +331,7 @@ rb_bitarray_assign_bit(VALUE self, VALUE bit, VALUE value)
|
|
273
331
|
|
274
332
|
int result = assign_bit(ba, index, bit_value);
|
275
333
|
if (result == 1) {
|
276
|
-
return
|
334
|
+
return value;
|
277
335
|
} else if (result == 0) {
|
278
336
|
rb_raise(rb_eIndexError, "index %ld out of bit array", (long)index);
|
279
337
|
} else {
|
@@ -282,6 +340,12 @@ rb_bitarray_assign_bit(VALUE self, VALUE bit, VALUE value)
|
|
282
340
|
}
|
283
341
|
|
284
342
|
|
343
|
+
/* call-seq:
|
344
|
+
* bitarray.inspect -> string
|
345
|
+
* bitarray.to_s -> string
|
346
|
+
*
|
347
|
+
* Create a printable version of _bitarray_.
|
348
|
+
*/
|
285
349
|
static VALUE
|
286
350
|
rb_bitarray_inspect(VALUE self)
|
287
351
|
{
|
@@ -302,6 +366,19 @@ rb_bitarray_inspect(VALUE self)
|
|
302
366
|
}
|
303
367
|
|
304
368
|
|
369
|
+
/* call-seq:
|
370
|
+
* bitarray.each {|bit| block } -> bitarray
|
371
|
+
*
|
372
|
+
* Calls +block+ once for each bit in _bitarray_, passing that bit as a
|
373
|
+
* parameter.
|
374
|
+
*
|
375
|
+
* ba = BitArray.new(10)
|
376
|
+
* ba.each {|bit| print bit, " " }
|
377
|
+
*
|
378
|
+
* produces:
|
379
|
+
*
|
380
|
+
* 0 0 0 0 0 0 0 0 0 0
|
381
|
+
*/
|
305
382
|
static VALUE
|
306
383
|
rb_bitarray_each(VALUE self)
|
307
384
|
{
|
@@ -319,6 +396,11 @@ rb_bitarray_each(VALUE self)
|
|
319
396
|
}
|
320
397
|
|
321
398
|
|
399
|
+
/* Document-class: BitArray
|
400
|
+
*
|
401
|
+
* An array of bits. Usage is similar to the standard Array class, but the only
|
402
|
+
* allowed elements are 1 and 0. BitArrays are not resizable.
|
403
|
+
*/
|
322
404
|
void
|
323
405
|
Init_bitarray()
|
324
406
|
{
|
@@ -327,7 +409,12 @@ Init_bitarray()
|
|
327
409
|
|
328
410
|
rb_define_method(rb_bitarray_class, "initialize",
|
329
411
|
rb_bitarray_initialize, 1);
|
412
|
+
|
413
|
+
/* TODO: apparently, we need to define an #initialize_copy method instead
|
414
|
+
* of clone.
|
415
|
+
*/
|
330
416
|
rb_define_method(rb_bitarray_class, "clone", rb_bitarray_clone, 0);
|
417
|
+
rb_define_alias(rb_bitarray_class, "dup", "clone");
|
331
418
|
rb_define_method(rb_bitarray_class, "size", rb_bitarray_size, 0);
|
332
419
|
rb_define_alias(rb_bitarray_class, "length", "size");
|
333
420
|
rb_define_method(rb_bitarray_class, "set_bit", rb_bitarray_set_bit, 1);
|