localmemcache 0.3.0 → 0.4.0
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/README +5 -2
- data/Rakefile +4 -0
- data/VERSION +1 -1
- data/bench/lmc_bench.rb +1 -1
- data/bench/tokyo_cabinet_bench +3 -0
- data/bench/tokyo_cabinet_bench.rb +20 -0
- data/site/doc/classes/LocalMemCache.html +146 -129
- data/site/doc/classes/LocalMemCache.src/M000001.html +1 -1
- data/site/doc/classes/LocalMemCache.src/M000002.html +26 -5
- data/site/doc/classes/LocalMemCache.src/M000003.html +16 -5
- data/site/doc/classes/LocalMemCache.src/M000004.html +7 -23
- data/site/doc/classes/LocalMemCache.src/M000005.html +7 -13
- data/site/doc/classes/LocalMemCache.src/M000006.html +4 -5
- data/site/doc/classes/LocalMemCache.src/M000007.html +6 -5
- data/site/doc/classes/LocalMemCache.src/M000008.html +6 -6
- data/site/doc/classes/LocalMemCache.src/M000009.html +1 -1
- data/site/doc/classes/LocalMemCache.src/M000010.html +4 -6
- data/site/doc/classes/LocalMemCache.src/M000011.html +4 -4
- data/site/doc/classes/LocalMemCache.src/M000012.html +4 -4
- data/site/doc/classes/LocalMemCache/ArgError.html +2 -2
- data/site/doc/classes/LocalMemCache/InitError.html +2 -2
- data/site/doc/classes/LocalMemCache/LocalMemCacheError.html +2 -2
- data/site/doc/classes/LocalMemCache/LockError.html +2 -2
- data/site/doc/classes/LocalMemCache/LockTimedOut.html +2 -2
- data/site/doc/classes/LocalMemCache/MemoryPoolClosed.html +2 -2
- data/site/doc/classes/LocalMemCache/MemoryPoolFull.html +2 -2
- data/site/doc/classes/LocalMemCache/OutOfMemoryError.html +2 -2
- data/site/doc/classes/LocalMemCache/RecoveryFailed.html +2 -2
- data/site/doc/classes/LocalMemCache/ShmError.html +2 -2
- data/site/doc/classes/LocalMemCache/ShmLockFailed.html +2 -2
- data/site/doc/classes/LocalMemCache/ShmUnlockFailed.html +2 -2
- data/site/doc/created.rid +1 -1
- data/site/doc/fr_class_index.html +2 -0
- data/site/doc/fr_file_index.html +3 -2
- data/site/doc/fr_method_index.html +17 -11
- data/site/doc/index.html +1 -1
- data/site/index.html +33 -17
- data/src/lmc_common.c +2 -1
- data/src/lmc_common.h +1 -1
- data/src/lmc_hashtable.c +62 -2
- data/src/lmc_hashtable.h +4 -1
- data/src/lmc_shm.c +1 -3
- data/src/lmc_shm.h +1 -3
- data/src/lmc_valloc.c +5 -0
- data/src/lmc_valloc.h +1 -0
- data/src/localmemcache.c +43 -8
- data/src/localmemcache.h +24 -6
- data/src/ruby-binding/localmemcache.rb +14 -29
- data/src/ruby-binding/rblocalmemcache.c +127 -16
- data/src/tests/allocfailure.rb +1 -1
- data/src/tests/bench.rb +1 -1
- data/src/tests/bench_keys.rb +1 -1
- data/src/tests/crash.rb +1 -1
- data/src/tests/lmc.rb +65 -9
- data/src/tests/lmctestapi.c +1 -1
- data/src/tests/parallelwrite.rb +1 -1
- data/src/tests/ttkeys +10 -0
- data/src/tests/ttkeys.rb +35 -0
- data/src/tests/ttlmc.rb +24 -6
- data/src/tests/ttrandom_pair +10 -0
- data/src/tests/ttrandom_pair.rb +23 -0
- metadata +8 -5
- data/site/doc/files/__/src/ruby-binding/extconf_rb.html +0 -108
- data/site/doc/files/__/src/ruby-binding/localmemcache_rb.html +0 -108
- data/site/doc/files/__/src/ruby-binding/rblocalmemcache_c.html +0 -101
data/src/tests/lmctestapi.c
CHANGED
@@ -80,7 +80,7 @@ static lmc_shm_t* get_Shm(VALUE obj) {
|
|
80
80
|
|
81
81
|
static VALUE SHM__new(VALUE klass, VALUE namespace) {
|
82
82
|
Check_Type(namespace, T_STRING);
|
83
|
-
lmc_shm_t *ls = lmc_shm_create("test2", 2000000, 0
|
83
|
+
lmc_shm_t *ls = lmc_shm_create("test2", 2000000, 0);
|
84
84
|
return Data_Wrap_Struct(klass, NULL, lmc_shm_destroy, ls);
|
85
85
|
}
|
86
86
|
|
data/src/tests/parallelwrite.rb
CHANGED
data/src/tests/ttkeys
ADDED
data/src/tests/ttkeys.rb
ADDED
@@ -0,0 +1,35 @@
|
|
1
|
+
$DIR=File.dirname(__FILE__)
|
2
|
+
['.', '..', '../ruby-binding/'].each {|p| $:.unshift File.join($DIR, p) }
|
3
|
+
|
4
|
+
require 'localmemcache'
|
5
|
+
|
6
|
+
LocalMemCache.drop :namespace => "keys-test", :force => true
|
7
|
+
$lm2 = LocalMemCache.new :namespace=>"keys-test"
|
8
|
+
|
9
|
+
def __key_size2(lm)
|
10
|
+
c = 0
|
11
|
+
lm.each_pair {|k, v|
|
12
|
+
c +=1
|
13
|
+
vv = "v#{k}"
|
14
|
+
if v != vv
|
15
|
+
puts "Failed value: #{v.inspect}, e: #{vv.inspect}"
|
16
|
+
exit
|
17
|
+
end
|
18
|
+
}
|
19
|
+
c
|
20
|
+
end
|
21
|
+
|
22
|
+
$c= 0
|
23
|
+
$diff = 0
|
24
|
+
4000.times {
|
25
|
+
$c += 1
|
26
|
+
$lm2[$c] = "v#{$c}"
|
27
|
+
if $lm2.keys.size != $c
|
28
|
+
puts "WOHAA: #{$diff} #{$lm2.keys.size} != #{$c}"
|
29
|
+
exit 2
|
30
|
+
end
|
31
|
+
if __key_size2($lm2) != $c
|
32
|
+
puts "KS2 WOHAA: #{$diff} #{__key_size2($lm2)} != #{$c}"
|
33
|
+
exit 2
|
34
|
+
end
|
35
|
+
}
|
data/src/tests/ttlmc.rb
CHANGED
@@ -4,21 +4,35 @@ $DIR=File.dirname(__FILE__)
|
|
4
4
|
require 'torture'
|
5
5
|
require 'localmemcache'
|
6
6
|
|
7
|
-
LocalMemCache.
|
7
|
+
LocalMemCache.drop :namespace => "torture", :force => true
|
8
8
|
$h = LocalMemCache.new :namespace=>'torture', :size_mb => 200
|
9
9
|
|
10
|
+
puts "STARTED: #{$$}"
|
11
|
+
|
10
12
|
class LocalMemCache
|
11
13
|
def __set(k, v)
|
12
14
|
set(k, v)
|
13
|
-
if get(k) != v.to_s
|
14
|
-
|
15
|
-
|
16
|
-
end
|
15
|
+
#if get(k) != v.to_s
|
16
|
+
# puts "Set FAILED!"
|
17
|
+
# raise "set failed"
|
18
|
+
#end
|
17
19
|
end
|
18
20
|
def __delete(k)
|
19
21
|
delete(k)
|
20
22
|
end
|
21
23
|
|
24
|
+
def __clear
|
25
|
+
clear if rand * 100 > 99
|
26
|
+
end
|
27
|
+
|
28
|
+
def __each_pair
|
29
|
+
each_pair { } if rand * 100 > 99
|
30
|
+
end
|
31
|
+
|
32
|
+
def __keys
|
33
|
+
keys if rand * 100 > 99
|
34
|
+
end
|
35
|
+
|
22
36
|
end
|
23
37
|
|
24
38
|
|
@@ -33,5 +47,9 @@ TortureTesting.no_progress
|
|
33
47
|
TortureTesting.run(200_000,
|
34
48
|
[$h, :get, [:rand_index]],
|
35
49
|
[$h, :__set, [:rand_index, :any]],
|
36
|
-
[$h, :__delete, [:rand_index]]
|
50
|
+
[$h, :__delete, [:rand_index]],
|
51
|
+
[$h, :__clear],
|
52
|
+
[$h, :__keys],
|
53
|
+
[$h, :random_pair],
|
54
|
+
[$h, :__each_pair]
|
37
55
|
)
|
@@ -0,0 +1,23 @@
|
|
1
|
+
$DIR=File.dirname(__FILE__)
|
2
|
+
['.', '..', '../ruby-binding/'].each {|p| $:.unshift File.join($DIR, p) }
|
3
|
+
|
4
|
+
require 'localmemcache'
|
5
|
+
|
6
|
+
LocalMemCache.drop :namespace => "random-pair-test", :force => true
|
7
|
+
$lm2 = LocalMemCache.new :namespace=>"random-pair-test"
|
8
|
+
|
9
|
+
$h = {}
|
10
|
+
counter = 0
|
11
|
+
4000.times {|i|
|
12
|
+
counter += 1
|
13
|
+
$h[i.to_s] = 1
|
14
|
+
$lm2[i] = i
|
15
|
+
}
|
16
|
+
|
17
|
+
while counter > 0
|
18
|
+
k, v = $lm2.random_pair
|
19
|
+
if $h[k]
|
20
|
+
$h[k] = nil
|
21
|
+
counter -= 1
|
22
|
+
end
|
23
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: localmemcache
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sven C. Koehler
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-
|
12
|
+
date: 2009-05-06 00:00:00 +00:00
|
13
13
|
default_executable:
|
14
14
|
dependencies: []
|
15
15
|
|
@@ -40,6 +40,8 @@ files:
|
|
40
40
|
- bench/lmc_bench.rb
|
41
41
|
- bench/memcached_bench
|
42
42
|
- bench/memcached_bench.rb
|
43
|
+
- bench/tokyo_cabinet_bench
|
44
|
+
- bench/tokyo_cabinet_bench.rb
|
43
45
|
- bench/tyrant_bench
|
44
46
|
- bench/tyrant_bench.rb
|
45
47
|
- configure
|
@@ -74,9 +76,6 @@ files:
|
|
74
76
|
- site/doc/classes/LocalMemCache/ShmLockFailed.html
|
75
77
|
- site/doc/classes/LocalMemCache/ShmUnlockFailed.html
|
76
78
|
- site/doc/created.rid
|
77
|
-
- site/doc/files/__/src/ruby-binding/extconf_rb.html
|
78
|
-
- site/doc/files/__/src/ruby-binding/localmemcache_rb.html
|
79
|
-
- site/doc/files/__/src/ruby-binding/rblocalmemcache_c.html
|
80
79
|
- site/doc/fr_class_index.html
|
81
80
|
- site/doc/fr_file_index.html
|
82
81
|
- site/doc/fr_method_index.html
|
@@ -126,8 +125,12 @@ files:
|
|
126
125
|
- src/tests/torture.rb
|
127
126
|
- src/tests/ttalloc
|
128
127
|
- src/tests/ttalloc.rb
|
128
|
+
- src/tests/ttkeys
|
129
|
+
- src/tests/ttkeys.rb
|
129
130
|
- src/tests/ttlmc
|
130
131
|
- src/tests/ttlmc.rb
|
132
|
+
- src/tests/ttrandom_pair
|
133
|
+
- src/tests/ttrandom_pair.rb
|
131
134
|
has_rdoc: true
|
132
135
|
homepage: http://localmemcache.rubyforge.org/
|
133
136
|
post_install_message:
|
@@ -1,108 +0,0 @@
|
|
1
|
-
<?xml version="1.0" encoding="iso-8859-1"?>
|
2
|
-
<!DOCTYPE html
|
3
|
-
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
4
|
-
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
5
|
-
|
6
|
-
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
7
|
-
<head>
|
8
|
-
<title>File: extconf.rb</title>
|
9
|
-
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
|
10
|
-
<meta http-equiv="Content-Script-Type" content="text/javascript" />
|
11
|
-
<link rel="stylesheet" href="../../../.././rdoc-style.css" type="text/css" media="screen" />
|
12
|
-
<script type="text/javascript">
|
13
|
-
// <![CDATA[
|
14
|
-
|
15
|
-
function popupCode( url ) {
|
16
|
-
window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
|
17
|
-
}
|
18
|
-
|
19
|
-
function toggleCode( id ) {
|
20
|
-
if ( document.getElementById )
|
21
|
-
elem = document.getElementById( id );
|
22
|
-
else if ( document.all )
|
23
|
-
elem = eval( "document.all." + id );
|
24
|
-
else
|
25
|
-
return false;
|
26
|
-
|
27
|
-
elemStyle = elem.style;
|
28
|
-
|
29
|
-
if ( elemStyle.display != "block" ) {
|
30
|
-
elemStyle.display = "block"
|
31
|
-
} else {
|
32
|
-
elemStyle.display = "none"
|
33
|
-
}
|
34
|
-
|
35
|
-
return true;
|
36
|
-
}
|
37
|
-
|
38
|
-
// Make codeblocks hidden by default
|
39
|
-
document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
|
40
|
-
|
41
|
-
// ]]>
|
42
|
-
</script>
|
43
|
-
|
44
|
-
</head>
|
45
|
-
<body>
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
<div id="fileHeader">
|
50
|
-
<h1>extconf.rb</h1>
|
51
|
-
<table class="header-table">
|
52
|
-
<tr class="top-aligned-row">
|
53
|
-
<td><strong>Path:</strong></td>
|
54
|
-
<td>../src/ruby-binding/extconf.rb
|
55
|
-
</td>
|
56
|
-
</tr>
|
57
|
-
<tr class="top-aligned-row">
|
58
|
-
<td><strong>Last Update:</strong></td>
|
59
|
-
<td>Sun Apr 05 12:31:31 +0000 2009</td>
|
60
|
-
</tr>
|
61
|
-
</table>
|
62
|
-
</div>
|
63
|
-
<!-- banner header -->
|
64
|
-
|
65
|
-
<div id="bodyContent">
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
<div id="contextContent">
|
70
|
-
|
71
|
-
|
72
|
-
<div id="requires-list">
|
73
|
-
<h3 class="section-bar">Required files</h3>
|
74
|
-
|
75
|
-
<div class="name-list">
|
76
|
-
mkmf
|
77
|
-
</div>
|
78
|
-
</div>
|
79
|
-
|
80
|
-
</div>
|
81
|
-
|
82
|
-
|
83
|
-
</div>
|
84
|
-
|
85
|
-
|
86
|
-
<!-- if includes -->
|
87
|
-
|
88
|
-
<div id="section">
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
<!-- if method_list -->
|
98
|
-
|
99
|
-
|
100
|
-
</div>
|
101
|
-
|
102
|
-
|
103
|
-
<div id="validator-badges">
|
104
|
-
<p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
|
105
|
-
</div>
|
106
|
-
|
107
|
-
</body>
|
108
|
-
</html>
|
@@ -1,108 +0,0 @@
|
|
1
|
-
<?xml version="1.0" encoding="iso-8859-1"?>
|
2
|
-
<!DOCTYPE html
|
3
|
-
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
4
|
-
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
5
|
-
|
6
|
-
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
7
|
-
<head>
|
8
|
-
<title>File: localmemcache.rb</title>
|
9
|
-
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
|
10
|
-
<meta http-equiv="Content-Script-Type" content="text/javascript" />
|
11
|
-
<link rel="stylesheet" href="../../../.././rdoc-style.css" type="text/css" media="screen" />
|
12
|
-
<script type="text/javascript">
|
13
|
-
// <![CDATA[
|
14
|
-
|
15
|
-
function popupCode( url ) {
|
16
|
-
window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
|
17
|
-
}
|
18
|
-
|
19
|
-
function toggleCode( id ) {
|
20
|
-
if ( document.getElementById )
|
21
|
-
elem = document.getElementById( id );
|
22
|
-
else if ( document.all )
|
23
|
-
elem = eval( "document.all." + id );
|
24
|
-
else
|
25
|
-
return false;
|
26
|
-
|
27
|
-
elemStyle = elem.style;
|
28
|
-
|
29
|
-
if ( elemStyle.display != "block" ) {
|
30
|
-
elemStyle.display = "block"
|
31
|
-
} else {
|
32
|
-
elemStyle.display = "none"
|
33
|
-
}
|
34
|
-
|
35
|
-
return true;
|
36
|
-
}
|
37
|
-
|
38
|
-
// Make codeblocks hidden by default
|
39
|
-
document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
|
40
|
-
|
41
|
-
// ]]>
|
42
|
-
</script>
|
43
|
-
|
44
|
-
</head>
|
45
|
-
<body>
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
<div id="fileHeader">
|
50
|
-
<h1>localmemcache.rb</h1>
|
51
|
-
<table class="header-table">
|
52
|
-
<tr class="top-aligned-row">
|
53
|
-
<td><strong>Path:</strong></td>
|
54
|
-
<td>../src/ruby-binding/localmemcache.rb
|
55
|
-
</td>
|
56
|
-
</tr>
|
57
|
-
<tr class="top-aligned-row">
|
58
|
-
<td><strong>Last Update:</strong></td>
|
59
|
-
<td>Thu Apr 16 23:46:19 +0000 2009</td>
|
60
|
-
</tr>
|
61
|
-
</table>
|
62
|
-
</div>
|
63
|
-
<!-- banner header -->
|
64
|
-
|
65
|
-
<div id="bodyContent">
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
<div id="contextContent">
|
70
|
-
|
71
|
-
|
72
|
-
<div id="requires-list">
|
73
|
-
<h3 class="section-bar">Required files</h3>
|
74
|
-
|
75
|
-
<div class="name-list">
|
76
|
-
rblocalmemcache
|
77
|
-
</div>
|
78
|
-
</div>
|
79
|
-
|
80
|
-
</div>
|
81
|
-
|
82
|
-
|
83
|
-
</div>
|
84
|
-
|
85
|
-
|
86
|
-
<!-- if includes -->
|
87
|
-
|
88
|
-
<div id="section">
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
<!-- if method_list -->
|
98
|
-
|
99
|
-
|
100
|
-
</div>
|
101
|
-
|
102
|
-
|
103
|
-
<div id="validator-badges">
|
104
|
-
<p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
|
105
|
-
</div>
|
106
|
-
|
107
|
-
</body>
|
108
|
-
</html>
|
@@ -1,101 +0,0 @@
|
|
1
|
-
<?xml version="1.0" encoding="iso-8859-1"?>
|
2
|
-
<!DOCTYPE html
|
3
|
-
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
4
|
-
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
5
|
-
|
6
|
-
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
7
|
-
<head>
|
8
|
-
<title>File: rblocalmemcache.c</title>
|
9
|
-
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
|
10
|
-
<meta http-equiv="Content-Script-Type" content="text/javascript" />
|
11
|
-
<link rel="stylesheet" href="../../../.././rdoc-style.css" type="text/css" media="screen" />
|
12
|
-
<script type="text/javascript">
|
13
|
-
// <![CDATA[
|
14
|
-
|
15
|
-
function popupCode( url ) {
|
16
|
-
window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
|
17
|
-
}
|
18
|
-
|
19
|
-
function toggleCode( id ) {
|
20
|
-
if ( document.getElementById )
|
21
|
-
elem = document.getElementById( id );
|
22
|
-
else if ( document.all )
|
23
|
-
elem = eval( "document.all." + id );
|
24
|
-
else
|
25
|
-
return false;
|
26
|
-
|
27
|
-
elemStyle = elem.style;
|
28
|
-
|
29
|
-
if ( elemStyle.display != "block" ) {
|
30
|
-
elemStyle.display = "block"
|
31
|
-
} else {
|
32
|
-
elemStyle.display = "none"
|
33
|
-
}
|
34
|
-
|
35
|
-
return true;
|
36
|
-
}
|
37
|
-
|
38
|
-
// Make codeblocks hidden by default
|
39
|
-
document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
|
40
|
-
|
41
|
-
// ]]>
|
42
|
-
</script>
|
43
|
-
|
44
|
-
</head>
|
45
|
-
<body>
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
<div id="fileHeader">
|
50
|
-
<h1>rblocalmemcache.c</h1>
|
51
|
-
<table class="header-table">
|
52
|
-
<tr class="top-aligned-row">
|
53
|
-
<td><strong>Path:</strong></td>
|
54
|
-
<td>../src/ruby-binding/rblocalmemcache.c
|
55
|
-
</td>
|
56
|
-
</tr>
|
57
|
-
<tr class="top-aligned-row">
|
58
|
-
<td><strong>Last Update:</strong></td>
|
59
|
-
<td>Fri Apr 17 00:06:49 +0000 2009</td>
|
60
|
-
</tr>
|
61
|
-
</table>
|
62
|
-
</div>
|
63
|
-
<!-- banner header -->
|
64
|
-
|
65
|
-
<div id="bodyContent">
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
<div id="contextContent">
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
</div>
|
74
|
-
|
75
|
-
|
76
|
-
</div>
|
77
|
-
|
78
|
-
|
79
|
-
<!-- if includes -->
|
80
|
-
|
81
|
-
<div id="section">
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
<!-- if method_list -->
|
91
|
-
|
92
|
-
|
93
|
-
</div>
|
94
|
-
|
95
|
-
|
96
|
-
<div id="validator-badges">
|
97
|
-
<p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
|
98
|
-
</div>
|
99
|
-
|
100
|
-
</body>
|
101
|
-
</html>
|