Class: InMemoryKV::Str2Str

Inherits:
Object
  • Object
show all
Includes:
Enumerable
Defined in:
ext/inmemory_kv.c

Instance Method Summary collapse

Instance Method Details

#[](vkey) ⇒ Object



572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
# File 'ext/inmemory_kv.c', line 572

static VALUE
rb_kv_get(VALUE self, VALUE vkey) {
	inmemory_kv* kv;
	const char *key;
	size_t size;
	hash_item* item;

	GetKV(self, kv);
	StringValue(vkey);
	key = RSTRING_PTR(vkey);
	size = RSTRING_LEN(vkey);
	item = kv_fetch(kv, key, size);
	if (item == NULL) return Qnil;
	return item_val_str(item);
}

#[]=(vkey, vval) ⇒ Object



635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
# File 'ext/inmemory_kv.c', line 635

static VALUE
rb_kv_set(VALUE self, VALUE vkey, VALUE vval) {
	inmemory_kv* kv;
	const char *key, *val;
	size_t ksize, vsize;

	GetKV(self, kv);
	StringValue(vkey);
	StringValue(vval);
	key = RSTRING_PTR(vkey);
	ksize = RSTRING_LEN(vkey);
	val = RSTRING_PTR(vval);
	vsize = RSTRING_LEN(vval);

	if (kv_insert(kv, key, ksize, val, vsize) == NULL) {
		rb_raise(rb_eNoMemError, "could not malloc");
	}

	return vval;
}

#clearObject



897
898
899
900
901
902
903
904
# File 'ext/inmemory_kv.c', line 897

static VALUE
rb_kv_clear(VALUE self) {
	inmemory_kv* kv;
	GetKV(self, kv);
	kv_destroy(kv);
	memset(kv, 0, sizeof(*kv));
	return self;
}

#countObject



728
729
730
731
732
733
# File 'ext/inmemory_kv.c', line 728

static VALUE
rb_kv_size(VALUE self) {
	inmemory_kv* kv;
	GetKV(self, kv);
	return UINT2NUM(kv->tab.size);
}

#data_sizeObject



742
743
744
745
746
747
# File 'ext/inmemory_kv.c', line 742

static VALUE
rb_kv_data_size(VALUE self) {
	inmemory_kv* kv;
	GetKV(self, kv);
	return SIZET2NUM(kv->total_size);
}

#delete(vkey) ⇒ Object



656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
# File 'ext/inmemory_kv.c', line 656

static VALUE
rb_kv_del(VALUE self, VALUE vkey) {
	inmemory_kv* kv;
	const char *key;
	size_t size;
	hash_item* item;
	VALUE res;

	GetKV(self, kv);
	StringValue(vkey);
	key = RSTRING_PTR(vkey);
	size = RSTRING_LEN(vkey);
	item = kv_fetch(kv, key, size);
	if (item == NULL) return Qnil;
	res = item_val_str(item);
	kv_delete(kv, item);
	return res;
}

#down(vkey) ⇒ Object



605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
# File 'ext/inmemory_kv.c', line 605

static VALUE
rb_kv_down(VALUE self, VALUE vkey) {
	inmemory_kv* kv;
	const char *key;
	size_t size;
	hash_item* item;

	GetKV(self, kv);
	StringValue(vkey);
	key = RSTRING_PTR(vkey);
	size = RSTRING_LEN(vkey);
	item = kv_fetch(kv, key, size);
	if (item == NULL) return Qnil;
	kv_down(kv, item);
	return item_val_str(item);
}

#eachObject



843
844
845
846
847
848
849
850
# File 'ext/inmemory_kv.c', line 843

static VALUE
rb_kv_each(VALUE self) {
	inmemory_kv* kv;
	GetKV(self, kv);
	RETURN_ENUMERATOR(self, 0, 0);
	kv_each(kv, pair_i, NULL);
	return self;
}

#each_keyObject



825
826
827
828
829
830
831
832
# File 'ext/inmemory_kv.c', line 825

static VALUE
rb_kv_each_key(VALUE self) {
	inmemory_kv* kv;
	GetKV(self, kv);
	RETURN_ENUMERATOR(self, 0, 0);
	kv_each(kv, key_i, NULL);
	return self;
}

#each_pairObject



843
844
845
846
847
848
849
850
# File 'ext/inmemory_kv.c', line 843

static VALUE
rb_kv_each(VALUE self) {
	inmemory_kv* kv;
	GetKV(self, kv);
	RETURN_ENUMERATOR(self, 0, 0);
	kv_each(kv, pair_i, NULL);
	return self;
}

#each_valueObject



834
835
836
837
838
839
840
841
# File 'ext/inmemory_kv.c', line 834

static VALUE
rb_kv_each_val(VALUE self) {
	inmemory_kv* kv;
	GetKV(self, kv);
	RETURN_ENUMERATOR(self, 0, 0);
	kv_each(kv, val_i, NULL);
	return self;
}

#empty?Boolean

Returns:

  • (Boolean)


735
736
737
738
739
740
# File 'ext/inmemory_kv.c', line 735

static VALUE
rb_kv_empty_p(VALUE self) {
	inmemory_kv* kv;
	GetKV(self, kv);
	return kv->tab.size ? Qfalse : Qtrue;
}

#entriesObject



797
798
799
800
801
802
803
804
805
# File 'ext/inmemory_kv.c', line 797

static VALUE
rb_kv_entries(VALUE self) {
	inmemory_kv* kv;
	VALUE res;
	GetKV(self, kv);
	res = rb_ary_new2(kv->tab.size);
	kv_each(kv, pairs_i, (void*)res);
	return res;
}

#firstObject



675
676
677
678
679
680
681
682
683
684
685
686
687
# File 'ext/inmemory_kv.c', line 675

