Class: Gnista::Hash
- Inherits:
-
Object
- Object
- Gnista::Hash
- Includes:
- Enumerable
- Defined in:
- lib/gnista.rb,
ext/gnista/gnista.c
Instance Attribute Summary collapse
-
#hashpath ⇒ Object
readonly
Returns the value of attribute hashpath.
-
#logpath ⇒ Object
readonly
Returns the value of attribute logpath.
Class Method Summary collapse
Instance Method Summary collapse
- #close ⇒ Object (also: #close!)
- #collisions ⇒ Object
- #each ⇒ Object
- #empty? ⇒ Boolean
- #get(key) ⇒ Object (also: #[])
- #has_key?(key) ⇒ Boolean (also: #include?, #member?, #contains?, #exists?)
- #initialize(hash_filename, log_filename) ⇒ Object constructor
- #inspect ⇒ Object
- #keys ⇒ Object
- #length ⇒ Object (also: #size)
- #maxkeylen ⇒ Object
- #maxvaluelen ⇒ Object
- #open? ⇒ Boolean
- #values ⇒ Object
Constructor Details
#initialize(hash_filename, log_filename) ⇒ Object
377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 |
# File 'ext/gnista/gnista.c', line 377 static VALUE method_hash_initialize(VALUE self, VALUE hash_filename, VALUE log_filename) { sparkey_returncode returncode; instance_hashreader *i_hashreader = get_hashreader(self); Check_Type(hash_filename, T_STRING); Check_Type(log_filename, T_STRING); returncode = sparkey_hash_open(&i_hashreader->hashreader, RSTRING_PTR(hash_filename), RSTRING_PTR(log_filename)); if (returncode != SPARKEY_SUCCESS) { raise_sparkey(returncode); } else { i_hashreader->open = true; rb_iv_set(self, "@hashpath", hash_filename); rb_iv_set(self, "@logpath", log_filename); } return Qnil; } |
Instance Attribute Details
#hashpath ⇒ Object (readonly)
Returns the value of attribute hashpath.
37 38 39 |
# File 'lib/gnista.rb', line 37 def hashpath @hashpath end |
#logpath ⇒ Object (readonly)
Returns the value of attribute logpath.
37 38 39 |
# File 'lib/gnista.rb', line 37 def logpath @logpath end |
Class Method Details
.write(args) ⇒ Object
351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 |
# File 'ext/gnista/gnista.c', line 351 static VALUE method_hash_write(VALUE klass, VALUE args) { sparkey_returncode returncode; int len = RARRAY_LEN(args); int hash_size = 0; if (len > 3 || len < 2) { rb_raise(rb_eArgError, "Wrong number of arguments"); } Check_Type(rb_ary_entry(args, 0), T_STRING); Check_Type(rb_ary_entry(args, 1), T_STRING); if (len == 3) { Check_Type(rb_ary_entry(args, 2), T_FIXNUM); hash_size = NUM2INT(rb_ary_entry(args, 2)); } returncode = sparkey_hash_write(RSTRING_PTR(rb_ary_entry(args, 0)), RSTRING_PTR(rb_ary_entry(args, 1)), hash_size); if (returncode != SPARKEY_SUCCESS) { raise_sparkey(returncode); } return Qnil; } |
Instance Method Details
#close ⇒ Object Also known as: close!
397 398 399 400 401 402 403 404 |
# File 'ext/gnista/gnista.c', line 397 static VALUE method_hash_close(VALUE self) { instance_hashreader *i_hashreader = get_hashreader(self); check_open(i_hashreader->open); sparkey_hash_close(&i_hashreader->hashreader); i_hashreader->open = false; return Qnil; } |
#collisions ⇒ Object
543 544 545 546 547 548 549 550 551 |
# File 'ext/gnista/gnista.c', line 543 static VALUE method_hash_collisions(VALUE self) { instance_hashreader *i_hashreader = get_hashreader(self); uint64_t collisions; check_open(i_hashreader->open); collisions = sparkey_hash_numcollisions(i_hashreader->hashreader); return INT2NUM(collisions); } |
#each ⇒ Object
406 407 408 409 410 411 412 413 414 415 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 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 |
# File 'ext/gnista/gnista.c', line 406 static VALUE method_hash_each(VALUE self) { sparkey_returncode returncode; instance_hashreader *i_hashreader = get_hashreader(self); sparkey_logiter *logiter; check_open(i_hashreader->open); if (!rb_block_given_p()) { return rb_funcall(self, rb_intern("to_enum"), 0); } sparkey_logreader *logreader = sparkey_hash_getreader(i_hashreader->hashreader); returncode = sparkey_logiter_create(&logiter, logreader); if (returncode != SPARKEY_SUCCESS) { raise_sparkey(returncode); } uint8_t *keybuf = malloc(sparkey_logreader_maxkeylen(logreader)); uint8_t *valuebuf = malloc(sparkey_logreader_maxvaluelen(logreader)); while (i_hashreader->open) { returncode = sparkey_logiter_hashnext(logiter, i_hashreader->hashreader); if (sparkey_logiter_state(logiter) != SPARKEY_ITER_ACTIVE) { break; } uint64_t wanted_keylen = sparkey_logiter_keylen(logiter); uint64_t actual_keylen; returncode = sparkey_logiter_fill_key(logiter, sparkey_hash_getreader(i_hashreader->hashreader), wanted_keylen, keybuf, &actual_keylen); if (returncode != SPARKEY_SUCCESS) { free(keybuf); free(valuebuf); raise_sparkey(returncode); } else if (wanted_keylen != actual_keylen) { free(keybuf); free(valuebuf); rb_raise(GnistaException, "Corrupt entry in logreader."); } uint64_t wanted_valuelen = sparkey_logiter_valuelen(logiter); uint64_t actual_valuelen; returncode = sparkey_logiter_fill_value(logiter, sparkey_hash_getreader(i_hashreader->hashreader), wanted_valuelen, valuebuf, &actual_valuelen); if (returncode != SPARKEY_SUCCESS) { free(keybuf); free(valuebuf); raise_sparkey(returncode); } else if (wanted_valuelen != actual_valuelen) { free(keybuf); free(valuebuf); rb_raise(GnistaException, "Corrupt entry in logreader."); } rb_yield_values(2, rb_str_new((char *)keybuf, actual_keylen), rb_str_new((char *)valuebuf, actual_valuelen)); } free(keybuf); free(valuebuf); sparkey_logiter_close(&logiter); check_open(i_hashreader->open); return self; } |
#empty? ⇒ Boolean
51 52 53 |
# File 'lib/gnista.rb', line 51 def empty? return length == 0 end |
#get(key) ⇒ Object Also known as: []
472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 |
# File 'ext/gnista/gnista.c', line 472 static VALUE method_hash_get(VALUE self, VALUE key) { sparkey_returncode returncode; instance_hashreader *i_hashreader = get_hashreader(self); sparkey_logiter *logiter; check_open(i_hashreader->open); Check_Type(key, T_STRING); returncode = sparkey_logiter_create(&logiter, sparkey_hash_getreader(i_hashreader->hashreader)); if (returncode != SPARKEY_SUCCESS) { raise_sparkey(returncode); } key = StringValue(key); returncode = sparkey_hash_get(i_hashreader->hashreader, (uint8_t*)RSTRING_PTR(key), RSTRING_LEN(key), logiter); if (sparkey_logiter_state(logiter) != SPARKEY_ITER_ACTIVE) { return Qnil; } uint64_t wanted_valuelen = sparkey_logiter_valuelen(logiter); uint8_t *valuebuf = malloc(wanted_valuelen); uint64_t actual_valuelen; returncode = sparkey_logiter_fill_value(logiter, sparkey_hash_getreader(i_hashreader->hashreader), wanted_valuelen, valuebuf, &actual_valuelen); if (returncode != SPARKEY_SUCCESS) { free(valuebuf); raise_sparkey(returncode); } else if (wanted_valuelen != actual_valuelen) { free(valuebuf); rb_raise(GnistaException, "Corrupt entry in hash."); } sparkey_logiter_close(&logiter); VALUE v = rb_str_new((char *)valuebuf, actual_valuelen); free(valuebuf); return v; } |
#has_key?(key) ⇒ Boolean Also known as: include?, member?, contains?, exists?
47 48 49 |
# File 'lib/gnista.rb', line 47 def has_key?(key) return self[key] != nil end |
#inspect ⇒ Object
55 56 57 |
# File 'lib/gnista.rb', line 55 def inspect %(#<#{self.class} #{@hashpath.inspect} #{@logpath.inspect}>) end |
#keys ⇒ Object
39 40 41 |
# File 'lib/gnista.rb', line 39 def keys map {|key,value| key } end |
#length ⇒ Object Also known as: size
533 534 535 536 537 538 539 540 541 |
# File 'ext/gnista/gnista.c', line 533 static VALUE method_hash_length(VALUE self) { instance_hashreader *i_hashreader = get_hashreader(self); uint64_t numentries; check_open(i_hashreader->open); numentries = sparkey_hash_numentries(i_hashreader->hashreader); return INT2NUM(numentries); } |
#maxkeylen ⇒ Object
513 514 515 516 517 518 519 520 521 |
# File 'ext/gnista/gnista.c', line 513 static VALUE method_hash_maxkeylen(VALUE self) { instance_hashreader *i_hashreader = get_hashreader(self); uint64_t maxkeylen; check_open(i_hashreader->open); maxkeylen = sparkey_logreader_maxkeylen(sparkey_hash_getreader(i_hashreader->hashreader)); return INT2NUM(maxkeylen); } |
#maxvaluelen ⇒ Object
523 524 525 526 527 528 529 530 531 |
# File 'ext/gnista/gnista.c', line 523 static VALUE method_hash_maxvaluelen(VALUE self) { instance_hashreader *i_hashreader = get_hashreader(self); uint64_t maxvaluelen; check_open(i_hashreader->open); maxvaluelen = sparkey_logreader_maxvaluelen(sparkey_hash_getreader(i_hashreader->hashreader)); return INT2NUM(maxvaluelen); } |
#open? ⇒ Boolean
553 554 555 556 557 558 559 560 561 |
# File 'ext/gnista/gnista.c', line 553 static VALUE method_hash_open(VALUE self) { instance_hashreader *i_hashreader = get_hashreader(self); if (i_hashreader->open) { return Qtrue; } else { return Qfalse; } } |
#values ⇒ Object
43 44 45 |
# File 'lib/gnista.rb', line 43 def values map {|key,value| value } end |