ruby-qdbm 0.1
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.
- checksums.yaml +7 -0
- data/.gitignore +12 -0
- data/Gemfile +13 -0
- data/README.md +37 -0
- data/Rakefile +65 -0
- data/ext/curia/MANIFEST +5 -0
- data/ext/curia/extconf.rb +18 -0
- data/ext/curia/mod_curia.c +491 -0
- data/ext/depot/MANIFEST +5 -0
- data/ext/depot/extconf.rb +18 -0
- data/ext/depot/mod_depot.c +488 -0
- data/ext/villa/MANIFEST +5 -0
- data/ext/villa/extconf.rb +18 -0
- data/ext/villa/mod_villa.c +704 -0
- data/lib/curia.rb +598 -0
- data/lib/depot.rb +594 -0
- data/lib/villa.rb +816 -0
- data/myrbdoc +194 -0
- data/overview +6 -0
- data/rbapidoc/curia.rb.html +430 -0
- data/rbapidoc/depot.rb.html +426 -0
- data/rbapidoc/index.html +46 -0
- data/rbapidoc/villa.rb.html +551 -0
- data/rbspex-ja.html +284 -0
- data/rbspex.html +284 -0
- data/ruby-qdbm.gemspec +36 -0
- metadata +114 -0
data/ext/villa/MANIFEST
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
require 'mkmf'
|
2
|
+
|
3
|
+
dir_config("villa")
|
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_villa")
|
@@ -0,0 +1,704 @@
|
|
1
|
+
/*************************************************************************************************
|
2
|
+
* Implementation of Villa 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 <cabin.h>
|
20
|
+
#include <villa.h>
|
21
|
+
#include <stdlib.h>
|
22
|
+
#include <unistd.h>
|
23
|
+
#include <sys/types.h>
|
24
|
+
#include <sys/stat.h>
|
25
|
+
|
26
|
+
#define MAXOPEN 1024
|
27
|
+
|
28
|
+
#ifndef RUBY_19
|
29
|
+
#ifndef RSTRING_LEN
|
30
|
+
#define RSTRING_LEN(v) (RSTRING(v)->len)
|
31
|
+
#endif
|
32
|
+
#endif
|
33
|
+
|
34
|
+
VALUE cvillaerror;
|
35
|
+
VALUE cvillaerror_ENOERR;
|
36
|
+
VALUE cvillaerror_EFATAL;
|
37
|
+
VALUE cvillaerror_EMODE;
|
38
|
+
VALUE cvillaerror_EBROKEN;
|
39
|
+
VALUE cvillaerror_EKEEP;
|
40
|
+
VALUE cvillaerror_ENOITEM;
|
41
|
+
VALUE cvillaerror_EALLOC;
|
42
|
+
VALUE cvillaerror_EMAP;
|
43
|
+
VALUE cvillaerror_EOPEN;
|
44
|
+
VALUE cvillaerror_ECLOSE;
|
45
|
+
VALUE cvillaerror_ETRUNC;
|
46
|
+
VALUE cvillaerror_ESYNC;
|
47
|
+
VALUE cvillaerror_ESTAT;
|
48
|
+
VALUE cvillaerror_ESEEK;
|
49
|
+
VALUE cvillaerror_EREAD;
|
50
|
+
VALUE cvillaerror_EWRITE;
|
51
|
+
VALUE cvillaerror_ELOCK;
|
52
|
+
VALUE cvillaerror_EUNLINK;
|
53
|
+
VALUE cvillaerror_EMKDIR;
|
54
|
+
VALUE cvillaerror_ERMDIR;
|
55
|
+
VALUE cvillaerror_EMISC;
|
56
|
+
VALUE mvilla;
|
57
|
+
ID idcompare;
|
58
|
+
VILLA *vltable[MAXOPEN];
|
59
|
+
char vlsltable[MAXOPEN];
|
60
|
+
|
61
|
+
|
62
|
+
static void vlinit(void);
|
63
|
+
static int getnewindex(void);
|
64
|
+
static int checkdup(const char *name);
|
65
|
+
static void myerror(int ecode);
|
66
|
+
static int objcompare(const char *aptr, int asiz, const char *bptr, int bsiz);
|
67
|
+
static VALUE rbvlversion(VALUE vself);
|
68
|
+
static VALUE rbvlerrmsg(VALUE vself, VALUE vecode);
|
69
|
+
static VALUE rbvlopen(VALUE vself, VALUE vname, VALUE vomode, VALUE vcmode);
|
70
|
+
static VALUE rbvlclose(VALUE vself, VALUE vindex);
|
71
|
+
static VALUE rbvlsetsilent(VALUE vself, VALUE vindex, VALUE vvalue);
|
72
|
+
static VALUE rbvlput(VALUE vself, VALUE vindex, VALUE vkey, VALUE vval, VALUE vdmode);
|
73
|
+
static VALUE rbvlout(VALUE vself, VALUE vindex, VALUE vkey);
|
74
|
+
static VALUE rbvlget(VALUE vself, VALUE vindex, VALUE vkey);
|
75
|
+
static VALUE rbvlvsiz(VALUE vself, VALUE vindex, VALUE vkey);
|
76
|
+
static VALUE rbvlvnum(VALUE vself, VALUE vindex, VALUE vkey);
|
77
|
+
static VALUE rbvlcurfirst(VALUE vself, VALUE vindex);
|
78
|
+
static VALUE rbvlcurlast(VALUE vself, VALUE vindex);
|
79
|
+
static VALUE rbvlcurprev(VALUE vself, VALUE vindex);
|
80
|
+
static VALUE rbvlcurnext(VALUE vself, VALUE vindex);
|
81
|
+
static VALUE rbvlcurjump(VALUE vself, VALUE vindex, VALUE vkey, VALUE vjmode);
|
82
|
+
static VALUE rbvlcurkey(VALUE vself, VALUE vindex);
|
83
|
+
static VALUE rbvlcurval(VALUE vself, VALUE vindex);
|
84
|
+
static VALUE rbvlcurput(VALUE vself, VALUE vindex, VALUE vval, VALUE vjmode);
|
85
|
+
static VALUE rbvlcurout(VALUE vself, VALUE vindex);
|
86
|
+
static VALUE rbvlsettuning(VALUE vself, VALUE vindex,
|
87
|
+
VALUE vlrecmax, VALUE vnidxmax, VALUE vlcnum, VALUE vncnum);
|
88
|
+
static VALUE rbvlsync(VALUE vself, VALUE vindex);
|
89
|
+
static VALUE rbvloptimize(VALUE vself, VALUE vindex);
|
90
|
+
static VALUE rbvlfsiz(VALUE vself, VALUE vindex);
|
91
|
+
static VALUE rbvlrnum(VALUE vself, VALUE vindex);
|
92
|
+
static VALUE rbvlwritable(VALUE vself, VALUE vindex);
|
93
|
+
static VALUE rbvlfatalerror(VALUE vself, VALUE vindex);
|
94
|
+
static VALUE rbvltranbegin(VALUE vself, VALUE vindex);
|
95
|
+
static VALUE rbvltrancommit(VALUE vself, VALUE vindex);
|
96
|
+
static VALUE rbvltranabort(VALUE vself, VALUE vindex);
|
97
|
+
|
98
|
+
|
99
|
+
|
100
|
+
/*************************************************************************************************
|
101
|
+
* public objects
|
102
|
+
*************************************************************************************************/
|
103
|
+
|
104
|
+
|
105
|
+
Init_mod_villa(){
|
106
|
+
vlinit();
|
107
|
+
cvillaerror = rb_define_class("VillaError", rb_eStandardError);
|
108
|
+
cvillaerror_ENOERR = rb_define_class("VillaError_ENOERR", cvillaerror);
|
109
|
+
cvillaerror_EFATAL = rb_define_class("VillaError_EFATAL", cvillaerror);
|
110
|
+
cvillaerror_EMODE = rb_define_class("VillaError_EMODE", cvillaerror);
|
111
|
+
cvillaerror_EBROKEN = rb_define_class("VillaError_EBROKEN", cvillaerror);
|
112
|
+
cvillaerror_EKEEP = rb_define_class("VillaError_EKEEP", cvillaerror);
|
113
|
+
cvillaerror_ENOITEM = rb_define_class("VillaError_ENOITEM", cvillaerror);
|
114
|
+
cvillaerror_EALLOC = rb_define_class("VillaError_EALLOC", cvillaerror);
|
115
|
+
cvillaerror_EMAP = rb_define_class("VillaError_EMAP", cvillaerror);
|
116
|
+
cvillaerror_EOPEN = rb_define_class("VillaError_EOPEN", cvillaerror);
|
117
|
+
cvillaerror_ECLOSE = rb_define_class("VillaError_ECLOSE", cvillaerror);
|
118
|
+
cvillaerror_ETRUNC = rb_define_class("VillaError_ETRUNC", cvillaerror);
|
119
|
+
cvillaerror_ESYNC = rb_define_class("VillaError_ESYNC", cvillaerror);
|
120
|
+
cvillaerror_ESTAT = rb_define_class("VillaError_ESTAT", cvillaerror);
|
121
|
+
cvillaerror_ESEEK = rb_define_class("VillaError_ESEEK", cvillaerror);
|
122
|
+
cvillaerror_EREAD = rb_define_class("VillaError_EREAD", cvillaerror);
|
123
|
+
cvillaerror_EWRITE = rb_define_class("VillaError_EWRITE", cvillaerror);
|
124
|
+
cvillaerror_ELOCK = rb_define_class("VillaError_ELOCK", cvillaerror);
|
125
|
+
cvillaerror_EUNLINK = rb_define_class("VillaError_EUNLINK", cvillaerror);
|
126
|
+
cvillaerror_EMKDIR = rb_define_class("VillaError_EMKDIR", cvillaerror);
|
127
|
+
cvillaerror_ERMDIR = rb_define_class("VillaError_ERMDIR", cvillaerror);
|
128
|
+
cvillaerror_EMISC = rb_define_class("VillaError_EMISC", cvillaerror);
|
129
|
+
mvilla = rb_define_module("Mod_Villa");
|
130
|
+
rb_define_const(mvilla, "EANY", cvillaerror);
|
131
|
+
rb_define_const(mvilla, "ENOERR", cvillaerror_ENOERR);
|
132
|
+
rb_define_const(mvilla, "EFATAL", cvillaerror_EFATAL);
|
133
|
+
rb_define_const(mvilla, "EMODE", cvillaerror_EMODE);
|
134
|
+
rb_define_const(mvilla, "EBROKEN", cvillaerror_EBROKEN);
|
135
|
+
rb_define_const(mvilla, "EKEEP", cvillaerror_EKEEP);
|
136
|
+
rb_define_const(mvilla, "ENOITEM", cvillaerror_ENOITEM);
|
137
|
+
rb_define_const(mvilla, "EALLOC", cvillaerror_EALLOC);
|
138
|
+
rb_define_const(mvilla, "EMAP", cvillaerror_EMAP);
|
139
|
+
rb_define_const(mvilla, "EOPEN", cvillaerror_EOPEN);
|
140
|
+
rb_define_const(mvilla, "ECLOSE", cvillaerror_ECLOSE);
|
141
|
+
rb_define_const(mvilla, "ETRUNC", cvillaerror_ETRUNC);
|
142
|
+
rb_define_const(mvilla, "ESYNC", cvillaerror_ESYNC);
|
143
|
+
rb_define_const(mvilla, "ESTAT", cvillaerror_ESTAT);
|
144
|
+
rb_define_const(mvilla, "ESEEK", cvillaerror_ESEEK);
|
145
|
+
rb_define_const(mvilla, "EREAD", cvillaerror_EREAD);
|
146
|
+
rb_define_const(mvilla, "EWRITE", cvillaerror_EWRITE);
|
147
|
+
rb_define_const(mvilla, "ELOCK", cvillaerror_ELOCK);
|
148
|
+
rb_define_const(mvilla, "EUNLINK", cvillaerror_EUNLINK);
|
149
|
+
rb_define_const(mvilla, "EMKDIR", cvillaerror_EMKDIR);
|
150
|
+
rb_define_const(mvilla, "ERMDIR", cvillaerror_ERMDIR);
|
151
|
+
rb_define_const(mvilla, "EMISC", cvillaerror_EMISC);
|
152
|
+
rb_define_const(mvilla, "OREADER", INT2FIX(VL_OREADER));
|
153
|
+
rb_define_const(mvilla, "OWRITER", INT2FIX(VL_OWRITER));
|
154
|
+
rb_define_const(mvilla, "OCREAT", INT2FIX(VL_OCREAT));
|
155
|
+
rb_define_const(mvilla, "OTRUNC", INT2FIX(VL_OTRUNC));
|
156
|
+
rb_define_const(mvilla, "ONOLCK", INT2FIX(VL_ONOLCK));
|
157
|
+
rb_define_const(mvilla, "OLCKNB", INT2FIX(VL_OLCKNB));
|
158
|
+
rb_define_const(mvilla, "OZCOMP", INT2FIX(VL_OZCOMP));
|
159
|
+
rb_define_const(mvilla, "OYCOMP", INT2FIX(VL_OYCOMP));
|
160
|
+
rb_define_const(mvilla, "OXCOMP", INT2FIX(VL_OXCOMP));
|
161
|
+
rb_define_const(mvilla, "CMPLEX", INT2FIX(0));
|
162
|
+
rb_define_const(mvilla, "CMPDEC", INT2FIX(1));
|
163
|
+
rb_define_const(mvilla, "CMPOBJ", INT2FIX(2));
|
164
|
+
rb_define_const(mvilla, "DOVER", INT2FIX(VL_DOVER));
|
165
|
+
rb_define_const(mvilla, "DKEEP", INT2FIX(VL_DKEEP));
|
166
|
+
rb_define_const(mvilla, "DCAT", INT2FIX(VL_DCAT));
|
167
|
+
rb_define_const(mvilla, "DDUP", INT2FIX(VL_DDUP));
|
168
|
+
rb_define_const(mvilla, "DDUPR", INT2FIX(VL_DDUPR));
|
169
|
+
rb_define_const(mvilla, "JFORWARD", INT2FIX(VL_JFORWARD));
|
170
|
+
rb_define_const(mvilla, "JBACKWARD", INT2FIX(VL_JBACKWARD));
|
171
|
+
rb_define_const(mvilla, "CPCURRENT", INT2FIX(VL_CPCURRENT));
|
172
|
+
rb_define_const(mvilla, "CPBEFORE", INT2FIX(VL_CPBEFORE));
|
173
|
+
rb_define_const(mvilla, "CPAFTER", INT2FIX(VL_CPAFTER));
|
174
|
+
rb_define_module_function(mvilla, "mod_open", rbvlopen, 3);
|
175
|
+
rb_define_module_function(mvilla, "mod_close", rbvlclose, 1);
|
176
|
+
rb_define_module_function(mvilla, "mod_setsilent", rbvlsetsilent, 2);
|
177
|
+
rb_define_module_function(mvilla, "mod_put", rbvlput, 4);
|
178
|
+
rb_define_module_function(mvilla, "mod_out", rbvlout, 2);
|
179
|
+
rb_define_module_function(mvilla, "mod_get", rbvlget, 2);
|
180
|
+
rb_define_module_function(mvilla, "mod_vsiz", rbvlvsiz, 2);
|
181
|
+
rb_define_module_function(mvilla, "mod_vnum", rbvlvnum, 2);
|
182
|
+
rb_define_module_function(mvilla, "mod_curfirst", rbvlcurfirst, 1);
|
183
|
+
rb_define_module_function(mvilla, "mod_curlast", rbvlcurlast, 1);
|
184
|
+
rb_define_module_function(mvilla, "mod_curprev", rbvlcurprev, 1);
|
185
|
+
rb_define_module_function(mvilla, "mod_curnext", rbvlcurnext, 1);
|
186
|
+
rb_define_module_function(mvilla, "mod_curjump", rbvlcurjump, 3);
|
187
|
+
rb_define_module_function(mvilla, "mod_curkey", rbvlcurkey, 1);
|
188
|
+
rb_define_module_function(mvilla, "mod_curval", rbvlcurval, 1);
|
189
|
+
rb_define_module_function(mvilla, "mod_curput", rbvlcurput, 3);
|
190
|
+
rb_define_module_function(mvilla, "mod_curout", rbvlcurout, 1);
|
191
|
+
rb_define_module_function(mvilla, "mod_settuning", rbvlsettuning, 5);
|
192
|
+
rb_define_module_function(mvilla, "mod_sync", rbvlsync, 1);
|
193
|
+
rb_define_module_function(mvilla, "mod_optimize", rbvloptimize, 1);
|
194
|
+
rb_define_module_function(mvilla, "mod_fsiz", rbvlfsiz, 1);
|
195
|
+
rb_define_module_function(mvilla, "mod_rnum", rbvlrnum, 1);
|
196
|
+
rb_define_module_function(mvilla, "mod_writable", rbvlwritable, 1);
|
197
|
+
rb_define_module_function(mvilla, "mod_fatalerror", rbvlfatalerror, 1);
|
198
|
+
rb_define_module_function(mvilla, "mod_tranbegin", rbvltranbegin, 1);
|
199
|
+
rb_define_module_function(mvilla, "mod_trancommit", rbvltrancommit, 1);
|
200
|
+
rb_define_module_function(mvilla, "mod_tranabort", rbvltranabort, 1);
|
201
|
+
rb_eval_string("def Mod_Villa.compare(astr, bstr)\n"
|
202
|
+
" aobj = nil\n"
|
203
|
+
" bobj = nil\n"
|
204
|
+
" begin\n"
|
205
|
+
" aobj = Marshal.load(astr);\n"
|
206
|
+
" rescue\n"
|
207
|
+
" end\n"
|
208
|
+
" begin\n"
|
209
|
+
" bobj = Marshal.load(bstr);\n"
|
210
|
+
" rescue\n"
|
211
|
+
" end\n"
|
212
|
+
" if(aobj && !bobj)\n"
|
213
|
+
" return 1\n"
|
214
|
+
" end\n"
|
215
|
+
" if(!aobj && bobj)\n"
|
216
|
+
" return -1\n"
|
217
|
+
" end\n"
|
218
|
+
" if(!aobj && !bobj)\n"
|
219
|
+
" return 0\n"
|
220
|
+
" end\n"
|
221
|
+
" begin\n"
|
222
|
+
" aobj <=> bobj\n"
|
223
|
+
" rescue\n"
|
224
|
+
" 0\n"
|
225
|
+
" end\n"
|
226
|
+
"end\n");
|
227
|
+
idcompare = rb_intern("compare");
|
228
|
+
}
|
229
|
+
|
230
|
+
|
231
|
+
|
232
|
+
/*************************************************************************************************
|
233
|
+
* private objects
|
234
|
+
*************************************************************************************************/
|
235
|
+
|
236
|
+
|
237
|
+
static void vlinit(void){
|
238
|
+
int i;
|
239
|
+
for(i = 0; i < MAXOPEN; i++){
|
240
|
+
vltable[i] = NULL;
|
241
|
+
vlsltable[i] = 0;
|
242
|
+
}
|
243
|
+
}
|
244
|
+
|
245
|
+
|
246
|
+
static int getnewindex(void){
|
247
|
+
int i;
|
248
|
+
for(i = 0; i < MAXOPEN; i++){
|
249
|
+
if(vltable[i] == NULL) return i;
|
250
|
+
}
|
251
|
+
return -1;
|
252
|
+
}
|
253
|
+
|
254
|
+
|
255
|
+
static int checkdup(const char *name){
|
256
|
+
struct stat sbuf;
|
257
|
+
int i, inode;
|
258
|
+
if(stat(name, &sbuf) == -1) return 0;
|
259
|
+
inode = sbuf.st_ino;
|
260
|
+
for(i = 0; i < MAXOPEN; i++){
|
261
|
+
if(vltable[i] != NULL && vlinode(vltable[i]) == inode) return -1;
|
262
|
+
}
|
263
|
+
return 0;
|
264
|
+
}
|
265
|
+
|
266
|
+
|
267
|
+
static void myerror(int ecode){
|
268
|
+
VALUE verr;
|
269
|
+
switch(ecode){
|
270
|
+
case DP_ENOERR: verr = cvillaerror_ENOERR; break;
|
271
|
+
case DP_EFATAL: verr = cvillaerror_EFATAL; break;
|
272
|
+
case DP_EMODE: verr = cvillaerror_EMODE; break;
|
273
|
+
case DP_EBROKEN: verr = cvillaerror_EBROKEN; break;
|
274
|
+
case DP_EKEEP: verr = cvillaerror_EKEEP; break;
|
275
|
+
case DP_ENOITEM: verr = cvillaerror_ENOITEM; break;
|
276
|
+
case DP_EALLOC: verr = cvillaerror_EALLOC; break;
|
277
|
+
case DP_EMAP: verr = cvillaerror_EMAP; break;
|
278
|
+
case DP_EOPEN: verr = cvillaerror_EOPEN; break;
|
279
|
+
case DP_ECLOSE: verr = cvillaerror_ECLOSE; break;
|
280
|
+
case DP_ETRUNC: verr = cvillaerror_ETRUNC; break;
|
281
|
+
case DP_ESYNC: verr = cvillaerror_ESYNC; break;
|
282
|
+
case DP_ESTAT: verr = cvillaerror_ESTAT; break;
|
283
|
+
case DP_ESEEK: verr = cvillaerror_ESEEK; break;
|
284
|
+
case DP_EREAD: verr = cvillaerror_EREAD; break;
|
285
|
+
case DP_EWRITE: verr = cvillaerror_EWRITE; break;
|
286
|
+
case DP_ELOCK: verr = cvillaerror_ELOCK; break;
|
287
|
+
case DP_EUNLINK: verr = cvillaerror_EUNLINK; break;
|
288
|
+
case DP_EMKDIR: verr = cvillaerror_EMKDIR; break;
|
289
|
+
case DP_ERMDIR: verr = cvillaerror_ERMDIR; break;
|
290
|
+
case DP_EMISC: verr = cvillaerror_EMISC; break;
|
291
|
+
default: verr = cvillaerror; break;
|
292
|
+
}
|
293
|
+
rb_raise(verr, "%s", dperrmsg(ecode));
|
294
|
+
}
|
295
|
+
|
296
|
+
|
297
|
+
static int objcompare(const char *aptr, int asiz, const char *bptr, int bsiz){
|
298
|
+
VALUE vastr, vbstr, vret;
|
299
|
+
vastr = rb_str_new(aptr, asiz);
|
300
|
+
vbstr = rb_str_new(bptr, bsiz);
|
301
|
+
vret = rb_funcall(mvilla, idcompare, 2, vastr, vbstr);
|
302
|
+
return FIX2INT(vret);
|
303
|
+
}
|
304
|
+
|
305
|
+
|
306
|
+
static VALUE rbvlopen(VALUE vself, VALUE vname, VALUE vomode, VALUE vcmode){
|
307
|
+
VILLA *villa;
|
308
|
+
const char *name;
|
309
|
+
int index, omode, cmode;
|
310
|
+
VLCFUNC cmp;
|
311
|
+
if((index = getnewindex()) == -1) myerror(DP_EMISC);
|
312
|
+
name = StringValuePtr(vname);
|
313
|
+
FIXNUM_P(vomode);
|
314
|
+
omode = FIX2INT(vomode);
|
315
|
+
FIXNUM_P(vcmode);
|
316
|
+
cmode = FIX2INT(vcmode);
|
317
|
+
cmp = NULL;
|
318
|
+
switch(cmode){
|
319
|
+
case 0: cmp = VL_CMPLEX; break;
|
320
|
+
case 1: cmp = VL_CMPDEC; break;
|
321
|
+
case 2: cmp = objcompare; break;
|
322
|
+
default: myerror(DP_EMISC);
|
323
|
+
}
|
324
|
+
if(checkdup(name) == -1) myerror(DP_EMISC);
|
325
|
+
villa = vlopen(name, omode, cmp);
|
326
|
+
if(!villa) myerror(dpecode);
|
327
|
+
vltable[index] = villa;
|
328
|
+
vlsltable[index] = 0;
|
329
|
+
return INT2FIX(index);
|
330
|
+
}
|
331
|
+
|
332
|
+
|
333
|
+
static VALUE rbvlclose(VALUE vself, VALUE vindex){
|
334
|
+
VILLA *villa;
|
335
|
+
int index;
|
336
|
+
FIXNUM_P(vindex);
|
337
|
+
if((index = FIX2INT(vindex)) == -1) myerror(DP_EMISC);
|
338
|
+
villa = vltable[index];
|
339
|
+
vltable[index] = NULL;
|
340
|
+
if(!vlclose(villa)) myerror(dpecode);
|
341
|
+
return Qtrue;
|
342
|
+
}
|
343
|
+
|
344
|
+
|
345
|
+
static VALUE rbvlsetsilent(VALUE vself, VALUE vindex, VALUE vvalue){
|
346
|
+
int index;
|
347
|
+
FIXNUM_P(vindex);
|
348
|
+
if((index = FIX2INT(vindex)) == -1) myerror(DP_EMISC);
|
349
|
+
vlsltable[index] = FIX2INT(vvalue);
|
350
|
+
return Qnil;
|
351
|
+
}
|
352
|
+
|
353
|
+
|
354
|
+
static VALUE rbvlput(VALUE vself, VALUE vindex, VALUE vkey, VALUE vval, VALUE vdmode){
|
355
|
+
VILLA *villa;
|
356
|
+
const char *kbuf, *vbuf;
|
357
|
+
int index, ksiz, vsiz, dmode;
|
358
|
+
FIXNUM_P(vindex);
|
359
|
+
if((index = FIX2INT(vindex)) == -1) myerror(DP_EMISC);
|
360
|
+
kbuf = StringValuePtr(vkey);
|
361
|
+
ksiz = RSTRING_LEN(vkey);
|
362
|
+
vbuf = StringValuePtr(vval);
|
363
|
+
vsiz = RSTRING_LEN(vval);
|
364
|
+
FIXNUM_P(vdmode);
|
365
|
+
dmode = FIX2INT(vdmode);
|
366
|
+
villa = vltable[index];
|
367
|
+
if(!vlput(villa, kbuf, ksiz, vbuf, vsiz, dmode)){
|
368
|
+
if(vlsltable[index] && dpecode == DP_EKEEP) return Qfalse;
|
369
|
+
myerror(dpecode);
|
370
|
+
}
|
371
|
+
return Qtrue;
|
372
|
+
}
|
373
|
+
|
374
|
+
|
375
|
+
static VALUE rbvlout(VALUE vself, VALUE vindex, VALUE vkey){
|
376
|
+
VILLA *villa;
|
377
|
+
const char *kbuf;
|
378
|
+
int index, ksiz;
|
379
|
+
FIXNUM_P(vindex);
|
380
|
+
if((index = FIX2INT(vindex)) == -1) myerror(DP_EMISC);
|
381
|
+
kbuf = StringValuePtr(vkey);
|
382
|
+
ksiz = RSTRING_LEN(vkey);
|
383
|
+
villa = vltable[index];
|
384
|
+
if(!vlout(villa, kbuf, ksiz)){
|
385
|
+
if(vlsltable[index] && dpecode == DP_ENOITEM) return Qfalse;
|
386
|
+
myerror(dpecode);
|
387
|
+
}
|
388
|
+
return Qtrue;
|
389
|
+
}
|
390
|
+
|
391
|
+
|
392
|
+
static VALUE rbvlget(VALUE vself, VALUE vindex, VALUE vkey){
|
393
|
+
VILLA *villa;
|
394
|
+
const char *kbuf, *vbuf;
|
395
|
+
int index, ksiz, vsiz;
|
396
|
+
VALUE vval;
|
397
|
+
FIXNUM_P(vindex);
|
398
|
+
if((index = FIX2INT(vindex)) == -1) myerror(DP_EMISC);
|
399
|
+
kbuf = StringValuePtr(vkey);
|
400
|
+
ksiz = RSTRING_LEN(vkey);
|
401
|
+
villa = vltable[index];
|
402
|
+
if(!(vbuf = vlget(villa, kbuf, ksiz, &vsiz))){
|
403
|
+
if(vlsltable[index] && dpecode == DP_ENOITEM) return Qnil;
|
404
|
+
myerror(dpecode);
|
405
|
+
}
|
406
|
+
vval = rb_str_new(vbuf, vsiz);
|
407
|
+
return vval;
|
408
|
+
}
|
409
|
+
|
410
|
+
|
411
|
+
static VALUE rbvlvsiz(VALUE vself, VALUE vindex, VALUE vkey){
|
412
|
+
VILLA *villa;
|
413
|
+
const char *kbuf;
|
414
|
+
int index, ksiz, vsiz;
|
415
|
+
FIXNUM_P(vindex);
|
416
|
+
if((index = FIX2INT(vindex)) == -1) myerror(DP_EMISC);
|
417
|
+
kbuf = StringValuePtr(vkey);
|
418
|
+
ksiz = RSTRING_LEN(vkey);
|
419
|
+
villa = vltable[index];
|
420
|
+
if((vsiz = vlvsiz(villa, kbuf, ksiz)) == -1){
|
421
|
+
if(vlsltable[index] && dpecode == DP_ENOITEM) return INT2FIX(-1);
|
422
|
+
myerror(dpecode);
|
423
|
+
}
|
424
|
+
return INT2FIX(vsiz);
|
425
|
+
}
|
426
|
+
|
427
|
+
|
428
|
+
static VALUE rbvlvnum(VALUE vself, VALUE vindex, VALUE vkey){
|
429
|
+
VILLA *villa;
|
430
|
+
const char *kbuf;
|
431
|
+
int index, ksiz, vnum;
|
432
|
+
FIXNUM_P(vindex);
|
433
|
+
if((index = FIX2INT(vindex)) == -1) myerror(DP_EMISC);
|
434
|
+
kbuf = StringValuePtr(vkey);
|
435
|
+
ksiz = RSTRING_LEN(vkey);
|
436
|
+
villa = vltable[index];
|
437
|
+
vnum = vlvnum(villa, kbuf, ksiz);
|
438
|
+
return INT2FIX(vnum);
|
439
|
+
}
|
440
|
+
|
441
|
+
|
442
|
+
static VALUE rbvlcurfirst(VALUE vself, VALUE vindex){
|
443
|
+
VILLA *villa;
|
444
|
+
int index;
|
445
|
+
FIXNUM_P(vindex);
|
446
|
+
if((index = FIX2INT(vindex)) == -1) myerror(DP_EMISC);
|
447
|
+
villa = vltable[index];
|
448
|
+
if(!vlcurfirst(villa)){
|
449
|
+
if(vlsltable[index] && dpecode == DP_ENOITEM) return Qfalse;
|
450
|
+
myerror(dpecode);
|
451
|
+
}
|
452
|
+
return Qtrue;
|
453
|
+
}
|
454
|
+
|
455
|
+
|
456
|
+
static VALUE rbvlcurlast(VALUE vself, VALUE vindex){
|
457
|
+
VILLA *villa;
|
458
|
+
int index;
|
459
|
+
FIXNUM_P(vindex);
|
460
|
+
if((index = FIX2INT(vindex)) == -1) myerror(DP_EMISC);
|
461
|
+
villa = vltable[index];
|
462
|
+
if(!vlcurlast(villa)){
|
463
|
+
if(vlsltable[index] && dpecode == DP_ENOITEM) return Qfalse;
|
464
|
+
myerror(dpecode);
|
465
|
+
}
|
466
|
+
return Qtrue;
|
467
|
+
}
|
468
|
+
|
469
|
+
|
470
|
+
static VALUE rbvlcurprev(VALUE vself, VALUE vindex){
|
471
|
+
VILLA *villa;
|
472
|
+
int index;
|
473
|
+
FIXNUM_P(vindex);
|
474
|
+
if((index = FIX2INT(vindex)) == -1) myerror(DP_EMISC);
|
475
|
+
villa = vltable[index];
|
476
|
+
if(!vlcurprev(villa)){
|
477
|
+
if(vlsltable[index] && dpecode == DP_ENOITEM) return Qfalse;
|
478
|
+
myerror(dpecode);
|
479
|
+
}
|
480
|
+
return Qtrue;
|
481
|
+
}
|
482
|
+
|
483
|
+
|
484
|
+
static VALUE rbvlcurnext(VALUE vself, VALUE vindex){
|
485
|
+
VILLA *villa;
|
486
|
+
int index;
|
487
|
+
FIXNUM_P(vindex);
|
488
|
+
if((index = FIX2INT(vindex)) == -1) myerror(DP_EMISC);
|
489
|
+
villa = vltable[index];
|
490
|
+
if(!vlcurnext(villa)){
|
491
|
+
if(vlsltable[index] && dpecode == DP_ENOITEM) return Qfalse;
|
492
|
+
myerror(dpecode);
|
493
|
+
}
|
494
|
+
return Qtrue;
|
495
|
+
}
|
496
|
+
|
497
|
+
|
498
|
+
static VALUE rbvlcurjump(VALUE vself, VALUE vindex, VALUE vkey, VALUE vjmode){
|
499
|
+
VILLA *villa;
|
500
|
+
const char *kbuf;
|
501
|
+
int index, ksiz, jmode;
|
502
|
+
VALUE vval;
|
503
|
+
FIXNUM_P(vindex);
|
504
|
+
if((index = FIX2INT(vindex)) == -1) myerror(DP_EMISC);
|
505
|
+
kbuf = StringValuePtr(vkey);
|
506
|
+
ksiz = RSTRING_LEN(vkey);
|
507
|
+
FIXNUM_P(vjmode);
|
508
|
+
jmode = FIX2INT(vjmode);
|
509
|
+
villa = vltable[index];
|
510
|
+
if(!vlcurjump(villa, kbuf, ksiz, jmode)){
|
511
|
+
if(vlsltable[index] && dpecode == DP_ENOITEM) return Qfalse;
|
512
|
+
myerror(dpecode);
|
513
|
+
}
|
514
|
+
return Qtrue;
|
515
|
+
}
|
516
|
+
|
517
|
+
|
518
|
+
|
519
|
+
static VALUE rbvlcurkey(VALUE vself, VALUE vindex){
|
520
|
+
VILLA *villa;
|
521
|
+
const char *kbuf;
|
522
|
+
int index, ksiz;
|
523
|
+
VALUE vkey;
|
524
|
+
FIXNUM_P(vindex);
|
525
|
+
if((index = FIX2INT(vindex)) == -1) myerror(DP_EMISC);
|
526
|
+
villa = vltable[index];
|
527
|
+
if(!(kbuf = vlcurkeycache(villa, &ksiz))){
|
528
|
+
if(vlsltable[index] && dpecode == DP_ENOITEM) return Qnil;
|
529
|
+
myerror(dpecode);
|
530
|
+
}
|
531
|
+
vkey = rb_str_new(kbuf, ksiz);
|
532
|
+
return vkey;
|
533
|
+
}
|
534
|
+
|
535
|
+
|
536
|
+
static VALUE rbvlcurval(VALUE vself, VALUE vindex){
|
537
|
+
VILLA *villa;
|
538
|
+
const char *vbuf;
|
539
|
+
int index, vsiz;
|
540
|
+
VALUE vval;
|
541
|
+
FIXNUM_P(vindex);
|
542
|
+
if((index = FIX2INT(vindex)) == -1) myerror(DP_EMISC);
|
543
|
+
villa = vltable[index];
|
544
|
+
if(!(vbuf = vlcurvalcache(villa, &vsiz))){
|
545
|
+
if(vlsltable[index] && dpecode == DP_ENOITEM) return Qnil;
|
546
|
+
myerror(dpecode);
|
547
|
+
}
|
548
|
+
vval = rb_str_new(vbuf, vsiz);
|
549
|
+
return vval;
|
550
|
+
}
|
551
|
+
|
552
|
+
|
553
|
+
static VALUE rbvlcurput(VALUE vself, VALUE vindex, VALUE vval, VALUE vcpmode){
|
554
|
+
VILLA *villa;
|
555
|
+
const char *vbuf;
|
556
|
+
int index, vsiz, cpmode;
|
557
|
+
FIXNUM_P(vindex);
|
558
|
+
if((index = FIX2INT(vindex)) == -1) myerror(DP_EMISC);
|
559
|
+
vbuf = StringValuePtr(vval);
|
560
|
+
vsiz = RSTRING_LEN(vval);
|
561
|
+
FIXNUM_P(vcpmode);
|
562
|
+
cpmode = FIX2INT(vcpmode);
|
563
|
+
villa = vltable[index];
|
564
|
+
if(!vlcurput(villa, vbuf, vsiz, cpmode)){
|
565
|
+
if(vlsltable[index] && dpecode == DP_ENOITEM) return Qfalse;
|
566
|
+
myerror(dpecode);
|
567
|
+
}
|
568
|
+
return Qtrue;
|
569
|
+
}
|
570
|
+
|
571
|
+
|
572
|
+
static VALUE rbvlcurout(VALUE vself, VALUE vindex){
|
573
|
+
VILLA *villa;
|
574
|
+
int index;
|
575
|
+
FIXNUM_P(vindex);
|
576
|
+
if((index = FIX2INT(vindex)) == -1) myerror(DP_EMISC);
|
577
|
+
villa = vltable[index];
|
578
|
+
if(!vlcurout(villa)){
|
579
|
+
if(vlsltable[index] && dpecode == DP_ENOITEM) return Qfalse;
|
580
|
+
myerror(dpecode);
|
581
|
+
}
|
582
|
+
return Qtrue;
|
583
|
+
}
|
584
|
+
|
585
|
+
|
586
|
+
static VALUE rbvlsettuning(VALUE vself, VALUE vindex,
|
587
|
+
VALUE vlrecmax, VALUE vnidxmax, VALUE vlcnum, VALUE vncnum){
|
588
|
+
VILLA *villa;
|
589
|
+
int index, lrecmax, nidxmax, lcnum, ncnum;
|
590
|
+
FIXNUM_P(vindex);
|
591
|
+
if((index = FIX2INT(vindex)) == -1) myerror(DP_EMISC);
|
592
|
+
FIXNUM_P(vlrecmax);
|
593
|
+
lrecmax = FIX2INT(vlrecmax);
|
594
|
+
FIXNUM_P(vnidxmax);
|
595
|
+
nidxmax = FIX2INT(vnidxmax);
|
596
|
+
FIXNUM_P(vlcnum);
|
597
|
+
lcnum = FIX2INT(vlcnum);
|
598
|
+
FIXNUM_P(vncnum);
|
599
|
+
ncnum = FIX2INT(vncnum);
|
600
|
+
villa = vltable[index];
|
601
|
+
vlsettuning(villa, lrecmax, nidxmax, lcnum, ncnum);
|
602
|
+
return Qtrue;
|
603
|
+
}
|
604
|
+
|
605
|
+
|
606
|
+
static VALUE rbvlsync(VALUE vself, VALUE vindex){
|
607
|
+
VILLA *villa;
|
608
|
+
int index;
|
609
|
+
FIXNUM_P(vindex);
|
610
|
+
if((index = FIX2INT(vindex)) == -1) myerror(DP_EMISC);
|
611
|
+
villa = vltable[index];
|
612
|
+
if(!vlsync(villa)) myerror(dpecode);
|
613
|
+
return Qtrue;
|
614
|
+
}
|
615
|
+
|
616
|
+
|
617
|
+
static VALUE rbvloptimize(VALUE vself, VALUE vindex){
|
618
|
+
VILLA *villa;
|
619
|
+
int index;
|
620
|
+
FIXNUM_P(vindex);
|
621
|
+
if((index = FIX2INT(vindex)) == -1) myerror(DP_EMISC);
|
622
|
+
villa = vltable[index];
|
623
|
+
if(!vloptimize(villa)) myerror(dpecode);
|
624
|
+
return Qtrue;
|
625
|
+
}
|
626
|
+
|
627
|
+
|
628
|
+
static VALUE rbvlfsiz(VALUE vself, VALUE vindex){
|
629
|
+
VILLA *villa;
|
630
|
+
int index, fsiz;
|
631
|
+
FIXNUM_P(vindex);
|
632
|
+
if((index = FIX2INT(vindex)) == -1) myerror(DP_EMISC);
|
633
|
+
villa = vltable[index];
|
634
|
+
if((fsiz = vlfsiz(villa)) == -1) myerror(dpecode);
|
635
|
+
return INT2FIX(fsiz);
|
636
|
+
}
|
637
|
+
|
638
|
+
|
639
|
+
static VALUE rbvlrnum(VALUE vself, VALUE vindex){
|
640
|
+
VILLA *villa;
|
641
|
+
int index, rnum;
|
642
|
+
FIXNUM_P(vindex);
|
643
|
+
if((index = FIX2INT(vindex)) == -1) myerror(DP_EMISC);
|
644
|
+
villa = vltable[index];
|
645
|
+
if((rnum = vlrnum(villa)) == -1) myerror(dpecode);
|
646
|
+
return INT2FIX(rnum);
|
647
|
+
}
|
648
|
+
|
649
|
+
|
650
|
+
static VALUE rbvlwritable(VALUE vself, VALUE vindex){
|
651
|
+
VILLA *villa;
|
652
|
+
int index;
|
653
|
+
FIXNUM_P(vindex);
|
654
|
+
if((index = FIX2INT(vindex)) == -1) myerror(DP_EMISC);
|
655
|
+
villa = vltable[index];
|
656
|
+
return vlwritable(villa) ? Qtrue : Qfalse;
|
657
|
+
}
|
658
|
+
|
659
|
+
|
660
|
+
static VALUE rbvlfatalerror(VALUE vself, VALUE vindex){
|
661
|
+
VILLA *villa;
|
662
|
+
int index;
|
663
|
+
FIXNUM_P(vindex);
|
664
|
+
if((index = FIX2INT(vindex)) == -1) myerror(DP_EMISC);
|
665
|
+
villa = vltable[index];
|
666
|
+
return vlfatalerror(villa) ? Qtrue : Qfalse;
|
667
|
+
}
|
668
|
+
|
669
|
+
|
670
|
+
static VALUE rbvltranbegin(VALUE vself, VALUE vindex){
|
671
|
+
VILLA *villa;
|
672
|
+
int index;
|
673
|
+
FIXNUM_P(vindex);
|
674
|
+
if((index = FIX2INT(vindex)) == -1) myerror(DP_EMISC);
|
675
|
+
villa = vltable[index];
|
676
|
+
if(!vltranbegin(villa)) myerror(dpecode);
|
677
|
+
return Qtrue;
|
678
|
+
}
|
679
|
+
|
680
|
+
|
681
|
+
static VALUE rbvltrancommit(VALUE vself, VALUE vindex){
|
682
|
+
VILLA *villa;
|
683
|
+
int index;
|
684
|
+
FIXNUM_P(vindex);
|
685
|
+
if((index = FIX2INT(vindex)) == -1) myerror(DP_EMISC);
|
686
|
+
villa = vltable[index];
|
687
|
+
if(!vltrancommit(villa)) myerror(dpecode);
|
688
|
+
return Qtrue;
|
689
|
+
}
|
690
|
+
|
691
|
+
|
692
|
+
static VALUE rbvltranabort(VALUE vself, VALUE vindex){
|
693
|
+
VILLA *villa;
|
694
|
+
int index;
|
695
|
+
FIXNUM_P(vindex);
|
696
|
+
if((index = FIX2INT(vindex)) == -1) myerror(DP_EMISC);
|
697
|
+
villa = vltable[index];
|
698
|
+
if(!vltranabort(villa)) myerror(dpecode);
|
699
|
+
return Qtrue;
|
700
|
+
}
|
701
|
+
|
702
|
+
|
703
|
+
|
704
|
+
/* END OF FILE */
|