red-flatbuffers 0.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.
@@ -0,0 +1,34 @@
1
+ # Copyright 2025 Sutou Kouhei <kou@clear-code.com>
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
15
+ require_relative "inspectable"
16
+ require_relative "view"
17
+
18
+ module FlatBuffers
19
+ class Table
20
+ include Inspectable
21
+
22
+ def initialize(input)
23
+ if input.is_a?(View)
24
+ @view = input
25
+ else
26
+ if input.is_a?(String)
27
+ input = IO::Buffer.for(input)
28
+ end
29
+ offset = input.get_value(:u32, 0)
30
+ @view = View.new(input, offset, have_vtable: true)
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,62 @@
1
+ # Copyright 2025 Sutou Kouhei <kou@clear-code.com>
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
15
+ module FlatBuffers
16
+ class Union
17
+ class << self
18
+ def try_convert(value)
19
+ case value
20
+ when Symbol, String
21
+ @name_to_union[value.to_s]
22
+ when Integer
23
+ @value_to_union[value]
24
+ when self
25
+ value
26
+ else
27
+ nil
28
+ end
29
+ end
30
+
31
+ def register(name, value, table_class_name, require_path)
32
+ object = new(name, value, table_class_name, require_path)
33
+ (@name_to_union ||= {})[name] = object
34
+ (@value_to_union ||= {})[value] = object
35
+ object
36
+ end
37
+ end
38
+
39
+ attr_reader :name
40
+ attr_reader :value
41
+ def initialize(name, value, table_class_name, require_path)
42
+ @name = name
43
+ @value = value
44
+ @table_class_name = table_class_name
45
+ @require_path = require_path
46
+ end
47
+
48
+ def table_class
49
+ @table_class ||= resolve_table_class
50
+ end
51
+
52
+ private def resolve_table_class
53
+ return nil if @table_class_name.nil?
54
+
55
+ require_table_class
56
+ Object.const_get(@table_class_name)
57
+ end
58
+
59
+ alias_method :to_i, :value
60
+ alias_method :to_int, :value
61
+ end
62
+ end
@@ -0,0 +1,17 @@
1
+ # Copyright 2025 Sutou Kouhei <kou@clear-code.com>
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
15
+ module FlatBuffers
16
+ VERSION = "0.0.1"
17
+ end
@@ -0,0 +1,176 @@
1
+ # Copyright 2025 Sutou Kouhei <kou@clear-code.com>
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
15
+ module FlatBuffers
16
+ class View
17
+ OFFSET_BYTE_SIZE = 4
18
+ VIRTUAL_OFFSET_BYTE_SIZE = 2
19
+
20
+ def initialize(data, offset, have_vtable: false)
21
+ @data = data
22
+ @offset = offset
23
+ if have_vtable
24
+ vtable_offset = unpack_signed_offset(0)
25
+ @vtable_start = @offset - vtable_offset
26
+ # We assume vtable must have length.
27
+ @vtable_max_offset = VIRTUAL_OFFSET_BYTE_SIZE
28
+ @vtable_length = unpack_virtual_offset(0)
29
+ @vtable_max_offset = @vtable_length - VIRTUAL_OFFSET_BYTE_SIZE
30
+ @table_length = unpack_virtual_offset(VIRTUAL_OFFSET_BYTE_SIZE)
31
+ end
32
+ end
33
+
34
+ def unpack_virtual_offset(vtable_offset)
35
+ return 0 if vtable_offset > @vtable_max_offset
36
+ @data.get_value(:u16, @vtable_start + vtable_offset)
37
+ end
38
+
39
+ def resolve_indirect(offset)
40
+ @offset + offset + unpack_offset(offset)
41
+ end
42
+
43
+ def unpack_offset_raw(offset)
44
+ @data.get_value(:u32, offset)
45
+ end
46
+
47
+ def unpack_offset(offset)
48
+ unpack_offset_raw(@offset + offset)
49
+ end
50
+
51
+ def unpack_signed_offset(offset)
52
+ @data.get_value(:s32, @offset + offset)
53
+ end
54
+
55
+ def unpack_bool(offset)
56
+ unpack_byte(offset) != 0
57
+ end
58
+
59
+ def unpack_utype(offset)
60
+ unpack_ubyte(offset)
61
+ end
62
+
63
+ def unpack_byte(offset)
64
+ @data.get_value(:S8, @offset + offset)
65
+ end
66
+
67
+ def unpack_ubyte(offset)
68
+ @data.get_value(:U8, @offset + offset)
69
+ end
70
+
71
+ def unpack_short(offset)
72
+ @data.get_value(:s16, @offset + offset)
73
+ end
74
+
75
+ def unpack_ushort(offset)
76
+ @data.get_value(:u16, @offset + offset)
77
+ end
78
+
79
+ def unpack_int(offset)
80
+ @data.get_value(:s32, @offset + offset)
81
+ end
82
+
83
+ def unpack_uint(offset)
84
+ @data.get_value(:u32, @offset + offset)
85
+ end
86
+
87
+ def unpack_long(offset)
88
+ @data.get_value(:s64, @offset + offset)
89
+ end
90
+
91
+ def unpack_ulong(offset)
92
+ @data.get_value(:u64, @offset + offset)
93
+ end
94
+
95
+ def unpack_float(offset)
96
+ @data.get_value(:f32, @offset + offset)
97
+ end
98
+
99
+ def unpack_double(offset)
100
+ @data.get_value(:f64, @offset + offset)
101
+ end
102
+
103
+ def unpack_string(offset)
104
+ value_offset = resolve_indirect(offset)
105
+ length = unpack_offset_raw(value_offset)
106
+ @data.get_string(value_offset + OFFSET_BYTE_SIZE,
107
+ length)
108
+ end
109
+
110
+ def unpack_table(klass, offset)
111
+ sub_view = self.class.new(@data,
112
+ resolve_indirect(offset),
113
+ have_vtable: true)
114
+ klass.new(sub_view)
115
+ end
116
+
117
+ def unpack_struct(klass, offset)
118
+ sub_view = self.class.new(@data,
119
+ @offset + offset,
120
+ have_vtable: false)
121
+ klass.new(sub_view)
122
+ end
123
+
124
+ def unpack_union(klass, offset)
125
+ unpack_table(klass, offset)
126
+ end
127
+
128
+ def unpack_vector_length(offset)
129
+ vector_offset = resolve_indirect(offset)
130
+ unpack_offset_raw(vector_offset)
131
+ end
132
+
133
+ def unpack_vector(offset, element_size)
134
+ relative_vector_offset = offset + unpack_offset(offset)
135
+ length = unpack_offset(relative_vector_offset)
136
+ return nil if length.zero?
137
+
138
+ relative_vector_body_offset = relative_vector_offset + OFFSET_BYTE_SIZE
139
+ length.times.collect do |i|
140
+ relative_element_offset =
141
+ relative_vector_body_offset + (element_size * i)
142
+ yield(relative_element_offset)
143
+ end
144
+ end
145
+
146
+ def unpack_bool_vector(offset, element_size)
147
+ unpack_vector(offset, element_size) do |relative_element_offset|
148
+ unpack_bool(relative_element_offset)
149
+ end
150
+ end
151
+
152
+ def unpack_ubyte_vector(offset, element_size)
153
+ unpack_vector(offset, element_size) do |relative_element_offset|
154
+ unpack_ubyte(relative_element_offset)
155
+ end
156
+ end
157
+
158
+ def unpack_string_vector(offset, element_size)
159
+ unpack_vector(offset, element_size) do |relative_element_offset|
160
+ unpack_string(relative_element_offset)
161
+ end
162
+ end
163
+
164
+ def unpack_table_vector(offset, element_size, klass)
165
+ unpack_vector(offset, element_size) do |relative_element_offset|
166
+ unpack_table(klass, relative_element_offset)
167
+ end
168
+ end
169
+
170
+ def unpack_struct_vector(offset, element_size, klass)
171
+ unpack_vector(offset, element_size) do |relative_element_offset|
172
+ unpack_struct(klass, relative_element_offset)
173
+ end
174
+ end
175
+ end
176
+ end
@@ -0,0 +1,20 @@
1
+ # Copyright 2025 Sutou Kouhei <kou@clear-code.com>
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
15
+ require_relative "flatbuffers/enum"
16
+ require_relative "flatbuffers/flags"
17
+ require_relative "flatbuffers/struct"
18
+ require_relative "flatbuffers/table"
19
+ require_relative "flatbuffers/union"
20
+ require_relative "flatbuffers/version"
@@ -0,0 +1,46 @@
1
+ # -*- ruby -*-
2
+ #
3
+ # Copyright 2025 Sutou Kouhei <kou@clear-code.com>
4
+ #
5
+ # Licensed under the Apache License, Version 2.0 (the "License");
6
+ # you may not use this file except in compliance with the License.
7
+ # You may obtain a copy of the License at
8
+ #
9
+ # http://www.apache.org/licenses/LICENSE-2.0
10
+ #
11
+ # Unless required by applicable law or agreed to in writing, software
12
+ # distributed under the License is distributed on an "AS IS" BASIS,
13
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ # See the License for the specific language governing permissions and
15
+ # limitations under the License.
16
+
17
+ clean_white_space = lambda do |entry|
18
+ entry.gsub(/(\A\n+|\n+\z)/, '') + "\n"
19
+ end
20
+
21
+ require_relative "lib/flatbuffers/version"
22
+
23
+ Gem::Specification.new do |spec|
24
+ spec.name = "red-flatbuffers"
25
+ spec.version = FlatBuffers::VERSION
26
+ spec.homepage = "https://github.com/red-data-tools/red-flatbuffers"
27
+ spec.authors = ["Sutou Kouhei"]
28
+ spec.email = ["kou@clear-code.com"]
29
+
30
+ readme = File.read("README.md")
31
+ readme.force_encoding("UTF-8")
32
+ entries = readme.split(/^\#\#\s(.*)$/)
33
+ description = clean_white_space.call(entries[2])
34
+ spec.summary, spec.description, = description.split(/\n\n+/, 3)
35
+ spec.license = "Apache-2.0"
36
+ spec.files = ["README.md", "#{spec.name}.gemspec"]
37
+ spec.files += Dir.glob("lib/**/*.rb")
38
+ spec.files += Dir.glob("doc/text/*")
39
+ Dir.chdir("bin") do
40
+ spec.executables = Dir.glob("*")
41
+ end
42
+
43
+ spec.add_development_dependency("bundler")
44
+ spec.add_development_dependency("rake")
45
+ spec.add_development_dependency("test-unit")
46
+ end
metadata ADDED
@@ -0,0 +1,111 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: red-flatbuffers
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Sutou Kouhei
8
+ bindir: bin
9
+ cert_chain: []
10
+ date: 1980-01-02 00:00:00.000000000 Z
11
+ dependencies:
12
+ - !ruby/object:Gem::Dependency
13
+ name: bundler
14
+ requirement: !ruby/object:Gem::Requirement
15
+ requirements:
16
+ - - ">="
17
+ - !ruby/object:Gem::Version
18
+ version: '0'
19
+ type: :development
20
+ prerelease: false
21
+ version_requirements: !ruby/object:Gem::Requirement
22
+ requirements:
23
+ - - ">="
24
+ - !ruby/object:Gem::Version
25
+ version: '0'
26
+ - !ruby/object:Gem::Dependency
27
+ name: rake
28
+ requirement: !ruby/object:Gem::Requirement
29
+ requirements:
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: '0'
33
+ type: :development
34
+ prerelease: false
35
+ version_requirements: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - ">="
38
+ - !ruby/object:Gem::Version
39
+ version: '0'
40
+ - !ruby/object:Gem::Dependency
41
+ name: test-unit
42
+ requirement: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - ">="
45
+ - !ruby/object:Gem::Version
46
+ version: '0'
47
+ type: :development
48
+ prerelease: false
49
+ version_requirements: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - ">="
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ description: ''
55
+ email:
56
+ - kou@clear-code.com
57
+ executables:
58
+ - rbflatc
59
+ extensions: []
60
+ extra_rdoc_files: []
61
+ files:
62
+ - README.md
63
+ - bin/rbflatc
64
+ - doc/text/apache-2.0.txt
65
+ - doc/text/news.md
66
+ - lib/flatbuffers.rb
67
+ - lib/flatbuffers/command/rbflatc.rb
68
+ - lib/flatbuffers/enum.rb
69
+ - lib/flatbuffers/flags.rb
70
+ - lib/flatbuffers/generator.rb
71
+ - lib/flatbuffers/inspectable.rb
72
+ - lib/flatbuffers/reflection/advanced_features.rb
73
+ - lib/flatbuffers/reflection/base_type.rb
74
+ - lib/flatbuffers/reflection/enum.rb
75
+ - lib/flatbuffers/reflection/enum_val.rb
76
+ - lib/flatbuffers/reflection/field.rb
77
+ - lib/flatbuffers/reflection/key_value.rb
78
+ - lib/flatbuffers/reflection/object.rb
79
+ - lib/flatbuffers/reflection/rpccall.rb
80
+ - lib/flatbuffers/reflection/schema.rb
81
+ - lib/flatbuffers/reflection/schema_file.rb
82
+ - lib/flatbuffers/reflection/service.rb
83
+ - lib/flatbuffers/reflection/type.rb
84
+ - lib/flatbuffers/struct.rb
85
+ - lib/flatbuffers/table.rb
86
+ - lib/flatbuffers/union.rb
87
+ - lib/flatbuffers/version.rb
88
+ - lib/flatbuffers/view.rb
89
+ - red-flatbuffers.gemspec
90
+ homepage: https://github.com/red-data-tools/red-flatbuffers
91
+ licenses:
92
+ - Apache-2.0
93
+ metadata: {}
94
+ rdoc_options: []
95
+ require_paths:
96
+ - lib
97
+ required_ruby_version: !ruby/object:Gem::Requirement
98
+ requirements:
99
+ - - ">="
100
+ - !ruby/object:Gem::Version
101
+ version: '0'
102
+ required_rubygems_version: !ruby/object:Gem::Requirement
103
+ requirements:
104
+ - - ">="
105
+ - !ruby/object:Gem::Version
106
+ version: '0'
107
+ requirements: []
108
+ rubygems_version: 3.6.9
109
+ specification_version: 4
110
+ summary: "```bash gem install red-flatbuffers ```"
111
+ test_files: []