static VALUE
rb_kv_first(VALUE self) {
	inmemory_kv* kv;
	hash_item* item;
	VALUE key, val;

	GetKV(self, kv);
	item = kv_first(kv);
	if (item == NULL) return Qnil;
	key = item_key_str(item);
	val = item_val_str(item);
	return rb_assoc_new(key, val);
}

#has_key?(vkey) ⇒ Boolean

Returns:

  • (Boolean)


622
623
624
625
626
627
628
629
630
631
632
633
# File 'ext/inmemory_kv.c', line 622

static VALUE
rb_kv_include(VALUE self, VALUE vkey) {
	inmemory_kv* kv;
	const char *key;
	size_t size;

	GetKV(self, kv);
	StringValue(vkey);
	key = RSTRING_PTR(vkey);
	size = RSTRING_LEN(vkey);
	return kv_fetch(kv, key, size) ? Qtrue : Qfalse;
}

#include?(vkey) ⇒ Boolean

Returns:

  • (Boolean)


622
623
624
625
626
627
628
629
630
631
632
633
# File 'ext/inmemory_kv.c', line 622

static VALUE
rb_kv_include(VALUE self, VALUE vkey) {
	inmemory_kv* kv;
	const char *key;
	size_t size;

	GetKV(self, kv);
	StringValue(vkey);
	key = RSTRING_PTR(vkey);
	size = RSTRING_LEN(vkey);
	return kv_fetch(kv, key, size) ? Qtrue : Qfalse;
}

#initialize_copy(orig) ⇒ Object



888
889
890
891
892
893
894
895
# File 'ext/inmemory_kv.c', line 888

static VALUE
rb_kv_init_copy(VALUE self, VALUE orig) {
	inmemory_kv *origin, *new;
	GetKV(self, new);
	GetKV(orig, origin);
	kv_copy_to(origin, new);
	return self;
}

#inspectObject



873
874
875
876
877
878
879
880
881
882
883
884
885
886
# File 'ext/inmemory_kv.c', line 873

static VALUE
rb_kv_inspect(VALUE self) {
	struct inspect_arg ins;
	inmemory_kv* kv;
	GetKV(self, kv);
	ins.str = rb_str_buf_new2("<");
	rb_str_append(ins.str, rb_class_name(CLASS_OF(self)));
	if (kv->tab.size != 0) {
		ins.tmp = rb_str_buf_new(0);
		kv_each(kv, inspect_i, &ins);
	}
	rb_str_buf_cat2(ins.str, ">");
	return ins.str;
}

#keysObject



777
778
779
780
781
782
783
784
785
# File 'ext/inmemory_kv.c', line 777

static VALUE
rb_kv_keys(VALUE self) {
	inmemory_kv* kv;
	VALUE res;
	GetKV(self, kv);
	res = rb_ary_new2(kv->tab.size);
	kv_each(kv, keys_i, (void*)res);
	return res;
}

#shiftObject



689
690
691
692
693
694
695
696
697
698
699
700
701
702
# File 'ext/inmemory_kv.c', line 689

static VALUE
rb_kv_shift(VALUE self) {
	inmemory_kv* kv;
	hash_item* item;
	VALUE key, val;

	GetKV(self, kv);
	item = kv_first(kv);
	if (item == NULL) return Qnil;
	key = item_key_str(item);
	val = item_val_str(item);
	kv_delete(kv, item);
	return rb_assoc_new(key, val);
}

#sizeObject



728
729
730
731
732
733
# File 'ext/inmemory_kv.c', line 728

static VALUE
rb_kv_size(VALUE self) {
	inmemory_kv* kv;
	GetKV(self, kv);
	return UINT2NUM(kv->tab.size);
}

#total_sizeObject



749
750
751
752
753
754
# File 'ext/inmemory_kv.c', line 749

static VALUE
rb_kv_total_size(VALUE self) {
	inmemory_kv* kv;
	GetKV(self, kv);
	return SIZET2NUM(rb_kv_memsize(kv));
}

#unshift(vkey, vval) ⇒ Object



704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
# File 'ext/inmemory_kv.c', line 704

static VALUE
rb_kv_unshift(VALUE self, VALUE vkey, VALUE vval) {
	inmemory_kv* kv;
	const char *key, *val;
	size_t ksize, vsize;
	hash_item* item;

	GetKV(self, kv);
	StringValue(vkey);
	StringValue(vval);
	key = RSTRING_PTR(vkey);
	ksize = RSTRING_LEN(vkey);
	val = RSTRING_PTR(vval);
	vsize = RSTRING_LEN(vval);

	item = kv_insert(kv, key, ksize, val, vsize);
	if (item == NULL) {
		rb_raise(rb_eNoMemError, "could not malloc");
	}
	kv_down(kv, item);

	return vval;
}

#up(vkey) ⇒ Object



588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
# File 'ext/inmemory_kv.c', line 588

static VALUE
rb_kv_up(VALUE self, VALUE vkey) {
	inmemory_kv* kv;
	const char *key;
	size_t size;
	hash_item* item;

	GetKV(self, kv);
	StringValue(vkey);
	key = RSTRING_PTR(vkey);
	size = RSTRING_LEN(vkey);
	item = kv_fetch(kv, key, size);
	if (item == NULL) return Qnil;
	kv_up(kv, item);
	return item_val_str(item);
}

#valuesObject



787
788
789
790
791
792
793
794
795
# File 'ext/inmemory_kv.c', line 787

static VALUE
rb_kv_vals(VALUE self) {
	inmemory_kv* kv;
	VALUE res;
	GetKV(self, kv);
	res = rb_ary_new2(kv->tab.size);
	kv_each(kv, vals_i, (void*)res);
	return res;
}