oklahoma_mixer 0.1.0 → 0.2.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/CHANGELOG.rdoc +10 -0
- data/TODO.rdoc +3 -3
- data/lib/oklahoma_mixer.rb +14 -5
- data/lib/oklahoma_mixer/b_tree_database.rb +185 -0
- data/lib/oklahoma_mixer/b_tree_database/c.rb +45 -0
- data/lib/oklahoma_mixer/cursor.rb +43 -0
- data/lib/oklahoma_mixer/cursor/c.rb +45 -0
- data/lib/oklahoma_mixer/fixed_length_database.rb +95 -0
- data/lib/oklahoma_mixer/fixed_length_database/c.rb +62 -0
- data/lib/oklahoma_mixer/hash_database.rb +84 -54
- data/lib/oklahoma_mixer/hash_database/c.rb +3 -96
- data/lib/oklahoma_mixer/utilities.rb +110 -5
- data/test/b_tree_binary_data_test.rb +45 -0
- data/test/b_tree_tuning_test.rb +132 -0
- data/test/binary_data_test.rb +3 -13
- data/test/cursor_based_iteration_test.rb +151 -0
- data/test/duplicate_storage_test.rb +107 -0
- data/test/fixed_length_tuning_test.rb +77 -0
- data/test/getting_and_setting_by_id_test.rb +288 -0
- data/test/getting_and_setting_keys_test.rb +37 -3
- data/test/iteration_test.rb +2 -76
- data/test/key_range_test.rb +161 -0
- data/test/order_test.rb +122 -0
- data/test/shared_binary_data.rb +14 -0
- data/test/shared_iteration.rb +99 -0
- data/test/shared_tuning.rb +91 -0
- data/test/test_helper.rb +10 -11
- data/test/top_level_interface_test.rb +12 -0
- data/test/tuning_test.rb +11 -87
- metadata +27 -2
@@ -0,0 +1,62 @@
|
|
1
|
+
module OklahomaMixer
|
2
|
+
class FixedLengthDatabase < HashDatabase
|
3
|
+
module C # :nodoc:
|
4
|
+
extend OklahomaMixer::Utilities::FFIDSL
|
5
|
+
|
6
|
+
IDS = enum :FDBIDMIN, -1,
|
7
|
+
:FDBIDPREV, -2,
|
8
|
+
:FDBIDMAX, -3,
|
9
|
+
:FDBIDNEXT, -4
|
10
|
+
|
11
|
+
prefix :tcfdb
|
12
|
+
|
13
|
+
def_core_database_consts_and_funcs
|
14
|
+
|
15
|
+
func :name => :tune,
|
16
|
+
:args => [:pointer, :int32, :int64],
|
17
|
+
:returns => :bool
|
18
|
+
func :name => :optimize,
|
19
|
+
:args => [:pointer, :int32, :int64],
|
20
|
+
:returns => :bool
|
21
|
+
|
22
|
+
func :name => :put,
|
23
|
+
:args => [:pointer, :int64, :pointer, :int],
|
24
|
+
:returns => :bool
|
25
|
+
func :name => :putkeep,
|
26
|
+
:args => [:pointer, :int64, :pointer, :int],
|
27
|
+
:returns => :bool
|
28
|
+
func :name => :putcat,
|
29
|
+
:args => [:pointer, :int64, :pointer, :int],
|
30
|
+
:returns => :bool
|
31
|
+
call :name => :TCPDPROC,
|
32
|
+
:args => [:pointer, :int, :pointer, :pointer],
|
33
|
+
:returns => :pointer
|
34
|
+
func :name => :putproc,
|
35
|
+
:args => [:pointer, :int64, :pointer, :int, :TCPDPROC, :pointer],
|
36
|
+
:returns => :bool
|
37
|
+
func :name => :addint,
|
38
|
+
:args => [:pointer, :int64, :int],
|
39
|
+
:returns => :int
|
40
|
+
func :name => :adddouble,
|
41
|
+
:args => [:pointer, :int64, :double],
|
42
|
+
:returns => :double
|
43
|
+
func :name => :out,
|
44
|
+
:args => [:pointer, :int64],
|
45
|
+
:returns => :bool
|
46
|
+
func :name => :get,
|
47
|
+
:args => [:pointer, :int64, :pointer],
|
48
|
+
:returns => :pointer
|
49
|
+
|
50
|
+
func :name => :iterinit,
|
51
|
+
:args => :pointer,
|
52
|
+
:returns => :bool
|
53
|
+
func :name => :iternext,
|
54
|
+
:args => :pointer,
|
55
|
+
:returns => :uint64
|
56
|
+
|
57
|
+
func :name => :range,
|
58
|
+
:args => [:pointer, :int64, :int64, :int, :pointer],
|
59
|
+
:returns => :pointer
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
@@ -4,17 +4,17 @@ module OklahomaMixer
|
|
4
4
|
### Constants ###
|
5
5
|
#################
|
6
6
|
|
7
|
-
MODES = { "r" => :
|
8
|
-
"w" => :
|
9
|
-
"c" => :
|
10
|
-
"t" => :
|
11
|
-
"e" => :
|
12
|
-
"f" => :
|
13
|
-
"s" => :
|
14
|
-
OPTS = { "l" => :
|
15
|
-
"d" => :
|
16
|
-
"b" => :
|
17
|
-
"t" => :
|
7
|
+
MODES = { "r" => :OREADER,
|
8
|
+
"w" => :OWRITER,
|
9
|
+
"c" => :OCREAT,
|
10
|
+
"t" => :OTRUNC,
|
11
|
+
"e" => :ONOLCK,
|
12
|
+
"f" => :OLCKNB,
|
13
|
+
"s" => :OTSYNC }
|
14
|
+
OPTS = { "l" => :TLARGE,
|
15
|
+
"d" => :TDEFLATE,
|
16
|
+
"b" => :TBZIP,
|
17
|
+
"t" => :TTCBS }
|
18
18
|
|
19
19
|
###################
|
20
20
|
### File System ###
|
@@ -24,24 +24,20 @@ module OklahomaMixer
|
|
24
24
|
options = args.last.is_a?(Hash) ? args.last : { }
|
25
25
|
mode = !args.first.is_a?(Hash) ? args.first : nil
|
26
26
|
@path = path
|
27
|
-
@db =
|
27
|
+
@db = lib.new
|
28
28
|
self.default = options[:default]
|
29
29
|
@in_transaction = false
|
30
30
|
@abort = false
|
31
31
|
@nested_transactions = options[:nested_transactions]
|
32
32
|
|
33
33
|
try(:setmutex) if options[:mutex]
|
34
|
-
|
35
|
-
optimize(options.merge(:tune => true))
|
36
|
-
end
|
37
|
-
{:rcnum => :cache, :xmsiz => nil, :dfunit => nil}.each do |option, func|
|
38
|
-
if i = options[option]
|
39
|
-
try("set#{func || option}", i.to_i)
|
40
|
-
end
|
41
|
-
end
|
34
|
+
tune(options)
|
42
35
|
|
43
36
|
warn "mode option supersedes mode argument" if mode and options[:mode]
|
44
37
|
try(:open, path, to_enum_int(options.fetch(:mode, mode || "wc"), :mode))
|
38
|
+
rescue Exception
|
39
|
+
close if defined?(@db) and @db
|
40
|
+
raise
|
45
41
|
end
|
46
42
|
|
47
43
|
def optimize(options)
|
@@ -55,7 +51,7 @@ module OklahomaMixer
|
|
55
51
|
attr_reader :path
|
56
52
|
|
57
53
|
def file_size
|
58
|
-
|
54
|
+
lib.fsiz(@db)
|
59
55
|
end
|
60
56
|
|
61
57
|
def flush
|
@@ -94,35 +90,37 @@ module OklahomaMixer
|
|
94
90
|
end
|
95
91
|
|
96
92
|
def store(key, value, mode = nil)
|
97
|
-
k
|
93
|
+
k = cast_key_in(key)
|
94
|
+
v = cast_value_in(value) unless mode == :add and not block_given?
|
98
95
|
result = value
|
99
96
|
if block_given?
|
100
97
|
warn "block supersedes mode argument" unless mode.nil?
|
101
98
|
callback = lambda { |old_value_pointer, old_size, returned_size, _|
|
102
|
-
old_value
|
103
|
-
replacement = yield(key, old_value, value)
|
104
|
-
returned_size.put_int(0,
|
105
|
-
|
99
|
+
old_value = old_value_pointer.get_bytes(0, old_size)
|
100
|
+
replacement, size = cast_value_in(yield(key, old_value, value))
|
101
|
+
returned_size.put_int(0, size)
|
102
|
+
pointer = Utilities.malloc(size)
|
103
|
+
pointer.put_bytes(0, replacement) unless pointer.address.zero?
|
104
|
+
pointer
|
106
105
|
}
|
107
|
-
try(:putproc, k,
|
106
|
+
try(:putproc, k, v, callback, nil)
|
108
107
|
else
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
try(:
|
115
|
-
|
116
|
-
try(:putasync, k, k.size, v, v.size)
|
117
|
-
when :add
|
108
|
+
if mode == :keep
|
109
|
+
result = try(:putkeep, k, v, :no_error => {21 => false})
|
110
|
+
elsif mode == :cat
|
111
|
+
try(:putcat, k, v)
|
112
|
+
elsif mode == :async and self.class == HashDatabase
|
113
|
+
try(:putasync, k, v)
|
114
|
+
elsif mode == :add
|
118
115
|
result = case value
|
119
|
-
when Float then try( :adddouble, k,
|
116
|
+
when Float then try( :adddouble, k, value,
|
120
117
|
:failure => lambda { |n| n.nan? } )
|
121
|
-
else try( :addint, k,
|
118
|
+
else try( :addint, k, value.to_i,
|
122
119
|
:failure => Utilities::INT_MIN )
|
123
120
|
end
|
124
121
|
else
|
125
|
-
|
122
|
+
warn "unsupported mode for database type" if mode
|
123
|
+
try(:put, k, v)
|
126
124
|
end
|
127
125
|
end
|
128
126
|
result
|
@@ -130,8 +128,7 @@ module OklahomaMixer
|
|
130
128
|
alias_method :[]=, :store
|
131
129
|
|
132
130
|
def fetch(key, *default)
|
133
|
-
|
134
|
-
if value = try( :read_from_func, :get, k, k.size,
|
131
|
+
if value = try( :read_from_func, :get, cast_key_in(key),
|
135
132
|
:failure => nil, :no_error => {22 => nil} )
|
136
133
|
value
|
137
134
|
else
|
@@ -166,7 +163,7 @@ module OklahomaMixer
|
|
166
163
|
def keys(options = { })
|
167
164
|
prefix = options.fetch(:prefix, "").to_s
|
168
165
|
limit = options.fetch(:limit, -1)
|
169
|
-
list = ArrayList.new(
|
166
|
+
list = ArrayList.new(lib.fwmkeys(@db, prefix, prefix.size, limit))
|
170
167
|
list.to_a
|
171
168
|
ensure
|
172
169
|
list.free if list
|
@@ -182,8 +179,7 @@ module OklahomaMixer
|
|
182
179
|
|
183
180
|
def delete(key, &missing_handler)
|
184
181
|
value = fetch(key, &missing_handler)
|
185
|
-
|
186
|
-
try(:out, k, k.size, :no_error => {22 => nil})
|
182
|
+
try(:out, cast_key_in(key), :no_error => {22 => nil})
|
187
183
|
value
|
188
184
|
rescue IndexError
|
189
185
|
nil
|
@@ -205,7 +201,7 @@ module OklahomaMixer
|
|
205
201
|
alias_method :member?, :include?
|
206
202
|
|
207
203
|
def size
|
208
|
-
|
204
|
+
lib.rnum(@db)
|
209
205
|
end
|
210
206
|
alias_method :length, :size
|
211
207
|
|
@@ -251,6 +247,15 @@ module OklahomaMixer
|
|
251
247
|
end
|
252
248
|
end
|
253
249
|
|
250
|
+
def to_hash(set_default = true)
|
251
|
+
default = @default && lambda { |hash, key| @default[key] } if set_default
|
252
|
+
hash = Hash.new(&default)
|
253
|
+
each do |key, value|
|
254
|
+
hash[key] ||= value
|
255
|
+
end
|
256
|
+
hash
|
257
|
+
end
|
258
|
+
|
254
259
|
####################
|
255
260
|
### Transactions ###
|
256
261
|
####################
|
@@ -296,21 +301,26 @@ module OklahomaMixer
|
|
296
301
|
#######
|
297
302
|
private
|
298
303
|
#######
|
304
|
+
|
305
|
+
def lib
|
306
|
+
@c ||= self.class.const_get(:C)
|
307
|
+
end
|
299
308
|
|
300
309
|
def try(func, *args)
|
301
310
|
options = args.last.is_a?(Hash) ? args.pop : { }
|
302
311
|
failure = options.fetch(:failure, false)
|
303
312
|
no_error = options.fetch(:no_error, { })
|
304
|
-
result = func == :read_from_func
|
305
|
-
|
306
|
-
|
307
|
-
if
|
308
|
-
error_code =
|
313
|
+
result = func == :read_from_func ?
|
314
|
+
lib.read_from_func(args[0], @db, *args[1..-1].flatten) :
|
315
|
+
lib.send(func, @db, *args.flatten)
|
316
|
+
if failure.is_a?(Proc) ? failure[result] : result == failure
|
317
|
+
error_code = lib.ecode(@db)
|
309
318
|
if no_error.include? error_code
|
310
319
|
no_error[error_code]
|
311
320
|
else
|
312
|
-
error_message =
|
313
|
-
fail Error::CabinetError,
|
321
|
+
error_message = lib.errmsg(error_code)
|
322
|
+
fail Error::CabinetError,
|
323
|
+
"#{error_message} (error code #{error_code})"
|
314
324
|
end
|
315
325
|
else
|
316
326
|
result
|
@@ -321,15 +331,35 @@ module OklahomaMixer
|
|
321
331
|
return str_or_int if str_or_int.is_a? Integer
|
322
332
|
const = "#{name.to_s.upcase}S"
|
323
333
|
names = self.class.const_get(const)
|
324
|
-
enum =
|
334
|
+
enum = lib.const_get(const)
|
325
335
|
str_or_int.to_s.downcase.scan(/./m).inject(0) do |int, c|
|
326
336
|
if n = names[c]
|
327
|
-
int | enum[n]
|
337
|
+
int | enum["#{self.class.to_s[/([HBFT])\w+\z/, 1]}DB#{n}".to_sym]
|
328
338
|
else
|
329
339
|
warn "skipping unrecognized #{name}"
|
330
340
|
int
|
331
341
|
end
|
332
342
|
end
|
333
343
|
end
|
344
|
+
|
345
|
+
def tune(options)
|
346
|
+
if self.class == HashDatabase and
|
347
|
+
options.values_at(:bnum, :apow, :fpow, :opts).any?
|
348
|
+
optimize(options.merge(:tune => true))
|
349
|
+
end
|
350
|
+
{:rcnum => :cache, :xmsiz => nil, :dfunit => nil}.each do |option, func|
|
351
|
+
next if func == :cache and self.class != HashDatabase
|
352
|
+
if i = options[option]
|
353
|
+
try("set#{func || option}", i.to_i)
|
354
|
+
end
|
355
|
+
end
|
356
|
+
end
|
357
|
+
|
358
|
+
def cast_to_bytes_and_length(object)
|
359
|
+
bytes = object.to_s
|
360
|
+
[bytes, bytes.length]
|
361
|
+
end
|
362
|
+
alias_method :cast_key_in, :cast_to_bytes_and_length
|
363
|
+
alias_method :cast_value_in, :cast_to_bytes_and_length
|
334
364
|
end
|
335
365
|
end
|
@@ -3,109 +3,26 @@ module OklahomaMixer
|
|
3
3
|
module C # :nodoc:
|
4
4
|
extend OklahomaMixer::Utilities::FFIDSL
|
5
5
|
|
6
|
-
MODES = enum :HDBOREADER, 1 << 0,
|
7
|
-
:HDBOWRITER, 1 << 1,
|
8
|
-
:HDBOCREAT, 1 << 2,
|
9
|
-
:HDBOTRUNC, 1 << 3,
|
10
|
-
:HDBONOLCK, 1 << 4,
|
11
|
-
:HDBOLCKNB, 1 << 5,
|
12
|
-
:HDBOTSYNC, 1 << 6
|
13
|
-
OPTS = enum :HDBTLARGE, 1 << 0,
|
14
|
-
:HDBTDEFLATE, 1 << 1,
|
15
|
-
:HDBTBZIP, 1 << 2,
|
16
|
-
:HDBTTCBS, 1 << 3
|
17
|
-
|
18
6
|
prefix :tchdb
|
19
7
|
|
20
|
-
|
21
|
-
func :name => :open,
|
22
|
-
:args => [:pointer, :string, MODES],
|
23
|
-
:returns => :bool
|
24
|
-
func :name => :sync,
|
25
|
-
:args => :pointer,
|
26
|
-
:returns => :bool
|
27
|
-
func :name => :fsiz,
|
28
|
-
:args => :pointer,
|
29
|
-
:returns => :uint64
|
30
|
-
func :name => :copy,
|
31
|
-
:args => [:pointer, :string],
|
32
|
-
:returns => :bool
|
33
|
-
func :name => :defrag,
|
34
|
-
:args => [:pointer, :int64],
|
35
|
-
:returns => :bool
|
8
|
+
def_hash_database_consts_and_funcs
|
36
9
|
|
37
|
-
func :name => :ecode,
|
38
|
-
:args => :pointer,
|
39
|
-
:returns => :int
|
40
|
-
func :name => :errmsg,
|
41
|
-
:args => :int,
|
42
|
-
:returns => :string
|
43
|
-
|
44
|
-
func :name => :setmutex,
|
45
|
-
:args => :pointer,
|
46
|
-
:returns => :bool
|
47
10
|
func :name => :tune,
|
48
11
|
:args => [:pointer, :int64, :int8, :int8, OPTS],
|
49
12
|
:returns => :bool
|
50
13
|
func :name => :setcache,
|
51
14
|
:args => [:pointer, :int32],
|
52
15
|
:returns => :bool
|
53
|
-
func :name => :setxmsiz,
|
54
|
-
:args => [:pointer, :int64],
|
55
|
-
:returns => :bool
|
56
|
-
func :name => :setdfunit,
|
57
|
-
:args => [:pointer, :int32],
|
58
|
-
:returns => :bool
|
59
16
|
func :name => :optimize,
|
60
17
|
:args => [:pointer, :int64, :int8, :int8, OPTS],
|
61
18
|
:returns => :bool
|
62
|
-
|
63
|
-
func :name => :put,
|
64
|
-
:args => [:pointer, :pointer, :int, :pointer, :int],
|
65
|
-
:returns => :bool
|
66
|
-
func :name => :putkeep,
|
67
|
-
:args => [:pointer, :pointer, :int, :pointer, :int],
|
68
|
-
:returns => :bool
|
69
|
-
func :name => :putcat,
|
70
|
-
:args => [:pointer, :pointer, :int, :pointer, :int],
|
71
|
-
:returns => :bool
|
19
|
+
|
72
20
|
func :name => :putasync,
|
73
21
|
:args => [:pointer, :pointer, :int, :pointer, :int],
|
74
22
|
:returns => :bool
|
75
|
-
call :name => :TCPDPROC,
|
76
|
-
:args => [:pointer, :int, :pointer, :pointer],
|
77
|
-
:returns => :pointer
|
78
|
-
func :name => :putproc,
|
79
|
-
:args => [:pointer, :pointer, :int, :pointer, :int, :TCPDPROC,
|
80
|
-
:pointer],
|
81
|
-
:returns => :bool
|
82
|
-
func :name => :addint,
|
83
|
-
:args => [:pointer, :pointer, :int, :int],
|
84
|
-
:returns => :int
|
85
|
-
func :name => :adddouble,
|
86
|
-
:args => [:pointer, :pointer, :int, :double],
|
87
|
-
:returns => :double
|
88
|
-
func :name => :out,
|
89
|
-
:args => [:pointer, :pointer, :int],
|
90
|
-
:returns => :bool
|
91
|
-
func :name => :get,
|
92
|
-
:args => [:pointer, :pointer, :int, :pointer],
|
93
|
-
:returns => :pointer
|
94
|
-
func :name => :vanish,
|
95
|
-
:args => :pointer,
|
96
|
-
:returns => :bool
|
97
|
-
func :name => :vanish,
|
98
|
-
:args => :pointer,
|
99
|
-
:returns => :bool
|
100
|
-
func :name => :fwmkeys,
|
101
|
-
:args => [:pointer, :pointer, :int, :int],
|
102
|
-
:returns => :pointer
|
103
|
-
func :name => :rnum,
|
104
|
-
:args => :pointer,
|
105
|
-
:returns => :uint64
|
106
23
|
|
107
24
|
func :name => :iterinit,
|
108
|
-
:args =>
|
25
|
+
:args => :pointer,
|
109
26
|
:returns => :bool
|
110
27
|
func :name => :iternext,
|
111
28
|
:args => [:pointer, :pointer],
|
@@ -113,16 +30,6 @@ module OklahomaMixer
|
|
113
30
|
func :name => :iternext3,
|
114
31
|
:args => [:pointer, :pointer, :pointer],
|
115
32
|
:returns => :bool
|
116
|
-
|
117
|
-
func :name => :tranbegin,
|
118
|
-
:args => :pointer,
|
119
|
-
:returns => :bool
|
120
|
-
func :name => :trancommit,
|
121
|
-
:args => :pointer,
|
122
|
-
:returns => :bool
|
123
|
-
func :name => :tranabort,
|
124
|
-
:args => :pointer,
|
125
|
-
:returns => :bool
|
126
33
|
end
|
127
34
|
end
|
128
35
|
end
|
@@ -22,6 +22,12 @@ module OklahomaMixer
|
|
22
22
|
defined?(@prefix) and @prefix
|
23
23
|
end
|
24
24
|
|
25
|
+
def const(name, values)
|
26
|
+
const_set( name, enum( *(0...values.size).map { |i|
|
27
|
+
["#{prefix.to_s[2..-1].upcase}#{values[i]}".to_sym, 1 << i]
|
28
|
+
}.flatten ) )
|
29
|
+
end
|
30
|
+
|
25
31
|
def func(details)
|
26
32
|
args = [ ]
|
27
33
|
args << details.fetch(:alias, details[:name])
|
@@ -57,12 +63,108 @@ module OklahomaMixer
|
|
57
63
|
func :name => :del,
|
58
64
|
:args => :pointer
|
59
65
|
end
|
66
|
+
|
67
|
+
def def_core_database_consts_and_funcs
|
68
|
+
const :MODES, %w[OREADER OWRITER OCREAT OTRUNC ONOLCK OLCKNB OTSYNC]
|
69
|
+
|
70
|
+
def_new_and_del_funcs
|
71
|
+
|
72
|
+
func :name => :open,
|
73
|
+
:args => [:pointer, :string, const_get(:MODES)],
|
74
|
+
:returns => :bool
|
75
|
+
func :name => :sync,
|
76
|
+
:args => :pointer,
|
77
|
+
:returns => :bool
|
78
|
+
func :name => :fsiz,
|
79
|
+
:args => :pointer,
|
80
|
+
:returns => :uint64
|
81
|
+
func :name => :copy,
|
82
|
+
:args => [:pointer, :string],
|
83
|
+
:returns => :bool
|
84
|
+
|
85
|
+
func :name => :ecode,
|
86
|
+
:args => :pointer,
|
87
|
+
:returns => :int
|
88
|
+
func :name => :errmsg,
|
89
|
+
:args => :int,
|
90
|
+
:returns => :string
|
91
|
+
|
92
|
+
func :name => :setmutex,
|
93
|
+
:args => :pointer,
|
94
|
+
:returns => :bool
|
95
|
+
|
96
|
+
func :name => :vanish,
|
97
|
+
:args => :pointer,
|
98
|
+
:returns => :bool
|
99
|
+
func :name => :rnum,
|
100
|
+
:args => :pointer,
|
101
|
+
:returns => :uint64
|
102
|
+
|
103
|
+
func :name => :tranbegin,
|
104
|
+
:args => :pointer,
|
105
|
+
:returns => :bool
|
106
|
+
func :name => :trancommit,
|
107
|
+
:args => :pointer,
|
108
|
+
:returns => :bool
|
109
|
+
func :name => :tranabort,
|
110
|
+
:args => :pointer,
|
111
|
+
:returns => :bool
|
112
|
+
end
|
113
|
+
|
114
|
+
def def_hash_database_consts_and_funcs
|
115
|
+
const :OPTS, %w[TLARGE TDEFLATE TBZIP TTCBS]
|
116
|
+
|
117
|
+
def_core_database_consts_and_funcs
|
118
|
+
|
119
|
+
func :name => :defrag,
|
120
|
+
:args => [:pointer, :int64],
|
121
|
+
:returns => :bool
|
122
|
+
|
123
|
+
func :name => :setxmsiz,
|
124
|
+
:args => [:pointer, :int64],
|
125
|
+
:returns => :bool
|
126
|
+
func :name => :setdfunit,
|
127
|
+
:args => [:pointer, :int32],
|
128
|
+
:returns => :bool
|
129
|
+
|
130
|
+
func :name => :put,
|
131
|
+
:args => [:pointer, :pointer, :int, :pointer, :int],
|
132
|
+
:returns => :bool
|
133
|
+
func :name => :putkeep,
|
134
|
+
:args => [:pointer, :pointer, :int, :pointer, :int],
|
135
|
+
:returns => :bool
|
136
|
+
func :name => :putcat,
|
137
|
+
:args => [:pointer, :pointer, :int, :pointer, :int],
|
138
|
+
:returns => :bool
|
139
|
+
call :name => :TCPDPROC,
|
140
|
+
:args => [:pointer, :int, :pointer, :pointer],
|
141
|
+
:returns => :pointer
|
142
|
+
func :name => :putproc,
|
143
|
+
:args => [:pointer, :pointer, :int, :pointer, :int, :TCPDPROC,
|
144
|
+
:pointer],
|
145
|
+
:returns => :bool
|
146
|
+
func :name => :addint,
|
147
|
+
:args => [:pointer, :pointer, :int, :int],
|
148
|
+
:returns => :int
|
149
|
+
func :name => :adddouble,
|
150
|
+
:args => [:pointer, :pointer, :int, :double],
|
151
|
+
:returns => :double
|
152
|
+
func :name => :out,
|
153
|
+
:args => [:pointer, :pointer, :int],
|
154
|
+
:returns => :bool
|
155
|
+
func :name => :get,
|
156
|
+
:args => [:pointer, :pointer, :int, :pointer],
|
157
|
+
:returns => :pointer
|
158
|
+
func :name => :fwmkeys,
|
159
|
+
:args => [:pointer, :pointer, :int, :int],
|
160
|
+
:returns => :pointer
|
161
|
+
end
|
60
162
|
end
|
61
163
|
|
62
|
-
int_min = `getconf INT_MIN 2>&1`[/-\d+/]
|
63
|
-
|
64
|
-
warn "set OKMixer::Utilities::INT_MIN before using counters"
|
164
|
+
unless int_min = `getconf INT_MIN 2>&1`[/-\d+/]
|
165
|
+
warn "set OKMixer::Utilities::INT_MIN before using the :add storage mode"
|
65
166
|
end
|
167
|
+
INT_MIN = int_min && int_min.to_i
|
66
168
|
|
67
169
|
def self.temp_int
|
68
170
|
int = FFI::MemoryPointer.new(:int)
|
@@ -82,7 +184,10 @@ module OklahomaMixer
|
|
82
184
|
|
83
185
|
prefix :tc
|
84
186
|
|
85
|
-
func :name
|
86
|
-
:args
|
187
|
+
func :name => :malloc,
|
188
|
+
:args => :size_t,
|
189
|
+
:returns => :pointer
|
190
|
+
func :name => :free,
|
191
|
+
:args => :pointer
|
87
192
|
end
|
88
193
|
end
|