blend2d-bindings 0.1.0-x64-mingw

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: b600d7991451bd210b9a7cc80e7aeff0e9c56d3f70e2fab0b5d9dddc22aa6c82
4
+ data.tar.gz: 103608472969e282a444f38970d54da47691d188ae69bf9d7009face02332417
5
+ SHA512:
6
+ metadata.gz: 491b8434e35cffeb85316dbbc34927d9960aede8f3427bf5f8980d64bb79fdf3187c0233d7d28007f8b9b9294dc925c7e4cc9d2c7ffd61aef9ee1b1fc5341817
7
+ data.tar.gz: cc7f1504c6e11f7df8bb22fab223482b5ef7843ea95b13ca3dedde61f571f7b8e51df7e39d98cafd6ac441556ed00935042a99c840d661330b1cdbc2e055d190
data/ChangeLog ADDED
@@ -0,0 +1,26 @@
1
+ 2024-12-31 vaiorabbit <http://twitter.com/vaiorabbit>
2
+
3
+ * Updated with latest Blend2D ( https://github.com/blend2d/blend2d/commit/16088c4ffb41813d9f0511fb2a6896f5608a4706 )
4
+ * Added AsmJit support
5
+ * examples/particles : Added
6
+
7
+ 2024-04-13 vaiorabbit <http://twitter.com/vaiorabbit>
8
+
9
+ * Updated with latest Blend2D ( https://github.com/blend2d/blend2d/commit/235997a8f829f54b56925c7332b8f0bc5b49bcf6 )
10
+
11
+ 2024-01-14 vaiorabbit <http://twitter.com/vaiorabbit>
12
+
13
+ * examples/ellipticarc : Added
14
+
15
+ 2024-01-13 vaiorabbit <http://twitter.com/vaiorabbit>
16
+
17
+ * Fixed using ambiguous types
18
+
19
+ 2024-01-08 vaiorabbit <http://twitter.com/vaiorabbit>
20
+
21
+ * Add build scripts
22
+ * examples/circles : Added
23
+
24
+ 2024-01-05 vaiorabbit <http://twitter.com/vaiorabbit>
25
+
26
+ * initial commmit
data/LICENSE.txt ADDED
@@ -0,0 +1,21 @@
1
+ Ruby-Blend2D : Blend2D bindings for Ruby
2
+ Copyright (c) 2024-2025 vaiorabbit <http://twitter.com/vaiorabbit>
3
+
4
+ This software is provided 'as-is', without any express or implied
5
+ warranty. In no event will the authors be held liable for any damages
6
+ arising from the use of this software.
7
+
8
+ Permission is granted to anyone to use this software for any purpose,
9
+ including commercial applications, and to alter it and redistribute it
10
+ freely, subject to the following restrictions:
11
+
12
+ 1. The origin of this software must not be misrepresented; you must not
13
+ claim that you wrote the original software. If you use this software
14
+ in a product, an acknowledgment in the product documentation would be
15
+ appreciated but is not required.
16
+
17
+ 2. Altered source versions must be plainly marked as such, and must not be
18
+ misrepresented as being the original software.
19
+
20
+ 3. This notice may not be removed or altered from any source
21
+ distribution.
data/README.md ADDED
@@ -0,0 +1,41 @@
1
+ <!-- -*- mode:markdown; coding:utf-8; -*- -->
2
+
3
+ # Blend2D bindings for Ruby #
4
+
5
+ * Created : 2024-01-05
6
+ * Last modified : 2025-01-01
7
+
8
+ Provides Ruby bindings for Blend2D
9
+ * https://blend2d.com
10
+ * https://github.com/blend2d/blend2d
11
+
12
+ ## License ##
13
+
14
+ All shared libraries found in `lib` directory are built on top of Blend2D ( https://github.com/blend2d/blend2d ) and are available under the zlib License.
15
+ * https://github.com/blend2d/blend2d/blob/master/LICENSE.md
16
+
17
+ All ruby codes here are available under the zlib/libpng License ( http://opensource.org/licenses/Zlib ).
18
+
19
+ ```
20
+ Ruby-Blend2D : Blend2D bindings for Ruby
21
+ Copyright (c) 2024-2025 vaiorabbit <http://twitter.com/vaiorabbit>
22
+
23
+ This software is provided 'as-is', without any express or implied
24
+ warranty. In no event will the authors be held liable for any damages
25
+ arising from the use of this software.
26
+
27
+ Permission is granted to anyone to use this software for any purpose,
28
+ including commercial applications, and to alter it and redistribute it
29
+ freely, subject to the following restrictions:
30
+
31
+ 1. The origin of this software must not be misrepresented; you must not
32
+ claim that you wrote the original software. If you use this software
33
+ in a product, an acknowledgment in the product documentation would be
34
+ appreciated but is not required.
35
+
36
+ 2. Altered source versions must be plainly marked as such, and must not be
37
+ misrepresented as being the original software.
38
+
39
+ 3. This notice may not be removed or altered from any source
40
+ distribution.
41
+ ```
data/examples/test.rb ADDED
@@ -0,0 +1,46 @@
1
+ # Visit https://github.com/vaiorabbit/blend2d-bindings/tree/main/examples for more examples.
2
+ require_relative 'util/setup_blend2d'
3
+
4
+ if __FILE__ == $PROGRAM_NAME
5
+ img = BLImageCore.create_as(480, 480, BL_FORMAT_PRGB32)
6
+
7
+ ctx = BLContextCore.create_as(img, nil)
8
+ ctx.clearAll()
9
+
10
+ # First shape
11
+ radialValues = BLRadialGradientValues.create_as(180, 180, 180, 180, 180, 0.0)
12
+ radial = BLGradientCore.create_as(BL_GRADIENT_TYPE_RADIAL, radialValues, BL_EXTEND_MODE_PAD, nil, 0, nil)
13
+ radial.addStopRgba32(0.0, 0xFFFFFFFF)
14
+ radial.addStopRgba32(1.0, 0xFFFF6F3F)
15
+
16
+ circle = BLCircle.create_as(180, 180, 160)
17
+
18
+ ctx.fillGeometryExt(BL_GEOMETRY_TYPE_CIRCLE, circle, radial)
19
+ radial.destroy()
20
+ radial = nil
21
+
22
+ # Second shape
23
+ linearValues = BLLinearGradientValues.create_as(195, 195, 470, 470)
24
+ linear = BLGradientCore.create_as(BL_GRADIENT_TYPE_LINEAR, linearValues, BL_EXTEND_MODE_PAD, nil, 0, nil)
25
+ linear.addStopRgba32(0.0, 0xFFFFFFFF)
26
+ linear.addStopRgba32(1.0, 0xFF3F9FFF)
27
+
28
+ ctx.setCompOp(BL_COMP_OP_DIFFERENCE)
29
+ roundRect = BLRoundRect.create_as(195, 195, 270, 270, 25, 25)
30
+ r = ctx.fillGeometryExt(BL_GEOMETRY_TYPE_ROUND_RECT, roundRect, linear)
31
+
32
+ linear.destroy()
33
+ linear = nil
34
+
35
+ ctx.destroy()
36
+ ctx = nil
37
+
38
+ codec = BLImageCodecCore.new
39
+ codec.initByName("PNG", "PNG".chars.length, nil)
40
+ img.writeToFile("test.png", codec)
41
+ codec.destroy()
42
+ codec = nil
43
+
44
+ img.destroy()
45
+ img = nil
46
+ end
@@ -0,0 +1,46 @@
1
+ def blend2d_bindings_gem_available?
2
+ Gem::Specification.find_by_name('blend2d-bindings')
3
+ rescue Gem::LoadError
4
+ false
5
+ rescue
6
+ Gem.available?('blend2d-bindings')
7
+ end
8
+
9
+ if blend2d_bindings_gem_available?
10
+ # puts("Loading from Gem system path.")
11
+ require 'blend2d'
12
+
13
+ s = Gem::Specification.find_by_name('blend2d-bindings')
14
+ shared_lib_path = s.full_gem_path + '/lib/'
15
+
16
+ case RUBY_PLATFORM
17
+ when /mswin|msys|mingw|cygwin/
18
+ Blend2D.load_lib(shared_lib_path + 'libblend2d.dll')
19
+ when /darwin/
20
+ arch = RUBY_PLATFORM.split('-')[0]
21
+ Blend2D.load_lib(shared_lib_path + "libblend2d.#{arch}.dylib")
22
+ when /linux/
23
+ arch = RUBY_PLATFORM.split('-')[0]
24
+ Blend2D.load_lib(shared_lib_path + "libblend2d.#{arch}.so")
25
+ else
26
+ raise RuntimeError, "setup_dll.rb : Unknown OS: #{RUBY_PLATFORM}"
27
+ end
28
+ else
29
+ # puts("Loaging from local path.")
30
+ require '../lib/blend2d'
31
+
32
+ case RUBY_PLATFORM
33
+ when /mswin|msys|mingw|cygwin/
34
+ Blend2D.load_lib(Dir.pwd + '/../lib/' + 'libblend2d.dll')
35
+ when /darwin/
36
+ arch = RUBY_PLATFORM.split('-')[0]
37
+ Blend2D.load_lib(Dir.pwd + '/../lib/' + "libblend2d.#{arch}.dylib")
38
+ when /linux/
39
+ arch = RUBY_PLATFORM.split('-')[0]
40
+ Blend2D.load_lib(Dir.pwd + '/../lib/' + "libblend2d.#{arch}.so")
41
+ else
42
+ raise RuntimeError, "setup_dll.rb : Unknown OS: #{RUBY_PLATFORM}"
43
+ end
44
+ end
45
+
46
+ include Blend2D
data/lib/blend2d.rb ADDED
@@ -0,0 +1,95 @@
1
+ # Ruby-Blend2D : Yet another Blend2D wrapper for Ruby
2
+ #
3
+ # * https://github.com/vaiorabbit/blend2d-bindings
4
+
5
+ require 'ffi'
6
+ require_relative 'blend2d_api.rb'
7
+ require_relative 'blend2d_array.rb'
8
+ require_relative 'blend2d_bitarray.rb'
9
+ require_relative 'blend2d_bitset.rb'
10
+ require_relative 'blend2d_context.rb'
11
+ require_relative 'blend2d_filesystem.rb'
12
+ require_relative 'blend2d_font.rb'
13
+ require_relative 'blend2d_fontdata.rb'
14
+ require_relative 'blend2d_fontdefs.rb'
15
+ require_relative 'blend2d_fontface.rb'
16
+ require_relative 'blend2d_fontfeaturesettings.rb'
17
+ require_relative 'blend2d_fontmanager.rb'
18
+ require_relative 'blend2d_fontvariationsettings.rb'
19
+ require_relative 'blend2d_format.rb'
20
+ require_relative 'blend2d_geometry.rb'
21
+ require_relative 'blend2d_glyphbuffer.rb'
22
+ require_relative 'blend2d_glyphrun.rb'
23
+ require_relative 'blend2d_gradient.rb'
24
+ require_relative 'blend2d_image.rb'
25
+ require_relative 'blend2d_imagecodec.rb'
26
+ require_relative 'blend2d_imagedecoder.rb'
27
+ require_relative 'blend2d_imageencoder.rb'
28
+ require_relative 'blend2d_matrix.rb'
29
+ require_relative 'blend2d_object.rb'
30
+ require_relative 'blend2d_path.rb'
31
+ require_relative 'blend2d_pattern.rb'
32
+ require_relative 'blend2d_pixelconverter.rb'
33
+ require_relative 'blend2d_random.rb'
34
+ require_relative 'blend2d_rgba.rb'
35
+ require_relative 'blend2d_runtime.rb'
36
+ require_relative 'blend2d_string.rb'
37
+ require_relative 'blend2d_var.rb'
38
+
39
+ module Blend2D
40
+ extend FFI::Library
41
+
42
+ @@blend2d_import_done = false
43
+ def self.load_lib(libpath, output_error = false)
44
+
45
+ unless @@blend2d_import_done
46
+ # Ref.: Using Multiple and Alternate Libraries
47
+ # https://github.com/ffi/ffi/wiki/Using-Multiple-and-Alternate-Libraries
48
+ begin
49
+ lib_paths = [libpath].compact
50
+ ffi_lib_flags :now, :global
51
+ ffi_lib *lib_paths
52
+ setup_symbols(output_error)
53
+ rescue => error
54
+ $stderr.puts("[Warning] Failed to load libraries (#{error}).") if output_error
55
+ end
56
+ end
57
+
58
+ end
59
+
60
+ def self.setup_symbols(output_error = false)
61
+ setup_api_symbols(output_error)
62
+ setup_array_symbols(output_error)
63
+ setup_bitarray_symbols(output_error)
64
+ setup_bitset_symbols(output_error)
65
+ setup_context_symbols(output_error)
66
+ setup_filesystem_symbols(output_error)
67
+ setup_font_symbols(output_error)
68
+ setup_fontdata_symbols(output_error)
69
+ setup_fontdefs_symbols(output_error)
70
+ setup_fontface_symbols(output_error)
71
+ setup_fontfeaturesettings_symbols(output_error)
72
+ setup_fontmanager_symbols(output_error)
73
+ setup_fontvariationsettings_symbols(output_error)
74
+ setup_format_symbols(output_error)
75
+ setup_geometry_symbols(output_error)
76
+ setup_glyphbuffer_symbols(output_error)
77
+ setup_glyphrun_symbols(output_error)
78
+ setup_gradient_symbols(output_error)
79
+ setup_image_symbols(output_error)
80
+ setup_imagecodec_symbols(output_error)
81
+ setup_imagedecoder_symbols(output_error)
82
+ setup_imageencoder_symbols(output_error)
83
+ setup_matrix_symbols(output_error)
84
+ setup_object_symbols(output_error)
85
+ setup_path_symbols(output_error)
86
+ setup_pattern_symbols(output_error)
87
+ setup_pixelconverter_symbols(output_error)
88
+ setup_random_symbols(output_error)
89
+ setup_rgba_symbols(output_error)
90
+ setup_runtime_symbols(output_error)
91
+ setup_string_symbols(output_error)
92
+ setup_var_symbols(output_error)
93
+ end
94
+
95
+ end
@@ -0,0 +1,255 @@
1
+ # Ruby-Blend2D : Yet another Blend2D wrapper for Ruby
2
+ #
3
+ # * https://github.com/vaiorabbit/blend2d-bindings
4
+ #
5
+ # [NOTICE] Autogenerated. Do not edit.
6
+
7
+ require 'ffi'
8
+
9
+ module Blend2D
10
+ extend FFI::Library
11
+ # Define/Macro
12
+
13
+
14
+ # Enum
15
+
16
+ BL_SUCCESS = 0
17
+ BL_ERROR_START_INDEX = 65536
18
+ BL_ERROR_OUT_OF_MEMORY = 65536
19
+ BL_ERROR_INVALID_VALUE = 65537
20
+ BL_ERROR_INVALID_STATE = 65538
21
+ BL_ERROR_INVALID_HANDLE = 65539
22
+ BL_ERROR_INVALID_CONVERSION = 65540
23
+ BL_ERROR_OVERFLOW = 65541
24
+ BL_ERROR_NOT_INITIALIZED = 65542
25
+ BL_ERROR_NOT_IMPLEMENTED = 65543
26
+ BL_ERROR_NOT_PERMITTED = 65544
27
+ BL_ERROR_IO = 65545
28
+ BL_ERROR_BUSY = 65546
29
+ BL_ERROR_INTERRUPTED = 65547
30
+ BL_ERROR_TRY_AGAIN = 65548
31
+ BL_ERROR_TIMED_OUT = 65549
32
+ BL_ERROR_BROKEN_PIPE = 65550
33
+ BL_ERROR_INVALID_SEEK = 65551
34
+ BL_ERROR_SYMLINK_LOOP = 65552
35
+ BL_ERROR_FILE_TOO_LARGE = 65553
36
+ BL_ERROR_ALREADY_EXISTS = 65554
37
+ BL_ERROR_ACCESS_DENIED = 65555
38
+ BL_ERROR_MEDIA_CHANGED = 65556
39
+ BL_ERROR_READ_ONLY_FS = 65557
40
+ BL_ERROR_NO_DEVICE = 65558
41
+ BL_ERROR_NO_ENTRY = 65559
42
+ BL_ERROR_NO_MEDIA = 65560
43
+ BL_ERROR_NO_MORE_DATA = 65561
44
+ BL_ERROR_NO_MORE_FILES = 65562
45
+ BL_ERROR_NO_SPACE_LEFT = 65563
46
+ BL_ERROR_NOT_EMPTY = 65564
47
+ BL_ERROR_NOT_FILE = 65565
48
+ BL_ERROR_NOT_DIRECTORY = 65566
49
+ BL_ERROR_NOT_SAME_DEVICE = 65567
50
+ BL_ERROR_NOT_BLOCK_DEVICE = 65568
51
+ BL_ERROR_INVALID_FILE_NAME = 65569
52
+ BL_ERROR_FILE_NAME_TOO_LONG = 65570
53
+ BL_ERROR_TOO_MANY_OPEN_FILES = 65571
54
+ BL_ERROR_TOO_MANY_OPEN_FILES_BY_OS = 65572
55
+ BL_ERROR_TOO_MANY_LINKS = 65573
56
+ BL_ERROR_TOO_MANY_THREADS = 65574
57
+ BL_ERROR_THREAD_POOL_EXHAUSTED = 65575
58
+ BL_ERROR_FILE_EMPTY = 65576
59
+ BL_ERROR_OPEN_FAILED = 65577
60
+ BL_ERROR_NOT_ROOT_DEVICE = 65578
61
+ BL_ERROR_UNKNOWN_SYSTEM_ERROR = 65579
62
+ BL_ERROR_INVALID_ALIGNMENT = 65580
63
+ BL_ERROR_INVALID_SIGNATURE = 65581
64
+ BL_ERROR_INVALID_DATA = 65582
65
+ BL_ERROR_INVALID_STRING = 65583
66
+ BL_ERROR_INVALID_KEY = 65584
67
+ BL_ERROR_DATA_TRUNCATED = 65585
68
+ BL_ERROR_DATA_TOO_LARGE = 65586
69
+ BL_ERROR_DECOMPRESSION_FAILED = 65587
70
+ BL_ERROR_INVALID_GEOMETRY = 65588
71
+ BL_ERROR_NO_MATCHING_VERTEX = 65589
72
+ BL_ERROR_INVALID_CREATE_FLAGS = 65590
73
+ BL_ERROR_NO_MATCHING_COOKIE = 65591
74
+ BL_ERROR_NO_STATES_TO_RESTORE = 65592
75
+ BL_ERROR_TOO_MANY_SAVED_STATES = 65593
76
+ BL_ERROR_IMAGE_TOO_LARGE = 65594
77
+ BL_ERROR_IMAGE_NO_MATCHING_CODEC = 65595
78
+ BL_ERROR_IMAGE_UNKNOWN_FILE_FORMAT = 65596
79
+ BL_ERROR_IMAGE_DECODER_NOT_PROVIDED = 65597
80
+ BL_ERROR_IMAGE_ENCODER_NOT_PROVIDED = 65598
81
+ BL_ERROR_PNG_MULTIPLE_IHDR = 65599
82
+ BL_ERROR_PNG_INVALID_IDAT = 65600
83
+ BL_ERROR_PNG_INVALID_IEND = 65601
84
+ BL_ERROR_PNG_INVALID_PLTE = 65602
85
+ BL_ERROR_PNG_INVALID_TRNS = 65603
86
+ BL_ERROR_PNG_INVALID_FILTER = 65604
87
+ BL_ERROR_JPEG_UNSUPPORTED_FEATURE = 65605
88
+ BL_ERROR_JPEG_INVALID_SOS = 65606
89
+ BL_ERROR_JPEG_INVALID_SOF = 65607
90
+ BL_ERROR_JPEG_MULTIPLE_SOF = 65608
91
+ BL_ERROR_JPEG_UNSUPPORTED_SOF = 65609
92
+ BL_ERROR_FONT_NOT_INITIALIZED = 65610
93
+ BL_ERROR_FONT_NO_MATCH = 65611
94
+ BL_ERROR_FONT_NO_CHARACTER_MAPPING = 65612
95
+ BL_ERROR_FONT_MISSING_IMPORTANT_TABLE = 65613
96
+ BL_ERROR_FONT_FEATURE_NOT_AVAILABLE = 65614
97
+ BL_ERROR_FONT_CFF_INVALID_DATA = 65615
98
+ BL_ERROR_FONT_PROGRAM_TERMINATED = 65616
99
+ BL_ERROR_GLYPH_SUBSTITUTION_TOO_LARGE = 65617
100
+ BL_ERROR_INVALID_GLYPH = 65618
101
+ BL_ERROR_FORCE_UINT = -1
102
+ BL_BYTE_ORDER_LE = 0
103
+ BL_BYTE_ORDER_BE = 1
104
+ BL_BYTE_ORDER_NATIVE = 0
105
+ BL_BYTE_ORDER_SWAPPED = 1
106
+ BL_BYTE_ORDER_FORCE_UINT = -1
107
+ BL_DATA_ACCESS_NO_FLAGS = 0
108
+ BL_DATA_ACCESS_READ = 1
109
+ BL_DATA_ACCESS_WRITE = 2
110
+ BL_DATA_ACCESS_RW = 3
111
+ BL_DATA_ACCESS_FORCE_UINT = -1
112
+ BL_DATA_SOURCE_TYPE_NONE = 0
113
+ BL_DATA_SOURCE_TYPE_MEMORY = 1
114
+ BL_DATA_SOURCE_TYPE_FILE = 2
115
+ BL_DATA_SOURCE_TYPE_CUSTOM = 3
116
+ BL_DATA_SOURCE_TYPE_MAX_VALUE = 3
117
+ BL_DATA_SOURCE_TYPE_FORCE_UINT = -1
118
+ BL_MODIFY_OP_ASSIGN_FIT = 0
119
+ BL_MODIFY_OP_ASSIGN_GROW = 1
120
+ BL_MODIFY_OP_APPEND_FIT = 2
121
+ BL_MODIFY_OP_APPEND_GROW = 3
122
+ BL_MODIFY_OP_MAX_VALUE = 3
123
+ BL_MODIFY_OP_FORCE_UINT = -1
124
+ BL_BOOLEAN_OP_COPY = 0
125
+ BL_BOOLEAN_OP_AND = 1
126
+ BL_BOOLEAN_OP_OR = 2
127
+ BL_BOOLEAN_OP_XOR = 3
128
+ BL_BOOLEAN_OP_AND_NOT = 4
129
+ BL_BOOLEAN_OP_NOT_AND = 5
130
+ BL_BOOLEAN_OP_MAX_VALUE = 5
131
+ BL_BOOLEAN_OP_FORCE_UINT = -1
132
+ BL_EXTEND_MODE_PAD = 0
133
+ BL_EXTEND_MODE_REPEAT = 1
134
+ BL_EXTEND_MODE_REFLECT = 2
135
+ BL_EXTEND_MODE_PAD_X_PAD_Y = 0
136
+ BL_EXTEND_MODE_PAD_X_REPEAT_Y = 3
137
+ BL_EXTEND_MODE_PAD_X_REFLECT_Y = 4
138
+ BL_EXTEND_MODE_REPEAT_X_REPEAT_Y = 1
139
+ BL_EXTEND_MODE_REPEAT_X_PAD_Y = 5
140
+ BL_EXTEND_MODE_REPEAT_X_REFLECT_Y = 6
141
+ BL_EXTEND_MODE_REFLECT_X_REFLECT_Y = 2
142
+ BL_EXTEND_MODE_REFLECT_X_PAD_Y = 7
143
+ BL_EXTEND_MODE_REFLECT_X_REPEAT_Y = 8
144
+ BL_EXTEND_MODE_SIMPLE_MAX_VALUE = 2
145
+ BL_EXTEND_MODE_COMPLEX_MAX_VALUE = 8
146
+ BL_EXTEND_MODE_MAX_VALUE = 8
147
+ BL_EXTEND_MODE_FORCE_UINT = -1
148
+ BL_TEXT_ENCODING_UTF8 = 0
149
+ BL_TEXT_ENCODING_UTF16 = 1
150
+ BL_TEXT_ENCODING_UTF32 = 2
151
+ BL_TEXT_ENCODING_LATIN1 = 3
152
+ BL_TEXT_ENCODING_WCHAR = 1
153
+ BL_TEXT_ENCODING_MAX_VALUE = 3
154
+ BL_TEXT_ENCODING_FORCE_UINT = -1
155
+
156
+ # Typedef
157
+
158
+ typedef :uint, :BLResult
159
+ typedef :uint, :BLTag
160
+ typedef :ulong_long, :BLUniqueId
161
+ typedef :void, :BLUnknown
162
+ callback :BLDebugMessageSinkFunc, [:pointer, :ulong_long, :pointer], :void
163
+ typedef :int, :BLResultCode
164
+ typedef :int, :BLByteOrder
165
+ typedef :int, :BLDataAccessFlags
166
+ typedef :int, :BLDataSourceType
167
+ typedef :int, :BLModifyOp
168
+ typedef :int, :BLBooleanOp
169
+ typedef :int, :BLExtendMode
170
+ typedef :int, :BLTextEncoding
171
+
172
+ # Struct
173
+
174
+ class BLRange < FFI::Struct
175
+ layout(
176
+ :start, :ulong_long,
177
+ :end, :ulong_long,
178
+ )
179
+ def start = self[:start]
180
+ def start=(v) self[:start] = v end
181
+ def end = self[:end]
182
+ def end=(v) self[:end] = v end
183
+ def self.create_as(_start_, _end_)
184
+ instance = BLRange.new
185
+ instance[:start] = _start_
186
+ instance[:end] = _end_
187
+ instance
188
+ end
189
+ end
190
+
191
+ class BLArrayView < FFI::Struct
192
+ layout(
193
+ :data, :pointer,
194
+ :size, :ulong_long,
195
+ )
196
+ def data = self[:data]
197
+ def data=(v) self[:data] = v end
198
+ def size = self[:size]
199
+ def size=(v) self[:size] = v end
200
+ def self.create_as(_data_, _size_)
201
+ instance = BLArrayView.new
202
+ instance[:data] = _data_
203
+ instance[:size] = _size_
204
+ instance
205
+ end
206
+ end
207
+
208
+ class BLStringView < FFI::Struct
209
+ layout(
210
+ :data, :pointer,
211
+ :size, :ulong_long,
212
+ )
213
+ def data = self[:data]
214
+ def data=(v) self[:data] = v end
215
+ def size = self[:size]
216
+ def size=(v) self[:size] = v end
217
+ def self.create_as(_data_, _size_)
218
+ instance = BLStringView.new
219
+ instance[:data] = _data_
220
+ instance[:size] = _size_
221
+ instance
222
+ end
223
+ end
224
+
225
+
226
+ # Function
227
+
228
+ def self.setup_api_symbols(output_error = false)
229
+ symbols = [
230
+ :blTraceError,
231
+ :blRuntimeAssertionFailure,
232
+ ]
233
+ apis = {
234
+ :blTraceError => :blTraceError,
235
+ :blRuntimeAssertionFailure => :blRuntimeAssertionFailure,
236
+ }
237
+ args = {
238
+ :blTraceError => [:uint],
239
+ :blRuntimeAssertionFailure => [:pointer, :int, :pointer],
240
+ }
241
+ retvals = {
242
+ :blTraceError => :uint,
243
+ :blRuntimeAssertionFailure => :void,
244
+ }
245
+ symbols.each do |sym|
246
+ begin
247
+ attach_function apis[sym], sym, args[sym], retvals[sym]
248
+ rescue FFI::NotFoundError => error
249
+ $stderr.puts("[Warning] Failed to import #{sym} (#{error}).") if output_error
250
+ end
251
+ end
252
+ end
253
+
254
+ end
255
+