ruby-qdbm 0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,5 @@
1
+ MANIFEST
2
+ extconf.rb
3
+ depot.rb
4
+ mod_depot.c
5
+ rbdptest
@@ -0,0 +1,18 @@
1
+ require 'mkmf'
2
+
3
+ dir_config("depot")
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_depot")
@@ -0,0 +1,488 @@
1
+ /*************************************************************************************************
2
+ * Implementation of Depot 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 <stdlib.h>
20
+ #include <unistd.h>
21
+ #include <sys/types.h>
22
+ #include <sys/stat.h>
23
+
24
+ #define MAXOPEN 1024
25
+
26
+ #ifndef RUBY_19
27
+ #ifndef RSTRING_LEN
28
+ #define RSTRING_LEN(v) (RSTRING(v)->len)
29
+ #endif
30
+ #endif
31
+
32
+ VALUE cdepoterror;
33
+ VALUE cdepoterror_ENOERR;
34
+ VALUE cdepoterror_EFATAL;
35
+ VALUE cdepoterror_EMODE;
36
+ VALUE cdepoterror_EBROKEN;
37
+ VALUE cdepoterror_EKEEP;
38
+ VALUE cdepoterror_ENOITEM;
39
+ VALUE cdepoterror_EALLOC;
40
+ VALUE cdepoterror_EMAP;
41
+ VALUE cdepoterror_EOPEN;
42
+ VALUE cdepoterror_ECLOSE;
43
+ VALUE cdepoterror_ETRUNC;
44
+ VALUE cdepoterror_ESYNC;
45
+ VALUE cdepoterror_ESTAT;
46
+ VALUE cdepoterror_ESEEK;
47
+ VALUE cdepoterror_EREAD;
48
+ VALUE cdepoterror_EWRITE;
49
+ VALUE cdepoterror_ELOCK;
50
+ VALUE cdepoterror_EUNLINK;
51
+ VALUE cdepoterror_EMKDIR;
52
+ VALUE cdepoterror_ERMDIR;
53
+ VALUE cdepoterror_EMISC;
54
+ VALUE mdepot;
55
+ DEPOT *dptable[MAXOPEN];
56
+ char dpsltable[MAXOPEN];
57
+
58
+
59
+ static void dpinit(void);
60
+ static int getnewindex(void);
61
+ static int checkdup(const char *name);
62
+ static void myerror(int ecode);
63
+ static VALUE rbdpversion(VALUE vself);
64
+ static VALUE rbdperrmsg(VALUE vself, VALUE vecode);
65
+ static VALUE rbdpopen(VALUE vself, VALUE vname, VALUE vomode, VALUE vbnum);
66
+ static VALUE rbdpclose(VALUE vself, VALUE vindex);
67
+ static VALUE rbdpsetsilent(VALUE vself, VALUE vindex, VALUE vvalue);
68
+ static VALUE rbdpput(VALUE vself, VALUE vindex, VALUE vkey, VALUE vval, VALUE vdmode);
69
+ static VALUE rbdpout(VALUE vself, VALUE vindex, VALUE vkey);
70
+ static VALUE rbdpget(VALUE vself, VALUE vindex, VALUE vkey, VALUE vstart, VALUE vmax);
71
+ static VALUE rbdpvsiz(VALUE vself, VALUE vindex, VALUE vkey);
72
+ static VALUE rbdpiterinit(VALUE vself, VALUE vindex);
73
+ static VALUE rbdpiternext(VALUE vself, VALUE vindex);
74
+ static VALUE rbdpsetalign(VALUE vself, VALUE vindex, VALUE valign);
75
+ static VALUE rbdpsetfbpsiz(VALUE vself, VALUE vindex, VALUE vsize);
76
+ static VALUE rbdpsync(VALUE vself, VALUE vindex);
77
+ static VALUE rbdpoptimize(VALUE vself, VALUE vindex, VALUE vbnum);
78
+ static VALUE rbdpfsiz(VALUE vself, VALUE vindex);
79
+ static VALUE rbdpbnum(VALUE vself, VALUE vindex);
80
+ static VALUE rbdprnum(VALUE vself, VALUE vindex);
81
+ static VALUE rbdpwritable(VALUE vself, VALUE vindex);
82
+ static VALUE rbdpfatalerror(VALUE vself, VALUE vindex);
83
+
84
+
85
+
86
+ /*************************************************************************************************
87
+ * public objects
88
+ *************************************************************************************************/
89
+
90
+
91
+ Init_mod_depot(){
92
+ dpinit();
93
+ cdepoterror = rb_define_class("DepotError", rb_eStandardError);
94
+ cdepoterror_ENOERR = rb_define_class("DepotError_ENOERR", cdepoterror);
95
+ cdepoterror_EFATAL = rb_define_class("DepotError_EFATAL", cdepoterror);
96
+ cdepoterror_EMODE = rb_define_class("DepotError_EMODE", cdepoterror);
97
+ cdepoterror_EBROKEN = rb_define_class("DepotError_EBROKEN", cdepoterror);
98
+ cdepoterror_EKEEP = rb_define_class("DepotError_EKEEP", cdepoterror);
99
+ cdepoterror_ENOITEM = rb_define_class("DepotError_ENOITEM", cdepoterror);
100
+ cdepoterror_EALLOC = rb_define_class("DepotError_EALLOC", cdepoterror);
101
+ cdepoterror_EMAP = rb_define_class("DepotError_EMAP", cdepoterror);
102
+ cdepoterror_EOPEN = rb_define_class("DepotError_EOPEN", cdepoterror);
103
+ cdepoterror_ECLOSE = rb_define_class("DepotError_ECLOSE", cdepoterror);
104
+ cdepoterror_ETRUNC = rb_define_class("DepotError_ETRUNC", cdepoterror);
105
+ cdepoterror_ESYNC = rb_define_class("DepotError_ESYNC", cdepoterror);
106
+ cdepoterror_ESTAT = rb_define_class("DepotError_ESTAT", cdepoterror);
107
+ cdepoterror_ESEEK = rb_define_class("DepotError_ESEEK", cdepoterror);
108
+ cdepoterror_EREAD = rb_define_class("DepotError_EREAD", cdepoterror);
109
+ cdepoterror_EWRITE = rb_define_class("DepotError_EWRITE", cdepoterror);
110
+ cdepoterror_ELOCK = rb_define_class("DepotError_ELOCK", cdepoterror);
111
+ cdepoterror_EUNLINK = rb_define_class("DepotError_EUNLINK", cdepoterror);
112
+ cdepoterror_EMKDIR = rb_define_class("DepotError_EMKDIR", cdepoterror);
113
+ cdepoterror_ERMDIR = rb_define_class("DepotError_ERMDIR", cdepoterror);
114
+ cdepoterror_EMISC = rb_define_class("DepotError_EMISC", cdepoterror);
115
+ mdepot = rb_define_module("Mod_Depot");
116
+ rb_define_const(mdepot, "EANY", cdepoterror);
117
+ rb_define_const(mdepot, "ENOERR", cdepoterror_ENOERR);
118
+ rb_define_const(mdepot, "EFATAL", cdepoterror_EFATAL);
119
+ rb_define_const(mdepot, "EMODE", cdepoterror_EMODE);
120
+ rb_define_const(mdepot, "EBROKEN", cdepoterror_EBROKEN);
121
+ rb_define_const(mdepot, "EKEEP", cdepoterror_EKEEP);
122
+ rb_define_const(mdepot, "ENOITEM", cdepoterror_ENOITEM);
123
+ rb_define_const(mdepot, "EALLOC", cdepoterror_EALLOC);
124
+ rb_define_const(mdepot, "EMAP", cdepoterror_EMAP);
125
+ rb_define_const(mdepot, "EOPEN", cdepoterror_EOPEN);
126
+ rb_define_const(mdepot, "ECLOSE", cdepoterror_ECLOSE);
127
+ rb_define_const(mdepot, "ETRUNC", cdepoterror_ETRUNC);
128
+ rb_define_const(mdepot, "ESYNC", cdepoterror_ESYNC);
129
+ rb_define_const(mdepot, "ESTAT", cdepoterror_ESTAT);
130
+ rb_define_const(mdepot, "ESEEK", cdepoterror_ESEEK);
131
+ rb_define_const(mdepot, "EREAD", cdepoterror_EREAD);
132
+ rb_define_const(mdepot, "EWRITE", cdepoterror_EWRITE);
133
+ rb_define_const(mdepot, "ELOCK", cdepoterror_ELOCK);
134
+ rb_define_const(mdepot, "EUNLINK", cdepoterror_EUNLINK);
135
+ rb_define_const(mdepot, "EMKDIR", cdepoterror_EMKDIR);
136
+ rb_define_const(mdepot, "ERMDIR", cdepoterror_ERMDIR);
137
+ rb_define_const(mdepot, "EMISC", cdepoterror_EMISC);
138
+ rb_define_const(mdepot, "OREADER", INT2FIX(DP_OREADER));
139
+ rb_define_const(mdepot, "OWRITER", INT2FIX(DP_OWRITER));
140
+ rb_define_const(mdepot, "OCREAT", INT2FIX(DP_OCREAT));
141
+ rb_define_const(mdepot, "OTRUNC", INT2FIX(DP_OTRUNC));
142
+ rb_define_const(mdepot, "ONOLCK", INT2FIX(DP_ONOLCK));
143
+ rb_define_const(mdepot, "OLCKNB", INT2FIX(DP_OLCKNB));
144
+ rb_define_const(mdepot, "OSPARSE", INT2FIX(DP_OSPARSE));
145
+ rb_define_const(mdepot, "DOVER", INT2FIX(DP_DOVER));
146
+ rb_define_const(mdepot, "DKEEP", INT2FIX(DP_DKEEP));
147
+ rb_define_const(mdepot, "DCAT", INT2FIX(DP_DCAT));
148
+ rb_define_module_function(mdepot, "mod_open", rbdpopen, 3);
149
+ rb_define_module_function(mdepot, "mod_close", rbdpclose, 1);
150
+ rb_define_module_function(mdepot, "mod_setsilent", rbdpsetsilent, 2);
151
+ rb_define_module_function(mdepot, "mod_put", rbdpput, 4);
152
+ rb_define_module_function(mdepot, "mod_out", rbdpout, 2);
153
+ rb_define_module_function(mdepot, "mod_get", rbdpget, 4);
154
+ rb_define_module_function(mdepot, "mod_vsiz", rbdpvsiz, 2);
155
+ rb_define_module_function(mdepot, "mod_iterinit", rbdpiterinit, 1);
156
+ rb_define_module_function(mdepot, "mod_iternext", rbdpiternext, 1);
157
+ rb_define_module_function(mdepot, "mod_setalign", rbdpsetalign, 2);
158
+ rb_define_module_function(mdepot, "mod_setfbpsiz", rbdpsetfbpsiz, 2);
159
+ rb_define_module_function(mdepot, "mod_sync", rbdpsync, 1);
160
+ rb_define_module_function(mdepot, "mod_optimize", rbdpoptimize, 2);
161
+ rb_define_module_function(mdepot, "mod_fsiz", rbdpfsiz, 1);
162
+ rb_define_module_function(mdepot, "mod_bnum", rbdpbnum, 1);
163
+ rb_define_module_function(mdepot, "mod_rnum", rbdprnum, 1);
164
+ rb_define_module_function(mdepot, "mod_writable", rbdpwritable, 1);
165
+ rb_define_module_function(mdepot, "mod_fatalerror", rbdpfatalerror, 1);
166
+ }
167
+
168
+
169
+
170
+ /*************************************************************************************************
171
+ * private objects
172
+ *************************************************************************************************/
173
+
174
+
175
+ static void dpinit(void){
176
+ int i;
177
+ for(i = 0; i < MAXOPEN; i++){
178
+ dptable[i] = NULL;
179
+ dpsltable[i] = 0;
180
+ }
181
+ }
182
+
183
+
184
+ static int getnewindex(void){
185
+ int i;
186
+ for(i = 0; i < MAXOPEN; i++){
187
+ if(dptable[i] == NULL) return i;
188
+ }
189
+ return -1;
190
+ }
191
+
192
+
193
+ static int checkdup(const char *name){
194
+ struct stat sbuf;
195
+ int i, inode;
196
+ if(stat(name, &sbuf) == -1) return 0;
197
+ inode = sbuf.st_ino;
198
+ for(i = 0; i < MAXOPEN; i++){
199
+ if(dptable[i] != NULL && dpinode(dptable[i]) == inode) return -1;
200
+ }
201
+ return 0;
202
+ }
203
+
204
+
205
+ static void myerror(int ecode){
206
+ VALUE verr;
207
+ switch(ecode){
208
+ case DP_ENOERR: verr = cdepoterror_ENOERR; break;
209
+ case DP_EFATAL: verr = cdepoterror_EFATAL; break;
210
+ case DP_EMODE: verr = cdepoterror_EMODE; break;
211
+ case DP_EBROKEN: verr = cdepoterror_EBROKEN; break;
212
+ case DP_EKEEP: verr = cdepoterror_EKEEP; break;
213
+ case DP_ENOITEM: verr = cdepoterror_ENOITEM; break;
214
+ case DP_EALLOC: verr = cdepoterror_EALLOC; break;
215
+ case DP_EMAP: verr = cdepoterror_EMAP; break;
216
+ case DP_EOPEN: verr = cdepoterror_EOPEN; break;
217
+ case DP_ECLOSE: verr = cdepoterror_ECLOSE; break;
218
+ case DP_ETRUNC: verr = cdepoterror_ETRUNC; break;
219
+ case DP_ESYNC: verr = cdepoterror_ESYNC; break;
220
+ case DP_ESTAT: verr = cdepoterror_ESTAT; break;
221
+ case DP_ESEEK: verr = cdepoterror_ESEEK; break;
222
+ case DP_EREAD: verr = cdepoterror_EREAD; break;
223
+ case DP_EWRITE: verr = cdepoterror_EWRITE; break;
224
+ case DP_ELOCK: verr = cdepoterror_ELOCK; break;
225
+ case DP_EUNLINK: verr = cdepoterror_EUNLINK; break;
226
+ case DP_EMKDIR: verr = cdepoterror_EMKDIR; break;
227
+ case DP_ERMDIR: verr = cdepoterror_ERMDIR; break;
228
+ case DP_EMISC: verr = cdepoterror_EMISC; break;
229
+ default: verr = cdepoterror; break;
230
+ }
231
+ rb_raise(verr, "%s", dperrmsg(ecode));
232
+ }
233
+
234
+
235
+ static VALUE rbdpopen(VALUE vself, VALUE vname, VALUE vomode, VALUE vbnum){
236
+ DEPOT *depot;
237
+ const char *name;
238
+ int index, omode, bnum;
239
+ if((index = getnewindex()) == -1) myerror(DP_EMISC);
240
+ name = StringValuePtr(vname);
241
+ FIXNUM_P(vomode);
242
+ omode = FIX2INT(vomode);
243
+ FIXNUM_P(vbnum);
244
+ bnum = FIX2INT(vbnum);
245
+ if(checkdup(name) == -1) myerror(DP_EMISC);
246
+ depot = dpopen(name, omode, bnum);
247
+ if(!depot) myerror(dpecode);
248
+ dptable[index] = depot;
249
+ dpsltable[index] = 0;
250
+ return INT2FIX(index);
251
+ }
252
+
253
+
254
+ static VALUE rbdpclose(VALUE vself, VALUE vindex){
255
+ DEPOT *depot;
256
+ int index;
257
+ FIXNUM_P(vindex);
258
+ if((index = FIX2INT(vindex)) == -1) myerror(DP_EMISC);
259
+ depot = dptable[index];
260
+ dptable[index] = NULL;
261
+ if(!dpclose(depot)) myerror(dpecode);
262
+ return Qtrue;
263
+ }
264
+
265
+
266
+ static VALUE rbdpsetsilent(VALUE vself, VALUE vindex, VALUE vvalue){
267
+ int index;
268
+ FIXNUM_P(vindex);
269
+ if((index = FIX2INT(vindex)) == -1) myerror(DP_EMISC);
270
+ dpsltable[index] = FIX2INT(vvalue);
271
+ return Qnil;
272
+ }
273
+
274
+
275
+ static VALUE rbdpput(VALUE vself, VALUE vindex, VALUE vkey, VALUE vval, VALUE vdmode){
276
+ DEPOT *depot;
277
+ const char *kbuf, *vbuf;
278
+ int index, ksiz, vsiz, dmode;
279
+ FIXNUM_P(vindex);
280
+ if((index = FIX2INT(vindex)) == -1) myerror(DP_EMISC);
281
+ kbuf = StringValuePtr(vkey);
282
+ ksiz = RSTRING_LEN(vkey);
283
+ vbuf = StringValuePtr(vval);
284
+ vsiz = RSTRING_LEN(vval);
285
+ FIXNUM_P(vdmode);
286
+ dmode = FIX2INT(vdmode);
287
+ depot = dptable[index];
288
+ if(!dpput(depot, kbuf, ksiz, vbuf, vsiz, dmode)){
289
+ if(dpsltable[index] && dpecode == DP_EKEEP) return Qfalse;
290
+ myerror(dpecode);
291
+ }
292
+ return Qtrue;
293
+ }
294
+
295
+
296
+ static VALUE rbdpout(VALUE vself, VALUE vindex, VALUE vkey){
297
+ DEPOT *depot;
298
+ const char *kbuf;
299
+ int index, ksiz;
300
+ FIXNUM_P(vindex);
301
+ if((index = FIX2INT(vindex)) == -1) myerror(DP_EMISC);
302
+ kbuf = StringValuePtr(vkey);
303
+ ksiz = RSTRING_LEN(vkey);
304
+ depot = dptable[index];
305
+ if(!dpout(depot, kbuf, ksiz)){
306
+ if(dpsltable[index] && dpecode == DP_ENOITEM) return Qfalse;
307
+ myerror(dpecode);
308
+ }
309
+ return Qtrue;
310
+ }
311
+
312
+
313
+ static VALUE rbdpget(VALUE vself, VALUE vindex, VALUE vkey, VALUE vstart, VALUE vmax){
314
+ DEPOT *depot;
315
+ const char *kbuf;
316
+ char *vbuf;
317
+ int index, ksiz, start, max, vsiz;
318
+ VALUE vval;
319
+ FIXNUM_P(vindex);
320
+ if((index = FIX2INT(vindex)) == -1) myerror(DP_EMISC);
321
+ kbuf = StringValuePtr(vkey);
322
+ ksiz = RSTRING_LEN(vkey);
323
+ FIXNUM_P(vstart);
324
+ start = FIX2INT(vstart);
325
+ FIXNUM_P(vmax);
326
+ max = FIX2INT(vmax);
327
+ depot = dptable[index];
328
+ if(!(vbuf = dpget(depot, kbuf, ksiz, start, max, &vsiz))){
329
+ if(dpsltable[index] && dpecode == DP_ENOITEM) return Qnil;
330
+ myerror(dpecode);
331
+ }
332
+ vval = rb_str_new(vbuf, vsiz);
333
+ free(vbuf);
334
+ return vval;
335
+ }
336
+
337
+
338
+ static VALUE rbdpvsiz(VALUE vself, VALUE vindex, VALUE vkey){
339
+ DEPOT *depot;
340
+ const char *kbuf;
341
+ int index, ksiz, vsiz;
342
+ FIXNUM_P(vindex);
343
+ if((index = FIX2INT(vindex)) == -1) myerror(DP_EMISC);
344
+ kbuf = StringValuePtr(vkey);
345
+ ksiz = RSTRING_LEN(vkey);
346
+ depot = dptable[index];
347
+ if((vsiz = dpvsiz(depot, kbuf, ksiz)) == -1){
348
+ if(dpsltable[index] && dpecode == DP_ENOITEM) return INT2FIX(-1);
349
+ myerror(dpecode);
350
+ }
351
+ return INT2FIX(vsiz);
352
+ }
353
+
354
+
355
+ static VALUE rbdpiterinit(VALUE vself, VALUE vindex){
356
+ DEPOT *depot;
357
+ int index;
358
+ FIXNUM_P(vindex);
359
+ if((index = FIX2INT(vindex)) == -1) myerror(DP_EMISC);
360
+ depot = dptable[index];
361
+ if(!dpiterinit(depot)) myerror(dpecode);
362
+ return Qtrue;
363
+ }
364
+
365
+
366
+ static VALUE rbdpiternext(VALUE vself, VALUE vindex){
367
+ DEPOT *depot;
368
+ char *kbuf;
369
+ int index, ksiz;
370
+ VALUE vkey;
371
+ FIXNUM_P(vindex);
372
+ if((index = FIX2INT(vindex)) == -1) myerror(DP_EMISC);
373
+ depot = dptable[index];
374
+ if(!(kbuf = dpiternext(depot, &ksiz))){
375
+ if(dpsltable[index] && dpecode == DP_ENOITEM) return Qnil;
376
+ myerror(dpecode);
377
+ }
378
+ vkey = rb_str_new(kbuf, ksiz);
379
+ free(kbuf);
380
+ return vkey;
381
+ }
382
+
383
+
384
+ static VALUE rbdpsetalign(VALUE vself, VALUE vindex, VALUE valign){
385
+ DEPOT *depot;
386
+ int index, align;
387
+ FIXNUM_P(vindex);
388
+ if((index = FIX2INT(vindex)) == -1) myerror(DP_EMISC);
389
+ FIXNUM_P(valign);
390
+ align = FIX2INT(valign);
391
+ depot = dptable[index];
392
+ if(!dpsetalign(depot, align)) myerror(dpecode);
393
+ return Qtrue;
394
+ }
395
+
396
+
397
+ static VALUE rbdpsetfbpsiz(VALUE vself, VALUE vindex, VALUE vsize){
398
+ DEPOT *depot;
399
+ int index, size;
400
+ FIXNUM_P(vindex);
401
+ if((index = FIX2INT(vindex)) == -1) myerror(DP_EMISC);
402
+ FIXNUM_P(vsize);
403
+ size = FIX2INT(vsize);
404
+ depot = dptable[index];
405
+ if(!dpsetfbpsiz(depot, size)) myerror(dpecode);
406
+ return Qtrue;
407
+ }
408
+
409
+
410
+ static VALUE rbdpsync(VALUE vself, VALUE vindex){
411
+ DEPOT *depot;
412
+ int index;
413
+ FIXNUM_P(vindex);
414
+ if((index = FIX2INT(vindex)) == -1) myerror(DP_EMISC);
415
+ depot = dptable[index];
416
+ if(!dpsync(depot)) myerror(dpecode);
417
+ return Qtrue;
418
+ }
419
+
420
+
421
+ static VALUE rbdpoptimize(VALUE vself, VALUE vindex, VALUE vbnum){
422
+ DEPOT *depot;
423
+ int index, bnum;
424
+ FIXNUM_P(vindex);
425
+ if((index = FIX2INT(vindex)) == -1) myerror(DP_EMISC);
426
+ FIXNUM_P(vbnum);
427
+ bnum = FIX2INT(vbnum);
428
+ depot = dptable[index];
429
+ if(!dpoptimize(depot, bnum)) myerror(dpecode);
430
+ return Qtrue;
431
+ }
432
+
433
+
434
+ static VALUE rbdpfsiz(VALUE vself, VALUE vindex){
435
+ DEPOT *depot;
436
+ int index, fsiz;
437
+ FIXNUM_P(vindex);
438
+ if((index = FIX2INT(vindex)) == -1) myerror(DP_EMISC);
439
+ depot = dptable[index];
440
+ if((fsiz = dpfsiz(depot)) == -1) myerror(dpecode);
441
+ return INT2FIX(fsiz);
442
+ }
443
+
444
+
445
+ static VALUE rbdpbnum(VALUE vself, VALUE vindex){
446
+ DEPOT *depot;
447
+ int index, bnum;
448
+ FIXNUM_P(vindex);
449
+ if((index = FIX2INT(vindex)) == -1) myerror(DP_EMISC);
450
+ depot = dptable[index];
451
+ if((bnum = dpbnum(depot)) == -1) myerror(dpecode);
452
+ return INT2FIX(bnum);
453
+ }
454
+
455
+
456
+ static VALUE rbdprnum(VALUE vself, VALUE vindex){
457
+ DEPOT *depot;
458
+ int index, rnum;
459
+ FIXNUM_P(vindex);
460
+ if((index = FIX2INT(vindex)) == -1) myerror(DP_EMISC);
461
+ depot = dptable[index];
462
+ if((rnum = dprnum(depot)) == -1) myerror(dpecode);
463
+ return INT2FIX(rnum);
464
+ }
465
+
466
+
467
+ static VALUE rbdpwritable(VALUE vself, VALUE vindex){
468
+ DEPOT *depot;
469
+ int index;
470
+ FIXNUM_P(vindex);
471
+ if((index = FIX2INT(vindex)) == -1) myerror(DP_EMISC);
472
+ depot = dptable[index];
473
+ return dpwritable(depot) ? Qtrue : Qfalse;
474
+ }
475
+
476
+
477
+ static VALUE rbdpfatalerror(VALUE vself, VALUE vindex){
478
+ DEPOT *depot;
479
+ int index;
480
+ FIXNUM_P(vindex);
481
+ if((index = FIX2INT(vindex)) == -1) myerror(DP_EMISC);
482
+ depot = dptable[index];
483
+ return dpfatalerror(depot) ? Qtrue : Qfalse;
484
+ }
485
+
486
+
487
+
488
+ /* END OF FILE */