numo-binrw 0.1.0

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: 5a766bc9b6b346e968a7be8047d50488d9f453459472f72635ef0cccd2e38b30
4
+ data.tar.gz: 42affdfac77f1093ec9a724e36a94bb23d4487f0d6ba3142ae58d3004acd91bf
5
+ SHA512:
6
+ metadata.gz: d6ac610bac08f89e6558451112b1547ac9707ef38b7f1480c2d9ec8b932883c4c4892dc14e208efc295d314d40629667364fd10cd19b75705b5209df7dcbfde8
7
+ data.tar.gz: 1ecac661f63d943f87598978799d81e21981f2f6b3830e88f77b574586675e1660b64649d65794692d5e6b3f1685213859a146a52c3243b31a72f56c585d01af
@@ -0,0 +1,22 @@
1
+ name: build
2
+
3
+ on:
4
+ push:
5
+
6
+ jobs:
7
+ release-versions:
8
+ name: Build narray-fromfile
9
+ runs-on: ubuntu-latest
10
+ steps:
11
+ - uses: actions/checkout@v2
12
+ - name: Set up Ruby
13
+ uses: actions/setup-ruby@v1
14
+ with:
15
+ ruby-version : 2.7
16
+ - name: Bundle install
17
+ run: bundle install
18
+ - name: Install a gem
19
+ run: rake install
20
+ - name: Test
21
+ run: rake test
22
+
data/.gitignore ADDED
@@ -0,0 +1,59 @@
1
+ *.gem
2
+ *.rbc
3
+ /.config
4
+ /coverage/
5
+ /InstalledFiles
6
+ /pkg/
7
+ /spec/reports/
8
+ /spec/examples.txt
9
+ /test/tmp/
10
+ /test/version_tmp/
11
+ /tmp/
12
+
13
+ # Used by dotenv library to load environment variables.
14
+ # .env
15
+
16
+ # Ignore Byebug command history file.
17
+ .byebug_history
18
+
19
+ ## Specific to RubyMotion:
20
+ .dat*
21
+ .repl_history
22
+ build/
23
+ *.bridgesupport
24
+ build-iPhoneOS/
25
+ build-iPhoneSimulator/
26
+
27
+ ## Specific to RubyMotion (use of CocoaPods):
28
+ #
29
+ # We recommend against adding the Pods directory to your .gitignore. However
30
+ # you should judge for yourself, the pros and cons are mentioned at:
31
+ # https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control
32
+ #
33
+ # vendor/Pods/
34
+
35
+ ## Documentation cache and generated files:
36
+ /.yardoc/
37
+ /_yardoc/
38
+ /doc/
39
+ /rdoc/
40
+
41
+ ## Environment normalization:
42
+ /.bundle/
43
+ /vendor/bundle
44
+ /lib/bundler/man/
45
+
46
+ # for a library or gem, you might want to ignore these files since the code is
47
+ # intended to run in multiple environments; otherwise, check them in:
48
+ # Gemfile.lock
49
+ # .ruby-version
50
+ # .ruby-gemset
51
+
52
+ # unless supporting rvm < 1.11.0 or doing something fancy, ignore this:
53
+ .rvmrc
54
+
55
+ # Used by RuboCop. Remote config files pulled in from inherit_from directive.
56
+ # .rubocop-https?--*
57
+
58
+ *.bin
59
+ *.dat
data/Gemfile ADDED
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ source "https://rubygems.org"
4
+
5
+ # Specify your gem's dependencies in numo-binrw.gemspec
6
+ gemspec
7
+
8
+
data/Gemfile.lock ADDED
@@ -0,0 +1,25 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ numo-binrw (0.1.0)
5
+
6
+ GEM
7
+ remote: https://rubygems.org/
8
+ specs:
9
+ numo-narray (0.9.2.0)
10
+ rake (13.0.6)
11
+ rake-compiler (1.1.1)
12
+ rake
13
+
14
+ PLATFORMS
15
+ ruby
16
+ x86_64-linux
17
+
18
+ DEPENDENCIES
19
+ numo-binrw!
20
+ numo-narray (~> 0.9.2.0)
21
+ rake (>= 12.3.3)
22
+ rake-compiler (~> 1.1.1)
23
+
24
+ BUNDLED WITH
25
+ 2.2.22
data/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2021 MURATA Mitsuharu
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,54 @@
1
+ # numo-binrw
2
+
3
+ [![build](https://github.com/Himeyama/numo-binrw/actions/workflows/build.yml/badge.svg)](https://github.com/Himeyama/numo-binrw/actions/workflows/build.yml)
4
+
5
+ ## 開発状況
6
+ - [x] 書き込み
7
+ - [x] 複数のファイル書き込み
8
+ - 対応型
9
+ - [x] 倍精度浮動小数点数
10
+ - [x] 単精度浮動小数点
11
+ - [x] 32 Bit 整数
12
+ - [x] 64 Bit 整数
13
+ - [x] 読み込み
14
+ - [x] 複数のファイルから読み込み
15
+ - 対応型
16
+ - [x] 倍精度浮動小数点数
17
+ - [x] 単精度浮動小数点
18
+ - [x] 32 Bit 整数
19
+ - [x] 64 Bit 整数
20
+
21
+ ## 使用法
22
+ ```rb
23
+ require "numo/binrw"
24
+
25
+ # 書き込み (例: 倍精度浮動小数点数)
26
+ a = Numo::DFloat.cast(0...100)
27
+ a.bin_write("dfdata.bin")
28
+
29
+ # 他の型で書き込み (例: 単精度浮動小数点)
30
+ b = Numo::SFloat.cast(0...100)
31
+ b.bin_write("fdata.bin")
32
+
33
+ # 複数ファイルに書き込み
34
+ c = Numo::Int32.cast(0...100).reshape(4, true)
35
+ c.bin_write(["idata01.bin", "idata02.bin", "idata03.bin", "idata04.bin"])
36
+
37
+ # 読み込み
38
+ d = Numo::Int32.bin_read("idata01.bin")
39
+ p d
40
+
41
+ ## 複数ファイルから読み込み
42
+ e = Numo::Int32.bin_read(["idata01.bin", "idata02.bin", "idata03.bin", "idata04.bin"])
43
+ p e
44
+ ```
45
+
46
+ ## To do
47
+ - rubygems に公開
48
+
49
+ ## インストール
50
+ ```sh
51
+ git clone https://github.com/Himeyama/numo-binrw.git
52
+ cd numo-binrw
53
+ rake install
54
+ ```
data/Rakefile ADDED
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "bundler/gem_tasks"
4
+ task default: %i[]
5
+
6
+
7
+ require "rake/extensiontask"
8
+ Rake::ExtensionTask.new "numo/binrw" do |ext|
9
+ ext.lib_dir = "ext"
10
+ end
11
+
12
+ require "rake/testtask"
13
+ Rake::TestTask.new :test do |t|
14
+ t.libs << "test"
15
+ t.libs << "lib"
16
+ t.verbose = true
17
+ t.test_files = FileList["test/*.rb"]
18
+ end
data/bin/console ADDED
@@ -0,0 +1,15 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ require "bundler/setup"
5
+ require "numo/binrw"
6
+
7
+ # You can add fixtures and/or initialization code here to make experimenting
8
+ # with your gem easier. You can also use a different console, if you like.
9
+
10
+ # (If you use this, don't forget to add pry to your Gemfile!)
11
+ # require "pry"
12
+ # Pry.start
13
+
14
+ require "irb"
15
+ IRB.start(__FILE__)
data/bin/setup ADDED
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+ IFS=$'\n\t'
4
+ set -vx
5
+
6
+ bundle install
7
+
8
+ # Do any other automated setup that you need to do here
data/ext/.gitignore ADDED
@@ -0,0 +1,2 @@
1
+ *.so
2
+ *.o
@@ -0,0 +1,22 @@
1
+ #include <stdio.h>
2
+ #include <ruby.h>
3
+ #include <numo/narray.h>
4
+ #include "lib.h"
5
+ #include "read.h"
6
+ #include "write.h"
7
+
8
+ extern VALUE numo_cDFloat;
9
+ extern VALUE numo_cSFloat;
10
+ extern VALUE numo_cInt32;
11
+ extern VALUE numo_cInt64;
12
+ extern VALUE rb_mNumo;
13
+
14
+
15
+ VALUE rb_cBinrw;
16
+
17
+ void Init_binrw(void){
18
+ rb_cBinrw = rb_define_module_under(rb_mNumo, "Binrw");
19
+ rb_define_module_function(rb_cBinrw, "_bin_write", nrw_bin_write, 2);
20
+
21
+ rb_define_module_function(rb_cBinrw, "_bin_read", nrw_bin_read, 2);
22
+ }
@@ -0,0 +1,7 @@
1
+ require "mkmf"
2
+
3
+ narray_dir = Gem.find_files("numo").map{|e| e.include?("narray") ? e : false}.select{|e| e}.to_a[0]
4
+ dir_config('narray', narray_dir, narray_dir)
5
+ have_library("narray")
6
+
7
+ create_makefile "numo/binrw"
@@ -0,0 +1,8 @@
1
+ #include <sys/stat.h>
2
+
3
+ long fsize(const char* filename){
4
+ struct stat s;
5
+ if(stat(filename, &s) == 0)
6
+ return s.st_size;
7
+ return -1;
8
+ }
@@ -0,0 +1,6 @@
1
+ #ifndef LIB_H
2
+ #define LIB_H
3
+
4
+ long fsize(const char* filename);
5
+
6
+ #endif
@@ -0,0 +1,54 @@
1
+ #include <ruby.h>
2
+ #include <numo/narray.h>
3
+
4
+ #define rb_is_a(obj, cls) (rb_funcall(obj, rb_intern("is_a?"), 1, cls) == Qtrue)
5
+
6
+
7
+ struct bin_read_arg_ret{
8
+ const char* filename;
9
+ void *data;
10
+ long size;
11
+ int ssize;
12
+ bool r;
13
+ };
14
+
15
+ void bin_read(struct bin_read_arg_ret* st){
16
+ FILE* fp = fopen(st->filename, "r");
17
+ if(fp){
18
+ long size;
19
+ size = fread(st->data, st->ssize, st->size, fp);
20
+ if(size != st->size){
21
+ st->r = false;
22
+ return;
23
+ }
24
+ fclose(fp);
25
+ }else{
26
+ st->r = false;
27
+ return;
28
+ }
29
+ st->r = true;
30
+ }
31
+
32
+ VALUE nrw_bin_read(VALUE self, VALUE cls, VALUE filename){
33
+ long size = NUM2LONG(rb_funcall(rb_funcall(rb_cFile, rb_intern("stat"), 1, filename), rb_intern("size"), 0));
34
+ struct bin_read_arg_ret st;
35
+ int ssize;
36
+ if(cls == numo_cDFloat){
37
+ ssize = 8;
38
+ }else if(cls == numo_cSFloat){
39
+ ssize = 4;
40
+ }else if(cls == numo_cInt32){
41
+ ssize = 4;
42
+ }else if(cls == numo_cInt64){
43
+ ssize = 8;
44
+ }else{
45
+ return Qfalse; // 非対応クラス
46
+ }
47
+ VALUE na = rb_funcall(cls, rb_intern("zeros"), 1, LONG2NUM(size / ssize));
48
+ st.data = na_get_pointer(na);
49
+ st.filename = StringValuePtr(filename);
50
+ st.size = size;
51
+ st.ssize = ssize;
52
+ bin_read(&st);
53
+ return na;
54
+ }
@@ -0,0 +1,6 @@
1
+ #ifndef READ_H
2
+ #define READ_H
3
+
4
+ VALUE nrw_bin_read();
5
+
6
+ #endif
@@ -0,0 +1,80 @@
1
+ #include <stdbool.h>
2
+ #include <ruby.h>
3
+ #include <numo/narray.h>
4
+
5
+ #define rb_is_a(obj, cls) (rb_funcall(obj, rb_intern("is_a?"), 1, cls) == Qtrue)
6
+
7
+ struct bin_write_arg_ret{
8
+ const char* filename;
9
+ void *data;
10
+ long size;
11
+ int ssize;
12
+ bool r;
13
+ };
14
+
15
+ void bin_write(struct bin_write_arg_ret* st){
16
+ FILE* fp = fopen(st->filename, "w");
17
+ if(fp){
18
+ fwrite(st->data, st->ssize, st->size, fp);
19
+ fclose(fp);
20
+ }else{
21
+ st->r = false;
22
+ return;
23
+ }
24
+ st->r = true;
25
+ }
26
+
27
+
28
+ VALUE nrw_bin_write(VALUE self, VALUE obj, VALUE filename){
29
+ char* cfilename;
30
+ void* data = na_get_pointer(obj);
31
+ long size = NUM2LONG(rb_funcall(obj, rb_intern("size"), 0));
32
+
33
+ if(rb_is_a(filename, rb_cArray)){
34
+ long row = NUM2LONG(rb_funcall(filename, rb_intern("size"), 0));
35
+ long col = size / row;
36
+ struct bin_write_arg_ret st[row];
37
+ for(long i = 0; i < row; i++){
38
+ VALUE file = rb_ary_entry(filename, i);
39
+ cfilename = StringValuePtr(file);
40
+ st[i].filename = cfilename;
41
+ st[i].size = col;
42
+ if(rb_is_a(obj, numo_cDFloat)){
43
+ st[i].data = (double*)data + col * i;
44
+ st[i].ssize = 8;
45
+ }else if(rb_is_a(obj, numo_cSFloat)){
46
+ st[i].data = (float*)data + col * i;
47
+ st[i].ssize = 4;
48
+ }else if(rb_is_a(obj, numo_cInt32)){
49
+ st[i].data = (int32_t*)data + col * i;
50
+ st[i].ssize = 4;
51
+ }else if(rb_is_a(obj, numo_cInt64)){
52
+ st[i].data = (int64_t*)data + col * i;
53
+ st[i].ssize = 8;
54
+ }else{
55
+ return Qfalse; // 未対応クラス
56
+ }
57
+ bin_write(st + i);
58
+ }
59
+ }else if(rb_is_a(filename, rb_cString)){
60
+ cfilename = StringValuePtr(filename);
61
+ struct bin_write_arg_ret st;
62
+ st.filename = cfilename;
63
+ st.size = size;
64
+ st.data = data;
65
+ if(rb_is_a(obj, numo_cDFloat)){
66
+ st.ssize = 8;
67
+ }else if(rb_is_a(obj, numo_cSFloat)){
68
+ st.ssize = 4;
69
+ }else if(rb_is_a(obj, numo_cInt32)){
70
+ st.ssize = 4;
71
+ }else if(rb_is_a(obj, numo_cInt64)){
72
+ st.ssize = 8;
73
+ }else{
74
+ return Qfalse; // 未対応クラス
75
+ }
76
+ bin_write(&st);
77
+ }
78
+
79
+ return obj;
80
+ }
@@ -0,0 +1,6 @@
1
+ #ifndef WRITE_H
2
+ #define WRITE_H
3
+
4
+ VALUE nrw_bin_write(VALUE self, VALUE obj, VALUE filename);
5
+
6
+ #endif
data/lib/numo/binrw.rb ADDED
@@ -0,0 +1,95 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "binrw/version"
4
+
5
+ require "numo/narray"
6
+ require "numo/binrw.so"
7
+
8
+ module Numo
9
+ module Binrw
10
+ class Error < StandardError; end
11
+
12
+ def self.bin_write(obj, filename)
13
+ if filename.is_a? Array
14
+ if obj.ndim != 2
15
+ # 複数行う場合は行列
16
+ raise "If multiple files are specified, it must be a matrix"
17
+ end
18
+ if obj.shape[0] != filename.size
19
+ # ファイル数と行数は同じ
20
+ raise "If multiple files are specified, the number of files and the number of lines must be the same"
21
+ end
22
+ elsif filename.is_a? String
23
+ else
24
+ raise
25
+ end
26
+
27
+ Numo::Binrw._bin_write(obj, filename)
28
+ obj
29
+ end
30
+
31
+ def self.bin_read(cls, filename)
32
+ if filename.is_a? Array
33
+ unless filename.map{|file| File.stat(file).size}.uniq.size == 1
34
+ raise "The size of all data must be the same"
35
+ end
36
+ row = filename.size
37
+ size = File.stat(filename[0]).size
38
+ if cls == DFloat || cls == Int64
39
+ col = size / 8
40
+ elsif cls == SFloat || cls == Int32
41
+ col = size / 4
42
+ else
43
+ raise "Unsupported class"
44
+ end
45
+ a = cls.zeros(row, col)
46
+ filename.each.with_index do |file, i|
47
+ a[i, true] = bin_read(cls, file)
48
+ end
49
+ return a
50
+ end
51
+
52
+ Numo::Binrw._bin_read(cls, filename)
53
+ end
54
+ end
55
+
56
+ class DFloat
57
+ def bin_write(filename)
58
+ Numo::Binrw.bin_write(self, filename)
59
+ end
60
+
61
+ def self.bin_read(filename)
62
+ Numo::Binrw.bin_read(self, filename)
63
+ end
64
+ end
65
+
66
+ class SFloat
67
+ def bin_write(filename)
68
+ Numo::Binrw.bin_write(self, filename)
69
+ end
70
+
71
+ def self.bin_read(filename)
72
+ Numo::Binrw.bin_read(self, filename)
73
+ end
74
+ end
75
+
76
+ class Int32
77
+ def bin_write(filename)
78
+ Numo::Binrw.bin_write(self, filename)
79
+ end
80
+
81
+ def self.bin_read(filename)
82
+ Numo::Binrw.bin_read(self, filename)
83
+ end
84
+ end
85
+
86
+ class Int64
87
+ def bin_write(filename)
88
+ Numo::Binrw.bin_write(self, filename)
89
+ end
90
+
91
+ def self.bin_read(filename)
92
+ Numo::Binrw.bin_read(self, filename)
93
+ end
94
+ end
95
+ end
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Numo
4
+ module Binrw
5
+ VERSION = "0.1.0"
6
+ end
7
+ end
@@ -0,0 +1,28 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "lib/numo/binrw/version"
4
+
5
+ Gem::Specification.new do |spec|
6
+ spec.name = "numo-binrw"
7
+ spec.version = Numo::Binrw::VERSION
8
+ spec.authors = ["Murata Mitsuharu"]
9
+ spec.email = ["hikari.photon+mygit@gmail.com"]
10
+
11
+ spec.summary = "Read binary files and handle them with `NArray`."
12
+ spec.description = "Read binary files and handle them with `NArray`."
13
+ spec.homepage = "https://github.com/himeyama/numo-binrw"
14
+ spec.license = "MIT"
15
+ spec.required_ruby_version = ">= 2.4.0"
16
+
17
+ spec.files = Dir.chdir(File.expand_path(__dir__)) do
18
+ `git ls-files -z`.split("\x0").reject { |f| f.match(%r{\A(?:test|spec|features)/}) }
19
+ end
20
+ spec.bindir = "exe"
21
+ spec.executables = spec.files.grep(%r{\Aexe/}) { |f| File.basename(f) }
22
+ spec.require_paths = ["lib", "ext"]
23
+ spec.extensions = ["ext/numo/binrw/extconf.rb"]
24
+
25
+ spec.add_development_dependency "rake", ">= 12.3.3"
26
+ spec.add_development_dependency "rake-compiler", "~> 1.1.1"
27
+ spec.add_development_dependency "numo-narray", "~> 0.9.2.0"
28
+ end
metadata ADDED
@@ -0,0 +1,108 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: numo-binrw
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Murata Mitsuharu
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2021-07-29 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rake
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: 12.3.3
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: 12.3.3
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake-compiler
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: 1.1.1
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: 1.1.1
41
+ - !ruby/object:Gem::Dependency
42
+ name: numo-narray
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: 0.9.2.0
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: 0.9.2.0
55
+ description: Read binary files and handle them with `NArray`.
56
+ email:
57
+ - hikari.photon+mygit@gmail.com
58
+ executables: []
59
+ extensions:
60
+ - ext/numo/binrw/extconf.rb
61
+ extra_rdoc_files: []
62
+ files:
63
+ - ".github/workflows/build.yml"
64
+ - ".gitignore"
65
+ - Gemfile
66
+ - Gemfile.lock
67
+ - LICENSE
68
+ - README.md
69
+ - Rakefile
70
+ - bin/console
71
+ - bin/setup
72
+ - ext/.gitignore
73
+ - ext/numo/binrw/binrw.c
74
+ - ext/numo/binrw/extconf.rb
75
+ - ext/numo/binrw/lib.c
76
+ - ext/numo/binrw/lib.h
77
+ - ext/numo/binrw/read.c
78
+ - ext/numo/binrw/read.h
79
+ - ext/numo/binrw/write.c
80
+ - ext/numo/binrw/write.h
81
+ - lib/numo/binrw.rb
82
+ - lib/numo/binrw/version.rb
83
+ - numo-binrw.gemspec
84
+ homepage: https://github.com/himeyama/numo-binrw
85
+ licenses:
86
+ - MIT
87
+ metadata: {}
88
+ post_install_message:
89
+ rdoc_options: []
90
+ require_paths:
91
+ - lib
92
+ - ext
93
+ required_ruby_version: !ruby/object:Gem::Requirement
94
+ requirements:
95
+ - - ">="
96
+ - !ruby/object:Gem::Version
97
+ version: 2.4.0
98
+ required_rubygems_version: !ruby/object:Gem::Requirement
99
+ requirements:
100
+ - - ">="
101
+ - !ruby/object:Gem::Version
102
+ version: '0'
103
+ requirements: []
104
+ rubygems_version: 3.2.22
105
+ signing_key:
106
+ specification_version: 4
107
+ summary: Read binary files and handle them with `NArray`.
108
+ test_files: []