mperham-memcache-client 1.6.2 → 1.6.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/History.txt +5 -0
- data/lib/continuum.rb +54 -23
- metadata +15 -7
- data/ext/memcache/binary_search.c +0 -54
- data/ext/memcache/extconf.rb +0 -5
data/History.txt
CHANGED
data/lib/continuum.rb
CHANGED
@@ -1,31 +1,62 @@
|
|
1
1
|
module Continuum
|
2
2
|
POINTS_PER_SERVER = 160 # this is the default in libmemcached
|
3
3
|
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
4
|
+
class << self
|
5
|
+
|
6
|
+
begin
|
7
|
+
require 'inline'
|
8
|
+
inline do |builder|
|
9
|
+
builder.c <<-EOM
|
10
|
+
int binary_search(VALUE ary, unsigned int r) {
|
11
|
+
int upper = RARRAY_LEN(ary) - 1;
|
12
|
+
int lower = 0;
|
13
|
+
int idx = 0;
|
14
|
+
ID value = rb_intern("value");
|
15
|
+
|
16
|
+
while (lower <= upper) {
|
17
|
+
idx = (lower + upper) / 2;
|
18
|
+
|
19
|
+
VALUE continuumValue = rb_funcall(RARRAY_PTR(ary)[idx], value, 0);
|
20
|
+
unsigned int l = NUM2UINT(continuumValue);
|
21
|
+
if (l == r) {
|
22
|
+
return idx;
|
23
|
+
}
|
24
|
+
else if (l > r) {
|
25
|
+
upper = idx - 1;
|
26
|
+
}
|
27
|
+
else {
|
28
|
+
lower = idx + 1;
|
29
|
+
}
|
30
|
+
}
|
31
|
+
return upper;
|
32
|
+
}
|
33
|
+
EOM
|
34
|
+
end
|
35
|
+
rescue Exception => e
|
36
|
+
puts "Unable to generate native code, falling back to Ruby: #{e.message}"
|
37
|
+
|
38
|
+
# slow but pure ruby version
|
39
|
+
# Find the closest index in Continuum with value <= the given value
|
40
|
+
def binary_search(ary, value, &block)
|
41
|
+
upper = ary.size - 1
|
42
|
+
lower = 0
|
43
|
+
idx = 0
|
44
|
+
|
45
|
+
while(lower <= upper) do
|
46
|
+
idx = (lower + upper) / 2
|
47
|
+
comp = ary[idx].value <=> value
|
48
|
+
|
49
|
+
if comp == 0
|
50
|
+
return idx
|
51
|
+
elsif comp > 0
|
52
|
+
upper = idx - 1
|
53
|
+
else
|
54
|
+
lower = idx + 1
|
55
|
+
end
|
26
56
|
end
|
57
|
+
return upper
|
27
58
|
end
|
28
|
-
|
59
|
+
|
29
60
|
end
|
30
61
|
end
|
31
62
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mperham-memcache-client
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.6.
|
4
|
+
version: 1.6.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Eric Hodel
|
@@ -11,16 +11,25 @@ autorequire:
|
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
13
|
|
14
|
-
date: 2009-02-
|
14
|
+
date: 2009-02-05 00:00:00 -08:00
|
15
15
|
default_executable:
|
16
|
-
dependencies:
|
17
|
-
|
16
|
+
dependencies:
|
17
|
+
- !ruby/object:Gem::Dependency
|
18
|
+
name:
|
19
|
+
- RubyInline
|
20
|
+
version_requirement:
|
21
|
+
version_requirements: !ruby/object:Gem::Requirement
|
22
|
+
requirements:
|
23
|
+
- - ">="
|
24
|
+
- !ruby/object:Gem::Version
|
25
|
+
version: "0"
|
26
|
+
version:
|
18
27
|
description: A Ruby library for accessing memcached.
|
19
28
|
email: mperham@gmail.com
|
20
29
|
executables: []
|
21
30
|
|
22
|
-
extensions:
|
23
|
-
|
31
|
+
extensions: []
|
32
|
+
|
24
33
|
extra_rdoc_files: []
|
25
34
|
|
26
35
|
files:
|
@@ -31,7 +40,6 @@ files:
|
|
31
40
|
- lib/continuum.rb
|
32
41
|
- lib/memcache.rb
|
33
42
|
- lib/memcache_util.rb
|
34
|
-
- ext/memcache/binary_search.c
|
35
43
|
has_rdoc: false
|
36
44
|
homepage: http://github.com/mperham/memcache-client
|
37
45
|
post_install_message:
|
@@ -1,54 +0,0 @@
|
|
1
|
-
#include "ruby.h"
|
2
|
-
#include "stdio.h"
|
3
|
-
|
4
|
-
/*
|
5
|
-
def binary_search(ary, value)
|
6
|
-
upper = ary.size - 1
|
7
|
-
lower = 0
|
8
|
-
idx = 0
|
9
|
-
|
10
|
-
while(lower <= upper) do
|
11
|
-
idx = (lower + upper) / 2
|
12
|
-
comp = ary[idx].value <=> value
|
13
|
-
|
14
|
-
if comp == 0
|
15
|
-
return idx
|
16
|
-
elsif comp > 0
|
17
|
-
upper = idx - 1
|
18
|
-
else
|
19
|
-
lower = idx + 1
|
20
|
-
end
|
21
|
-
end
|
22
|
-
return upper
|
23
|
-
end
|
24
|
-
*/
|
25
|
-
static VALUE binary_search(VALUE self, VALUE ary, VALUE number) {
|
26
|
-
int upper = RARRAY_LEN(ary) - 1;
|
27
|
-
int lower = 0;
|
28
|
-
int idx = 0;
|
29
|
-
unsigned int r = NUM2UINT(number);
|
30
|
-
ID value = rb_intern("value");
|
31
|
-
|
32
|
-
while (lower <= upper) {
|
33
|
-
idx = (lower + upper) / 2;
|
34
|
-
|
35
|
-
VALUE continuumValue = rb_funcall(RARRAY_PTR(ary)[idx], value, 0);
|
36
|
-
unsigned int l = NUM2UINT(continuumValue);
|
37
|
-
if (l == r) {
|
38
|
-
return INT2FIX(idx);
|
39
|
-
}
|
40
|
-
else if (l > r) {
|
41
|
-
upper = idx - 1;
|
42
|
-
}
|
43
|
-
else {
|
44
|
-
lower = idx + 1;
|
45
|
-
}
|
46
|
-
}
|
47
|
-
return INT2FIX(upper);
|
48
|
-
}
|
49
|
-
|
50
|
-
VALUE cContinuum;
|
51
|
-
void Init_binary_search() {
|
52
|
-
cContinuum = rb_define_module("Continuum");
|
53
|
-
rb_define_module_function(cContinuum, "binary_search", binary_search, 2);
|
54
|
-
}
|