ruby-qdbm 0.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 5cdd8b88a98aee4df6f87be66e8b2c043af2f9382dd19cf970cb155aaab76cf8
4
+ data.tar.gz: b4e917cc0fa84b194a5ecfefaa6b5f45fd504afc80387e93f84871827fb1226a
5
+ SHA512:
6
+ metadata.gz: f596c32e805be65b9fd3e915236174c7bac5d2c674a071ffca1256d6eda346093d08a44c763e2e85b8601d17cc57016542cbe25b2988ee9f5f01d84356970c0b
7
+ data.tar.gz: 8b088c78315242b5dea2b1c4f92add5584e45042cb0a41a194d5b4115aa388a7c6dc647d1b46ce8260968c9183e1ae90c7be85deda0c82b5028df47e813c2088
data/.gitignore ADDED
@@ -0,0 +1,12 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /_yardoc/
4
+ /coverage/
5
+ /doc/
6
+ /pkg/
7
+ /spec/reports/
8
+ /tmp/
9
+ /vendor/
10
+ *~
11
+ *.o
12
+ *.so
data/Gemfile ADDED
@@ -0,0 +1,13 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+ source "https://rubygems.org"
4
+
5
+ git_source(:github) {|repo_name| "https://github.com/#{repo_name}" }
6
+
7
+ # Specify your gem's dependencies in ruby-qdbm.gemspec
8
+ gemspec
9
+
10
+ # Local Variables:
11
+ # mode: Ruby
12
+ # indent-tabs-mode: nil
13
+ # End:
data/README.md ADDED
@@ -0,0 +1,37 @@
1
+ # ruby-qdbm
2
+
3
+ QDBM is Quick Database Manager of https://fallabs.com/qdbm/.
4
+ This gem provides QDBM ruby extension libraries (depot/curia/villa).
5
+
6
+ The modifications from original are as follows.
7
+
8
+ 1. The Debian patch is applied for the latest version of ruby.
9
+ 2. Repacked to rubygems.
10
+
11
+ ## Installation
12
+
13
+ Add this line to your application's Gemfile:
14
+
15
+ ```ruby
16
+ gem 'ruby-qdbm'
17
+ ```
18
+
19
+ And then execute:
20
+
21
+ $ bundle
22
+
23
+ Or install it yourself as:
24
+
25
+ $ gem install ruby-qdbm
26
+
27
+ ## Usage
28
+
29
+ See https://fallabs.com/qdbm/rbspex.html.
30
+
31
+ ## Contributing
32
+
33
+ Bug reports and pull requests are welcome on GitHub at https://github.com/y10k/ruby-qdbm.
34
+
35
+ ## License
36
+
37
+ The gem is available as open source under the terms of the [LGPL-2.1](https://www.gnu.org/licenses/lgpl-2.1.html).
data/Rakefile ADDED
@@ -0,0 +1,65 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+ require "bundler/gem_tasks"
4
+ require 'rake/clean'
5
+ require 'rake/extensiontask'
6
+
7
+ task :default => :compile
8
+
9
+ Rake::ExtensionTask.new do |task|
10
+ task.name = 'mod_depot'
11
+ task.ext_dir = 'ext/depot'
12
+ end
13
+
14
+ Rake::ExtensionTask.new do |task|
15
+ task.name = 'mod_curia'
16
+ task.ext_dir = 'ext/curia'
17
+ end
18
+
19
+ Rake::ExtensionTask.new do |task|
20
+ task.name = 'mod_villa'
21
+ task.ext_dir = 'ext/villa'
22
+ end
23
+
24
+ desc 'Test'
25
+ task :test => [ :rbdptest, :rbcrtest, :rbvltest ]
26
+
27
+ class QDBMTestTask < Rake::TaskLib
28
+ def initialize(name, *args)
29
+ @name = name
30
+ @args = args
31
+ define
32
+ end
33
+
34
+ def define
35
+ desc "#{@name}test"
36
+ task("#{@name}test") { run }
37
+ CLOBBER.include "test/#{@name}casket"
38
+ end
39
+ private :define
40
+
41
+ def run
42
+ rm_rf "test/#{@name}casket"
43
+ ruby "test/#{@name}test", 'write', "test/#{@name}casket", *@args
44
+ ruby "test/#{@name}test", 'read', "test/#{@name}casket"
45
+ ruby "test/#{@name}test", 'misc', "test/#{@name}casket"
46
+ end
47
+ private :run
48
+ end
49
+
50
+ QDBMTestTask.new('rbdp', '10000', '1000')
51
+ QDBMTestTask.new('rbcr', '10000', '1000', '10')
52
+ QDBMTestTask.new('rbvl', '10000')
53
+
54
+ desc 'Build README.html from markdown source.'
55
+ task :readme => %w[ README.html ]
56
+
57
+ file 'README.html' => [ 'README.md' ] do
58
+ sh "pandoc --from=markdown --to=html5 --standalone --self-contained --css=$HOME/.pandoc/github.css --output=README.html README.md"
59
+ end
60
+ CLOBBER.include 'README.html'
61
+
62
+ # Local Variables:
63
+ # mode: Ruby
64
+ # indent-tabs-mode: nil
65
+ # End:
@@ -0,0 +1,5 @@
1
+ MANIFEST
2
+ extconf.rb
3
+ curia.rb
4
+ mod_curia.c
5
+ rbcrtest
@@ -0,0 +1,18 @@
1
+ require 'mkmf'
2
+
3
+ dir_config("curia")
4
+
5
+ home = ENV['HOME']
6
+ $CFLAGS = "-I. -I#{home}/include -I/usr/local/include " + `pkg-config qdbm --cflags`.chomp
7
+ $LDFLAGS = "-L#{home}/lib -L/usr/local/lib " + `pkg-config qdbm --libs`.chomp
8
+ $LIBS = "-L#{home}/lib -L/usr/local/lib " + `pkg-config qdbm --libs`.chomp
9
+
10
+ have_library("c", "main")
11
+ have_library("pthread", "main")
12
+ have_library("z", "main")
13
+ have_library("bz2", "main")
14
+ have_library("lzo2", "main")
15
+ have_library("iconv", "main")
16
+ have_library("qdbm", "main")
17
+
18
+ create_makefile("mod_curia")
@@ -0,0 +1,491 @@
1
+ /*************************************************************************************************
2
+ * Implementation of Curia for Ruby
3
+ * Copyright (C) 2000-2006 Mikio Hirabayashi
4
+ * This file is part of QDBM, Quick Database Manager.
5
+ * QDBM is free software; you can redistribute it and/or modify it under the terms of the GNU
6
+ * Lesser General Public License as published by the Free Software Foundation; either version
7
+ * 2.1 of the License or any later version. QDBM is distributed in the hope that it will be
8
+ * useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
9
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
10
+ * details.
11
+ * You should have received a copy of the GNU Lesser General Public License along with QDBM; if
12
+ * not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
13
+ * 02111-1307 USA.
14
+ *************************************************************************************************/
15
+
16
+
17
+ #include "ruby.h"
18
+ #include <depot.h>
19
+ #include <curia.h>
20
+ #include <stdlib.h>
21
+ #include <unistd.h>
22
+ #include <sys/types.h>
23
+ #include <sys/stat.h>
24
+
25
+ #define MAXOPEN 1024
26
+
27
+ #ifndef RUBY_19
28
+ #ifndef RSTRING_LEN
29
+ #define RSTRING_LEN(v) (RSTRING(v)->len)
30
+ #endif
31
+ #endif
32
+
33
+ VALUE ccuriaerror;
34
+ VALUE ccuriaerror_ENOERR;
35
+ VALUE ccuriaerror_EFATAL;
36
+ VALUE ccuriaerror_EMODE;
37
+ VALUE ccuriaerror_EBROKEN;
38
+ VALUE ccuriaerror_EKEEP;
39
+ VALUE ccuriaerror_ENOITEM;
40
+ VALUE ccuriaerror_EALLOC;
41
+ VALUE ccuriaerror_EMAP;
42
+ VALUE ccuriaerror_EOPEN;
43
+ VALUE ccuriaerror_ECLOSE;
44
+ VALUE ccuriaerror_ETRUNC;
45
+ VALUE ccuriaerror_ESYNC;
46
+ VALUE ccuriaerror_ESTAT;
47
+ VALUE ccuriaerror_ESEEK;
48
+ VALUE ccuriaerror_EREAD;
49
+ VALUE ccuriaerror_EWRITE;
50
+ VALUE ccuriaerror_ELOCK;
51
+ VALUE ccuriaerror_EUNLINK;
52
+ VALUE ccuriaerror_EMKDIR;
53
+ VALUE ccuriaerror_ERMDIR;
54
+ VALUE ccuriaerror_EMISC;
55
+ VALUE mcuria;
56
+ CURIA *crtable[MAXOPEN];
57
+ char crsltable[MAXOPEN];
58
+
59
+
60
+ static void crinit(void);
61
+ static int getnewindex(void);
62
+ static int checkdup(const char *name);
63
+ static void myerror(int ecode);
64
+ static VALUE rbcrversion(VALUE vself);
65
+ static VALUE rbcrerrmsg(VALUE vself, VALUE vecode);
66
+ static VALUE rbcropen(VALUE vself, VALUE vname, VALUE vomode, VALUE vbnum, VALUE vdnum);
67
+ static VALUE rbcrclose(VALUE vself, VALUE vindex);
68
+ static VALUE rbcrsetsilent(VALUE vself, VALUE vindex, VALUE vvalue);
69
+ static VALUE rbcrput(VALUE vself, VALUE vindex, VALUE vkey, VALUE vval, VALUE vdmode);
70
+ static VALUE rbcrout(VALUE vself, VALUE vindex, VALUE vkey);
71
+ static VALUE rbcrget(VALUE vself, VALUE vindex, VALUE vkey, VALUE vstart, VALUE vmax);
72
+ static VALUE rbcrvsiz(VALUE vself, VALUE vindex, VALUE vkey);
73
+ static VALUE rbcriterinit(VALUE vself, VALUE vindex);
74
+ static VALUE rbcriternext(VALUE vself, VALUE vindex);
75
+ static VALUE rbcrsetalign(VALUE vself, VALUE vindex, VALUE valign);
76
+ static VALUE rbcrsetfbpsiz(VALUE vself, VALUE vindex, VALUE vsize);
77
+ static VALUE rbcrsync(VALUE vself, VALUE vindex);
78
+ static VALUE rbcroptimize(VALUE vself, VALUE vindex, VALUE vbnum);
79
+ static VALUE rbcrfsiz(VALUE vself, VALUE vindex);
80
+ static VALUE rbcrbnum(VALUE vself, VALUE vindex);
81
+ static VALUE rbcrrnum(VALUE vself, VALUE vindex);
82
+ static VALUE rbcrwritable(VALUE vself, VALUE vindex);
83
+ static VALUE rbcrfatalerror(VALUE vself, VALUE vindex);
84
+
85
+
86
+
87
+ /*************************************************************************************************
88
+ * public objects
89
+ *************************************************************************************************/
90
+
91
+
92
+ Init_mod_curia(){
93
+ crinit();
94
+ ccuriaerror = rb_define_class("CuriaError", rb_eStandardError);
95
+ ccuriaerror_ENOERR = rb_define_class("CuriaError_ENOERR", ccuriaerror);
96
+ ccuriaerror_EFATAL = rb_define_class("CuriaError_EFATAL", ccuriaerror);
97
+ ccuriaerror_EMODE = rb_define_class("CuriaError_EMODE", ccuriaerror);
98
+ ccuriaerror_EBROKEN = rb_define_class("CuriaError_EBROKEN", ccuriaerror);
99
+ ccuriaerror_EKEEP = rb_define_class("CuriaError_EKEEP", ccuriaerror);
100
+ ccuriaerror_ENOITEM = rb_define_class("CuriaError_ENOITEM", ccuriaerror);
101
+ ccuriaerror_EALLOC = rb_define_class("CuriaError_EALLOC", ccuriaerror);
102
+ ccuriaerror_EMAP = rb_define_class("CuriaError_EMAP", ccuriaerror);
103
+ ccuriaerror_EOPEN = rb_define_class("CuriaError_EOPEN", ccuriaerror);
104
+ ccuriaerror_ECLOSE = rb_define_class("CuriaError_ECLOSE", ccuriaerror);
105
+ ccuriaerror_ETRUNC = rb_define_class("CuriaError_ETRUNC", ccuriaerror);
106
+ ccuriaerror_ESYNC = rb_define_class("CuriaError_ESYNC", ccuriaerror);
107
+ ccuriaerror_ESTAT = rb_define_class("CuriaError_ESTAT", ccuriaerror);
108
+ ccuriaerror_ESEEK = rb_define_class("CuriaError_ESEEK", ccuriaerror);
109
+ ccuriaerror_EREAD = rb_define_class("CuriaError_EREAD", ccuriaerror);
110
+ ccuriaerror_EWRITE = rb_define_class("CuriaError_EWRITE", ccuriaerror);
111
+ ccuriaerror_ELOCK = rb_define_class("CuriaError_ELOCK", ccuriaerror);
112
+ ccuriaerror_EUNLINK = rb_define_class("CuriaError_EUNLINK", ccuriaerror);
113
+ ccuriaerror_EMKDIR = rb_define_class("CuriaError_EMKDIR", ccuriaerror);
114
+ ccuriaerror_ERMDIR = rb_define_class("CuriaError_ERMDIR", ccuriaerror);
115
+ ccuriaerror_EMISC = rb_define_class("CuriaError_EMISC", ccuriaerror);
116
+ mcuria = rb_define_module("Mod_Curia");
117
+ rb_define_const(mcuria, "EANY", ccuriaerror);
118
+ rb_define_const(mcuria, "ENOERR", ccuriaerror_ENOERR);
119
+ rb_define_const(mcuria, "EFATAL", ccuriaerror_EFATAL);
120
+ rb_define_const(mcuria, "EMODE", ccuriaerror_EMODE);
121
+ rb_define_const(mcuria, "EBROKEN", ccuriaerror_EBROKEN);
122
+ rb_define_const(mcuria, "EKEEP", ccuriaerror_EKEEP);
123
+ rb_define_const(mcuria, "ENOITEM", ccuriaerror_ENOITEM);
124
+ rb_define_const(mcuria, "EALLOC", ccuriaerror_EALLOC);
125
+ rb_define_const(mcuria, "EMAP", ccuriaerror_EMAP);
126
+ rb_define_const(mcuria, "EOPEN", ccuriaerror_EOPEN);
127
+ rb_define_const(mcuria, "ECLOSE", ccuriaerror_ECLOSE);
128
+ rb_define_const(mcuria, "ETRUNC", ccuriaerror_ETRUNC);
129
+ rb_define_const(mcuria, "ESYNC", ccuriaerror_ESYNC);
130
+ rb_define_const(mcuria, "ESTAT", ccuriaerror_ESTAT);
131
+ rb_define_const(mcuria, "ESEEK", ccuriaerror_ESEEK);
132
+ rb_define_const(mcuria, "EREAD", ccuriaerror_EREAD);
133
+ rb_define_const(mcuria, "EWRITE", ccuriaerror_EWRITE);
134
+ rb_define_const(mcuria, "ELOCK", ccuriaerror_ELOCK);
135
+ rb_define_const(mcuria, "EUNLINK", ccuriaerror_EUNLINK);
136
+ rb_define_const(mcuria, "EMKDIR", ccuriaerror_EMKDIR);
137
+ rb_define_const(mcuria, "ERMDIR", ccuriaerror_ERMDIR);
138
+ rb_define_const(mcuria, "EMISC", ccuriaerror_EMISC);
139
+ rb_define_const(mcuria, "OREADER", INT2FIX(CR_OREADER));
140
+ rb_define_const(mcuria, "OWRITER", INT2FIX(CR_OWRITER));
141
+ rb_define_const(mcuria, "OCREAT", INT2FIX(CR_OCREAT));
142
+ rb_define_const(mcuria, "OTRUNC", INT2FIX(CR_OTRUNC));
143
+ rb_define_const(mcuria, "ONOLCK", INT2FIX(CR_ONOLCK));
144
+ rb_define_const(mcuria, "OLCKNB", INT2FIX(CR_OLCKNB));
145
+ rb_define_const(mcuria, "OSPARSE", INT2FIX(CR_OSPARSE));
146
+ rb_define_const(mcuria, "DOVER", INT2FIX(CR_DOVER));
147
+ rb_define_const(mcuria, "DKEEP", INT2FIX(CR_DKEEP));
148
+ rb_define_const(mcuria, "DCAT", INT2FIX(CR_DCAT));
149
+ rb_define_module_function(mcuria, "mod_open", rbcropen, 4);
150
+ rb_define_module_function(mcuria, "mod_close", rbcrclose, 1);
151
+ rb_define_module_function(mcuria, "mod_setsilent", rbcrsetsilent, 2);
152
+ rb_define_module_function(mcuria, "mod_put", rbcrput, 4);
153
+ rb_define_module_function(mcuria, "mod_out", rbcrout, 2);
154
+ rb_define_module_function(mcuria, "mod_get", rbcrget, 4);
155
+ rb_define_module_function(mcuria, "mod_vsiz", rbcrvsiz, 2);
156
+ rb_define_module_function(mcuria, "mod_iterinit", rbcriterinit, 1);
157
+ rb_define_module_function(mcuria, "mod_iternext", rbcriternext, 1);
158
+ rb_define_module_function(mcuria, "mod_setalign", rbcrsetalign, 2);
159
+ rb_define_module_function(mcuria, "mod_setfbpsiz", rbcrsetfbpsiz, 2);
160
+ rb_define_module_function(mcuria, "mod_sync", rbcrsync, 1);
161
+ rb_define_module_function(mcuria, "mod_optimize", rbcroptimize, 2);
162
+ rb_define_module_function(mcuria, "mod_fsiz", rbcrfsiz, 1);
163
+ rb_define_module_function(mcuria, "mod_bnum", rbcrbnum, 1);
164
+ rb_define_module_function(mcuria, "mod_rnum", rbcrrnum, 1);
165
+ rb_define_module_function(mcuria, "mod_writable", rbcrwritable, 1);
166
+ rb_define_module_function(mcuria, "mod_fatalerror", rbcrfatalerror, 1);
167
+ }
168
+
169
+
170
+
171
+ /*************************************************************************************************
172
+ * private objects
173
+ *************************************************************************************************/
174
+
175
+
176
+ static void crinit(void){
177
+ int i;
178
+ for(i = 0; i < MAXOPEN; i++){
179
+ crtable[i] = NULL;
180
+ crsltable[i] = 0;
181
+ }
182
+ }
183
+
184
+
185
+ static int getnewindex(void){
186
+ int i;
187
+ for(i = 0; i < MAXOPEN; i++){
188
+ if(crtable[i] == NULL) return i;
189
+ }
190
+ return -1;
191
+ }
192
+
193
+
194
+ static int checkdup(const char *name){
195
+ struct stat sbuf;
196
+ int i, inode;
197
+ if(stat(name, &sbuf) == -1) return 0;
198
+ inode = sbuf.st_ino;
199
+ for(i = 0; i < MAXOPEN; i++){
200
+ if(crtable[i] != NULL && crinode(crtable[i]) == inode) return -1;
201
+ }
202
+ return 0;
203
+ }
204
+
205
+
206
+ static void myerror(int ecode){
207
+ VALUE verr;
208
+ switch(ecode){
209
+ case DP_ENOERR: verr = ccuriaerror_ENOERR; break;
210
+ case DP_EFATAL: verr = ccuriaerror_EFATAL; break;
211
+ case DP_EMODE: verr = ccuriaerror_EMODE; break;
212
+ case DP_EBROKEN: verr = ccuriaerror_EBROKEN; break;
213
+ case DP_EKEEP: verr = ccuriaerror_EKEEP; break;
214
+ case DP_ENOITEM: verr = ccuriaerror_ENOITEM; break;
215
+ case DP_EALLOC: verr = ccuriaerror_EALLOC; break;
216
+ case DP_EMAP: verr = ccuriaerror_EMAP; break;
217
+ case DP_EOPEN: verr = ccuriaerror_EOPEN; break;
218
+ case DP_ECLOSE: verr = ccuriaerror_ECLOSE; break;
219
+ case DP_ETRUNC: verr = ccuriaerror_ETRUNC; break;
220
+ case DP_ESYNC: verr = ccuriaerror_ESYNC; break;
221
+ case DP_ESTAT: verr = ccuriaerror_ESTAT; break;
222
+ case DP_ESEEK: verr = ccuriaerror_ESEEK; break;
223
+ case DP_EREAD: verr = ccuriaerror_EREAD; break;
224
+ case DP_EWRITE: verr = ccuriaerror_EWRITE; break;
225
+ case DP_ELOCK: verr = ccuriaerror_ELOCK; break;
226
+ case DP_EUNLINK: verr = ccuriaerror_EUNLINK; break;
227
+ case DP_EMKDIR: verr = ccuriaerror_EMKDIR; break;
228
+ case DP_ERMDIR: verr = ccuriaerror_ERMDIR; break;
229
+ case DP_EMISC: verr = ccuriaerror_EMISC; break;
230
+ default: verr = ccuriaerror; break;
231
+ }
232
+ rb_raise(verr, "%s", dperrmsg(ecode));
233
+ }
234
+
235
+
236
+ static VALUE rbcropen(VALUE vself, VALUE vname, VALUE vomode, VALUE vbnum, VALUE vdnum){
237
+ CURIA *curia;
238
+ const char *name;
239
+ int index, omode, bnum, dnum;
240
+ if((index = getnewindex()) == -1) myerror(DP_EMISC);
241
+ name = StringValuePtr(vname);
242
+ FIXNUM_P(vomode);
243
+ omode = FIX2INT(vomode);
244
+ FIXNUM_P(vbnum);
245
+ bnum = FIX2INT(vbnum);
246
+ FIXNUM_P(vdnum);
247
+ dnum = FIX2INT(vdnum);
248
+ if(checkdup(name) == -1) myerror(DP_EMISC);
249
+ curia = cropen(name, omode, bnum, dnum);
250
+ if(!curia) myerror(dpecode);
251
+ crtable[index] = curia;
252
+ crsltable[index] = 0;
253
+ return INT2FIX(index);
254
+ }
255
+
256
+
257
+ static VALUE rbcrclose(VALUE vself, VALUE vindex){
258
+ CURIA *curia;
259
+ int index;
260
+ FIXNUM_P(vindex);
261
+ if((index = FIX2INT(vindex)) == -1) myerror(DP_EMISC);
262
+ curia = crtable[index];
263
+ crtable[index] = NULL;
264
+ if(!crclose(curia)) myerror(dpecode);
265
+ return Qtrue;
266
+ }
267
+
268
+
269
+ static VALUE rbcrsetsilent(VALUE vself, VALUE vindex, VALUE vvalue){
270
+ int index;
271
+ FIXNUM_P(vindex);
272
+ if((index = FIX2INT(vindex)) == -1) myerror(DP_EMISC);
273
+ crsltable[index] = FIX2INT(vvalue);
274
+ return Qnil;
275
+ }
276
+
277
+
278
+ static VALUE rbcrput(VALUE vself, VALUE vindex, VALUE vkey, VALUE vval, VALUE vdmode){
279
+ CURIA *curia;
280
+ const char *kbuf, *vbuf;
281
+ int index, ksiz, vsiz, dmode;
282
+ FIXNUM_P(vindex);
283
+ if((index = FIX2INT(vindex)) == -1) myerror(DP_EMISC);
284
+ kbuf = StringValuePtr(vkey);
285
+ ksiz = RSTRING_LEN(vkey);
286
+ vbuf = StringValuePtr(vval);
287
+ vsiz = RSTRING_LEN(vval);
288
+ FIXNUM_P(vdmode);
289
+ dmode = FIX2INT(vdmode);
290
+ curia = crtable[index];
291
+ if(!crput(curia, kbuf, ksiz, vbuf, vsiz, dmode)){
292
+ if(crsltable[index] && dpecode == DP_EKEEP) return Qfalse;
293
+ myerror(dpecode);
294
+ }
295
+ return Qtrue;
296
+ }
297
+
298
+
299
+ static VALUE rbcrout(VALUE vself, VALUE vindex, VALUE vkey){
300
+ CURIA *curia;
301
+ const char *kbuf;
302
+ int index, ksiz;
303
+ FIXNUM_P(vindex);
304
+ if((index = FIX2INT(vindex)) == -1) myerror(DP_EMISC);
305
+ kbuf = StringValuePtr(vkey);
306
+ ksiz = RSTRING_LEN(vkey);
307
+ curia = crtable[index];
308
+ if(!crout(curia, kbuf, ksiz)){
309
+ if(crsltable[index] && dpecode == DP_ENOITEM) return Qfalse;
310
+ myerror(dpecode);
311
+ }
312
+ return Qtrue;
313
+ }
314
+
315
+
316
+ static VALUE rbcrget(VALUE vself, VALUE vindex, VALUE vkey, VALUE vstart, VALUE vmax){
317
+ CURIA *curia;
318
+ const char *kbuf;
319
+ char *vbuf;
320
+ int index, ksiz, start, max, vsiz;
321
+ VALUE vval;
322
+ FIXNUM_P(vindex);
323
+ if((index = FIX2INT(vindex)) == -1) myerror(DP_EMISC);
324
+ kbuf = StringValuePtr(vkey);
325
+ ksiz = RSTRING_LEN(vkey);
326
+ FIXNUM_P(vstart);
327
+ start = FIX2INT(vstart);
328
+ FIXNUM_P(vmax);
329
+ max = FIX2INT(vmax);
330
+ curia = crtable[index];
331
+ if(!(vbuf = crget(curia, kbuf, ksiz, start, max, &vsiz))){
332
+ if(crsltable[index] && dpecode == DP_ENOITEM) return Qnil;
333
+ myerror(dpecode);
334
+ }
335
+ vval = rb_str_new(vbuf, vsiz);
336
+ free(vbuf);
337
+ return vval;
338
+ }
339
+
340
+
341
+ static VALUE rbcrvsiz(VALUE vself, VALUE vindex, VALUE vkey){
342
+ CURIA *curia;
343
+ const char *kbuf;
344
+ int index, ksiz, vsiz;
345
+ FIXNUM_P(vindex);
346
+ if((index = FIX2INT(vindex)) == -1) myerror(DP_EMISC);
347
+ kbuf = StringValuePtr(vkey);
348
+ ksiz = RSTRING_LEN(vkey);
349
+ curia = crtable[index];
350
+ if((vsiz = crvsiz(curia, kbuf, ksiz)) == -1){
351
+ if(crsltable[index] && dpecode == DP_ENOITEM) return INT2FIX(-1);
352
+ myerror(dpecode);
353
+ }
354
+ return INT2FIX(vsiz);
355
+ }
356
+
357
+
358
+ static VALUE rbcriterinit(VALUE vself, VALUE vindex){
359
+ CURIA *curia;
360
+ int index;
361
+ FIXNUM_P(vindex);
362
+ if((index = FIX2INT(vindex)) == -1) myerror(DP_EMISC);
363
+ curia = crtable[index];
364
+ if(!criterinit(curia)) myerror(dpecode);
365
+ return Qtrue;
366
+ }
367
+
368
+
369
+ static VALUE rbcriternext(VALUE vself, VALUE vindex){
370
+ CURIA *curia;
371
+ char *kbuf;
372
+ int index, ksiz;
373
+ VALUE vkey;
374
+ FIXNUM_P(vindex);
375
+ if((index = FIX2INT(vindex)) == -1) myerror(DP_EMISC);
376
+ curia = crtable[index];
377
+ if(!(kbuf = criternext(curia, &ksiz))){
378
+ if(crsltable[index] && dpecode == DP_ENOITEM) return Qnil;
379
+ myerror(dpecode);
380
+ }
381
+ vkey = rb_str_new(kbuf, ksiz);
382
+ free(kbuf);
383
+ return vkey;
384
+ }
385
+
386
+
387
+ static VALUE rbcrsetalign(VALUE vself, VALUE vindex, VALUE valign){
388
+ CURIA *curia;
389
+ int index, align;
390
+ FIXNUM_P(vindex);
391
+ if((index = FIX2INT(vindex)) == -1) myerror(DP_EMISC);
392
+ FIXNUM_P(valign);
393
+ align = FIX2INT(valign);
394
+ curia = crtable[index];
395
+ if(!crsetalign(curia, align)) myerror(dpecode);
396
+ return Qtrue;
397
+ }
398
+
399
+
400
+ static VALUE rbcrsetfbpsiz(VALUE vself, VALUE vindex, VALUE vsize){
401
+ CURIA *curia;
402
+ int index, size;
403
+ FIXNUM_P(vindex);
404
+ if((index = FIX2INT(vindex)) == -1) myerror(DP_EMISC);
405
+ FIXNUM_P(vsize);
406
+ size = FIX2INT(vsize);
407
+ curia = crtable[index];
408
+ if(!crsetfbpsiz(curia, size)) myerror(dpecode);
409
+ return Qtrue;
410
+ }
411
+
412
+
413
+ static VALUE rbcrsync(VALUE vself, VALUE vindex){
414
+ CURIA *curia;
415
+ int index;
416
+ FIXNUM_P(vindex);
417
+ if((index = FIX2INT(vindex)) == -1) myerror(DP_EMISC);
418
+ curia = crtable[index];
419
+ if(!crsync(curia)) myerror(dpecode);
420
+ return Qtrue;
421
+ }
422
+
423
+
424
+ static VALUE rbcroptimize(VALUE vself, VALUE vindex, VALUE vbnum){
425
+ CURIA *curia;
426
+ int index, bnum;
427
+ FIXNUM_P(vindex);
428
+ if((index = FIX2INT(vindex)) == -1) myerror(DP_EMISC);
429
+ FIXNUM_P(vbnum);
430
+ bnum = FIX2INT(vbnum);
431
+ curia = crtable[index];
432
+ if(!croptimize(curia, bnum)) myerror(dpecode);
433
+ return Qtrue;
434
+ }
435
+
436
+
437
+ static VALUE rbcrfsiz(VALUE vself, VALUE vindex){
438
+ CURIA *curia;
439
+ int index, fsiz;
440
+ FIXNUM_P(vindex);
441
+ if((index = FIX2INT(vindex)) == -1) myerror(DP_EMISC);
442
+ curia = crtable[index];
443
+ if((fsiz = crfsiz(curia)) == -1) myerror(dpecode);
444
+ return INT2FIX(fsiz);
445
+ }
446
+
447
+
448
+ static VALUE rbcrbnum(VALUE vself, VALUE vindex){
449
+ CURIA *curia;
450
+ int index, bnum;
451
+ FIXNUM_P(vindex);
452
+ if((index = FIX2INT(vindex)) == -1) myerror(DP_EMISC);
453
+ curia = crtable[index];
454
+ if((bnum = crbnum(curia)) == -1) myerror(dpecode);
455
+ return INT2FIX(bnum);
456
+ }
457
+
458
+
459
+ static VALUE rbcrrnum(VALUE vself, VALUE vindex){
460
+ CURIA *curia;
461
+ int index, rnum;
462
+ FIXNUM_P(vindex);
463
+ if((index = FIX2INT(vindex)) == -1) myerror(DP_EMISC);
464
+ curia = crtable[index];
465
+ if((rnum = crrnum(curia)) == -1) myerror(dpecode);
466
+ return INT2FIX(rnum);
467
+ }
468
+
469
+
470
+ static VALUE rbcrwritable(VALUE vself, VALUE vindex){
471
+ CURIA *curia;
472
+ int index;
473
+ FIXNUM_P(vindex);
474
+ if((index = FIX2INT(vindex)) == -1) myerror(DP_EMISC);
475
+ curia = crtable[index];
476
+ return crwritable(curia) ? Qtrue : Qfalse;
477
+ }
478
+
479
+
480
+ static VALUE rbcrfatalerror(VALUE vself, VALUE vindex){
481
+ CURIA *curia;
482
+ int index;
483
+ FIXNUM_P(vindex);
484
+ if((index = FIX2INT(vindex)) == -1) myerror(DP_EMISC);
485
+ curia = crtable[index];
486
+ return crfatalerror(curia) ? Qtrue : Qfalse;
487
+ }
488
+
489
+
490
+
491
+ /* END OF FILE */