supplement 1.6.1 → 1.7
Sign up to get free protection for your applications and to get access to all the features.
- data/README +1 -1
- data/lib/supplement.c +58 -12
- data/lib/supplement.h +2 -2
- metadata +9 -5
- checksums.yaml +0 -15
data/README
CHANGED
data/lib/supplement.c
CHANGED
@@ -53,7 +53,9 @@ static struct supplement_flock *flocks_root = NULL;
|
|
53
53
|
|
54
54
|
|
55
55
|
static VALUE supplement_index_blk( VALUE);
|
56
|
+
static VALUE supplement_index_ref( VALUE, VALUE);
|
56
57
|
static VALUE supplement_rindex_blk( VALUE);
|
58
|
+
static VALUE supplement_rindex_ref( VALUE, VALUE);
|
57
59
|
#ifdef FEATURE_ARRAY_INDEX_WITH_BLOCK
|
58
60
|
static VALUE supplement_index_val( VALUE, VALUE);
|
59
61
|
static VALUE supplement_rindex_val( VALUE, VALUE);
|
@@ -899,10 +901,12 @@ rb_ary_indexes( VALUE ary)
|
|
899
901
|
|
900
902
|
/*
|
901
903
|
* call-seq:
|
904
|
+
* pick( ref) -> obj or nil
|
902
905
|
* pick { |elem| ... } -> obj or nil
|
903
906
|
*
|
904
|
-
* Deletes the element where
|
905
|
-
* <
|
907
|
+
* Deletes the element where first <code>ref === obj</code> is true or the
|
908
|
+
* <em>block</em> first returns <code>true</code>. The result will be
|
909
|
+
* <code>nil</code> if nothing is found.
|
906
910
|
*
|
907
911
|
* a = %w(ant bat cat dog)
|
908
912
|
* a.pick { |e| e =~ /^c/ } #=> "cat"
|
@@ -911,16 +915,36 @@ rb_ary_indexes( VALUE ary)
|
|
911
915
|
*/
|
912
916
|
|
913
917
|
VALUE
|
914
|
-
rb_ary_pick( VALUE ary)
|
918
|
+
rb_ary_pick( int argc, VALUE *argv, VALUE ary)
|
915
919
|
{
|
920
|
+
VALUE ref;
|
916
921
|
VALUE pos;
|
922
|
+
VALUE p;
|
923
|
+
|
924
|
+
if (rb_scan_args( argc, argv, "01", &ref) == 1)
|
925
|
+
pos = supplement_index_ref( ary, ref);
|
926
|
+
else
|
927
|
+
pos = supplement_index_blk( ary);
|
917
928
|
|
918
|
-
pos = supplement_index_blk( ary);
|
919
929
|
if (!NIL_P( pos))
|
920
930
|
return rb_funcall( ary, id_delete_at, 1, pos);
|
921
931
|
return Qnil;
|
922
932
|
}
|
923
933
|
|
934
|
+
VALUE
|
935
|
+
supplement_index_ref( VALUE ary, VALUE ref)
|
936
|
+
{
|
937
|
+
long i, j;
|
938
|
+
|
939
|
+
if (!id_eqq)
|
940
|
+
id_eqq = rb_intern( "===");
|
941
|
+
for (i = 0, j = RARRAY_LEN( ary); j > 0; i++, j--) {
|
942
|
+
if (RTEST( rb_funcall( ref, id_eqq, 1, RARRAY_PTR( ary)[ i])))
|
943
|
+
return LONG2NUM( i);
|
944
|
+
}
|
945
|
+
return Qnil;
|
946
|
+
}
|
947
|
+
|
924
948
|
VALUE
|
925
949
|
supplement_index_blk( VALUE ary)
|
926
950
|
{
|
@@ -935,11 +959,12 @@ supplement_index_blk( VALUE ary)
|
|
935
959
|
|
936
960
|
/*
|
937
961
|
* call-seq:
|
962
|
+
* rpick( ref) -> obj or nil
|
938
963
|
* rpick { |elem| ... } -> obj or nil
|
939
964
|
*
|
940
|
-
* Deletes the element where
|
941
|
-
* <
|
942
|
-
* from right to left.
|
965
|
+
* Deletes the element where first <code>ref === obj</code> is true or the
|
966
|
+
* <em>block</em> first returns <code>true</code>. The result will be
|
967
|
+
* <code>nil</code> if nothing is found. Search from right to left.
|
943
968
|
*
|
944
969
|
* a = %w(ant cow bat cat dog)
|
945
970
|
* a.rpick { |e| e =~ /^c/ } #=> "cat"
|
@@ -948,16 +973,37 @@ supplement_index_blk( VALUE ary)
|
|
948
973
|
*/
|
949
974
|
|
950
975
|
VALUE
|
951
|
-
rb_ary_rpick( VALUE ary)
|
976
|
+
rb_ary_rpick( int argc, VALUE *argv, VALUE ary)
|
952
977
|
{
|
978
|
+
VALUE ref;
|
953
979
|
VALUE pos;
|
980
|
+
VALUE p;
|
981
|
+
|
982
|
+
if (rb_scan_args( argc, argv, "01", &ref) == 1)
|
983
|
+
pos = supplement_rindex_ref( ary, ref);
|
984
|
+
else
|
985
|
+
pos = supplement_rindex_blk( ary);
|
954
986
|
|
955
|
-
pos = supplement_rindex_blk( ary);
|
956
987
|
if (!NIL_P( pos))
|
957
988
|
return rb_funcall( ary, id_delete_at, 1, pos);
|
958
989
|
return Qnil;
|
959
990
|
}
|
960
991
|
|
992
|
+
VALUE
|
993
|
+
supplement_rindex_ref( VALUE ary, VALUE ref)
|
994
|
+
{
|
995
|
+
long i;
|
996
|
+
|
997
|
+
if (!id_eqq)
|
998
|
+
id_eqq = rb_intern( "===");
|
999
|
+
for (i = RARRAY_LEN( ary); i;) {
|
1000
|
+
--i;
|
1001
|
+
if (RTEST( rb_funcall( ref, id_eqq, 1, RARRAY_PTR( ary)[ i])))
|
1002
|
+
return LONG2NUM( i);
|
1003
|
+
}
|
1004
|
+
return Qnil;
|
1005
|
+
}
|
1006
|
+
|
961
1007
|
VALUE
|
962
1008
|
supplement_rindex_blk( VALUE ary)
|
963
1009
|
{
|
@@ -965,7 +1011,7 @@ supplement_rindex_blk( VALUE ary)
|
|
965
1011
|
|
966
1012
|
for (i = RARRAY_LEN( ary); i;) {
|
967
1013
|
--i;
|
968
|
-
if (rb_yield( RARRAY_PTR( ary)[ i]))
|
1014
|
+
if (RTEST( rb_yield( RARRAY_PTR( ary)[ i])))
|
969
1015
|
return LONG2NUM( i);
|
970
1016
|
}
|
971
1017
|
return Qnil;
|
@@ -1610,8 +1656,8 @@ void Init_supplement( void)
|
|
1610
1656
|
rb_define_method( rb_cArray, "notempty?", rb_ary_notempty_p, 0);
|
1611
1657
|
rb_define_method( rb_cArray, "indexes", rb_ary_indexes, 0);
|
1612
1658
|
rb_define_alias( rb_cArray, "keys", "indexes");
|
1613
|
-
rb_define_method( rb_cArray, "pick", rb_ary_pick,
|
1614
|
-
rb_define_method( rb_cArray, "rpick", rb_ary_rpick,
|
1659
|
+
rb_define_method( rb_cArray, "pick", rb_ary_pick, -1);
|
1660
|
+
rb_define_method( rb_cArray, "rpick", rb_ary_rpick, -1);
|
1615
1661
|
#ifdef FEATURE_ARRAY_INDEX_WITH_BLOCK
|
1616
1662
|
rb_define_method( rb_cArray, "index", rb_ary_index, -1);
|
1617
1663
|
rb_define_method( rb_cArray, "rindex", rb_ary_rindex, -1);
|
data/lib/supplement.h
CHANGED
@@ -44,8 +44,8 @@ extern VALUE rb_str_axe( int, VALUE *, VALUE);
|
|
44
44
|
|
45
45
|
extern VALUE rb_ary_notempty_p( VALUE);
|
46
46
|
extern VALUE rb_ary_indexes( VALUE);
|
47
|
-
extern VALUE rb_ary_pick( VALUE);
|
48
|
-
extern VALUE rb_ary_rpick( VALUE);
|
47
|
+
extern VALUE rb_ary_pick( int, VALUE *, VALUE);
|
48
|
+
extern VALUE rb_ary_rpick( int, VALUE *, VALUE);
|
49
49
|
#ifdef FEATURE_ARRAY_INDEX_WITH_BLOCK
|
50
50
|
extern VALUE rb_ary_index( int, VALUE *, VALUE);
|
51
51
|
extern VALUE rb_ary_rindex( int, VALUE *, VALUE);
|
metadata
CHANGED
@@ -1,18 +1,20 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: supplement
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: '1.7'
|
5
|
+
prerelease:
|
5
6
|
platform: ruby
|
6
7
|
authors:
|
7
8
|
- Bertram Scharpf
|
8
9
|
autorequire:
|
9
10
|
bindir: bin
|
10
11
|
cert_chain: []
|
11
|
-
date: 2013-
|
12
|
+
date: 2013-11-25 00:00:00.000000000 Z
|
12
13
|
dependencies:
|
13
14
|
- !ruby/object:Gem::Dependency
|
14
15
|
name: autorake
|
15
16
|
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
16
18
|
requirements:
|
17
19
|
- - ! '>='
|
18
20
|
- !ruby/object:Gem::Version
|
@@ -20,6 +22,7 @@ dependencies:
|
|
20
22
|
type: :runtime
|
21
23
|
prerelease: false
|
22
24
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
23
26
|
requirements:
|
24
27
|
- - ! '>='
|
25
28
|
- !ruby/object:Gem::Version
|
@@ -53,7 +56,6 @@ files:
|
|
53
56
|
- LICENSE
|
54
57
|
homepage: http://www.bertram-scharpf.de/software/supplement
|
55
58
|
licenses: []
|
56
|
-
metadata: {}
|
57
59
|
post_install_message:
|
58
60
|
rdoc_options:
|
59
61
|
- --charset
|
@@ -63,11 +65,13 @@ rdoc_options:
|
|
63
65
|
require_paths:
|
64
66
|
- lib
|
65
67
|
required_ruby_version: !ruby/object:Gem::Requirement
|
68
|
+
none: false
|
66
69
|
requirements:
|
67
70
|
- - ! '>='
|
68
71
|
- !ruby/object:Gem::Version
|
69
72
|
version: '0'
|
70
73
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
74
|
+
none: false
|
71
75
|
requirements:
|
72
76
|
- - ! '>='
|
73
77
|
- !ruby/object:Gem::Version
|
@@ -75,8 +79,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
75
79
|
requirements:
|
76
80
|
- Ruby and the autorake gem
|
77
81
|
rubyforge_project: NONE
|
78
|
-
rubygems_version:
|
82
|
+
rubygems_version: 1.8.25
|
79
83
|
signing_key:
|
80
|
-
specification_version:
|
84
|
+
specification_version: 3
|
81
85
|
summary: Simple Ruby extensions
|
82
86
|
test_files: []
|
checksums.yaml
DELETED
@@ -1,15 +0,0 @@
|
|
1
|
-
---
|
2
|
-
!binary "U0hBMQ==":
|
3
|
-
metadata.gz: !binary |-
|
4
|
-
MGY0Y2M4OGFjNTc5Zjg1OGVmNTU3NzFlMzhkZDhkNjlhMWQxNGNkMQ==
|
5
|
-
data.tar.gz: !binary |-
|
6
|
-
ZjcyODM0M2VjYWI1NWI3MDE0YzBlYzRjZTYxMDc0MzAwMTRkNmQ0Nw==
|
7
|
-
!binary "U0hBNTEy":
|
8
|
-
metadata.gz: !binary |-
|
9
|
-
Y2ZmZjRlY2MwOTVhMGFlNDlkNjgxZDM5NTRlYzQ5OWU3NTUxNGI3NTA0Y2Zh
|
10
|
-
MGI1ZWY2MDc5ODU2MTkxMjY5ZjhhYjRmNWU2ZDg4ODM0MzczM2JjYzdiZjA4
|
11
|
-
YzFiNWM4YWFiNWEwYTY5OWFkY2EzMjhiYTc3NjQwMDY1ZjdjODM=
|
12
|
-
data.tar.gz: !binary |-
|
13
|
-
NzQ2ODFjZjQ4MDg4NDU5OWYwYmRjNTJmMjYxMjlkNmY1NTNhNjgzNDVjODc0
|
14
|
-
YzExNGMzOTg1NjNiZTE0MDRhYWRmZjQ3MzQ2NWI1ZWFjOGQ0NDc3YTNkMzY4
|
15
|
-
ZjlkYTdhN2M2MWIzNWI2MGE0MmYzYjYyZDc2NzBlMTYxNDE4MGI=
|