carray 1.3.7 → 1.4.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (78) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +0 -7
  3. data/Rakefile +31 -0
  4. data/carray.gemspec +9 -14
  5. data/carray.h +4 -0
  6. data/carray_access.c +50 -8
  7. data/carray_conversion.c +3 -3
  8. data/carray_generate.c +67 -1
  9. data/carray_math.rb +22 -22
  10. data/carray_operator.c +23 -0
  11. data/devel/im2col.rb +17 -0
  12. data/lib/carray.rb +32 -1
  13. data/lib/carray/autoload/autoload_base.rb +0 -4
  14. data/lib/carray/autoload/autoload_gem_cairo.rb +9 -0
  15. data/lib/carray/autoload/autoload_gem_ffi.rb +9 -0
  16. data/lib/carray/autoload/autoload_gem_gnuplot.rb +2 -0
  17. data/lib/carray/autoload/autoload_gem_io_csv.rb +14 -0
  18. data/lib/carray/autoload/autoload_gem_io_pg.rb +6 -0
  19. data/lib/carray/autoload/autoload_gem_io_sqlite3.rb +12 -0
  20. data/lib/carray/autoload/autoload_gem_narray.rb +10 -0
  21. data/lib/carray/autoload/autoload_gem_numo_narray.rb +14 -0
  22. data/lib/carray/autoload/autoload_gem_opencv.rb +16 -0
  23. data/lib/carray/autoload/autoload_gem_rmagick.rb +23 -0
  24. data/lib/carray/autoload/{autoload_graphics_zimg.rb → autoload_gem_zimg.rb} +0 -0
  25. data/lib/carray/base/autoload.rb +47 -5
  26. data/lib/carray/base/basic.rb +58 -2
  27. data/lib/carray/base/math.rb +1 -1
  28. data/lib/carray/base/string.rb +242 -0
  29. data/mkmath.rb +12 -2
  30. data/version.h +5 -5
  31. metadata +29 -109
  32. data/Gemfile +0 -8
  33. data/Gemfile.lock +0 -33
  34. data/ext/calculus/lib/autoload/autoload_math_calculus.rb +0 -2
  35. data/ext/fortio/extconf.rb +0 -3
  36. data/ext/fortio/lib/carray/autoload/autoload_fortran_format.rb +0 -5
  37. data/ext/fortio/lib/carray/io/fortran_format.rb +0 -43
  38. data/ext/fortio/lib/fortio.rb +0 -3
  39. data/ext/fortio/lib/fortio/fortran_format.rb +0 -605
  40. data/ext/fortio/lib/fortio/fortran_format.tab.rb +0 -536
  41. data/ext/fortio/lib/fortio/fortran_format.y +0 -215
  42. data/ext/fortio/lib/fortio/fortran_namelist.rb +0 -151
  43. data/ext/fortio/lib/fortio/fortran_namelist.tab.rb +0 -470
  44. data/ext/fortio/lib/fortio/fortran_namelist.y +0 -213
  45. data/ext/fortio/lib/fortio/fortran_sequential.rb +0 -345
  46. data/ext/fortio/ruby_fortio.c +0 -182
  47. data/ext/fortio/test/test_H.rb +0 -5
  48. data/ext/fortio/test/test_T.rb +0 -7
  49. data/ext/fortio/test/test_fortran_format.rb +0 -86
  50. data/ext/fortio/test/test_namelist.rb +0 -25
  51. data/ext/fortio/test/test_namelist_write.rb +0 -10
  52. data/ext/fortio/test/test_sequential.rb +0 -13
  53. data/ext/fortio/test/test_sequential2.rb +0 -13
  54. data/ext/fortio/work/test.rb +0 -10
  55. data/ext/fortio/work/test_e.rb +0 -19
  56. data/ext/fortio/work/test_ep.rb +0 -10
  57. data/ext/fortio/work/test_parse.rb +0 -12
  58. data/ext/mathfunc/lib/autoload/autoload_math_mathfunc.rb +0 -1
  59. data/ext/mathfunc/lib/math/mathfunc.rb +0 -15
  60. data/ext/narray/README +0 -22
  61. data/ext/narray/ca_wrap_narray.c +0 -500
  62. data/ext/narray/carray_narray.c +0 -21
  63. data/ext/narray/extconf.rb +0 -57
  64. data/ext/narray/lib/autoload/autoload_math_narray.rb +0 -1
  65. data/ext/narray/lib/autoload/autoload_math_narray_miss.rb +0 -11
  66. data/ext/narray/lib/math/narray.rb +0 -17
  67. data/ext/narray/lib/math/narray_miss.rb +0 -45
  68. data/lib/carray/autoload/autoload_graphics_gnuplot.rb +0 -2
  69. data/lib/carray/autoload/autoload_io_csv.rb +0 -14
  70. data/lib/carray/autoload/autoload_io_numo.rb +0 -9
  71. data/lib/carray/autoload/autoload_io_pg.rb +0 -6
  72. data/lib/carray/autoload/autoload_io_sqlite3.rb +0 -12
  73. data/lib/carray/graphics/gnuplot.rb +0 -2141
  74. data/lib/carray/graphics/zimg.rb +0 -296
  75. data/lib/carray/io/csv.rb +0 -572
  76. data/lib/carray/io/numo.rb +0 -52
  77. data/lib/carray/io/pg.rb +0 -101
  78. data/lib/carray/io/sqlite3.rb +0 -215
data/mkmath.rb CHANGED
@@ -289,7 +289,12 @@ ca_binop_#{name}_#{type} (ca_size_t n, boolean8_t *m, char *ptr1, ca_size_t i1,
289
289
  io.puts
290
290
  io.print %{
291
291
  static VALUE rb_ca_#{name} (VALUE self, VALUE other)
292
- { return rb_ca_call_binop(self, other, ca_binop_#{name}); }
292
+ {
293
+ if ( ! rb_ca_test_castable(other) ) {
294
+ return rb_ca_binop_pass_to_other(self, other, rb_intern("#{op}"));
295
+ }
296
+ return rb_ca_call_binop(self, other, ca_binop_#{name});
297
+ }
293
298
  static VALUE rb_ca_#{name}_bang (VALUE self, VALUE other)
294
299
  { return rb_ca_call_binop_bang(self, other, ca_binop_#{name}); }
295
300
  }
@@ -529,7 +534,12 @@ ca_bincmp_#{name}_#{type} (ca_size_t n, boolean8_t *m,
529
534
  io.puts
530
535
  io.print %{
531
536
  static VALUE rb_ca_#{name} (VALUE self, VALUE other)
532
- { return rb_ca_call_bincmp(self, other, ca_bincmp_#{name}); }
537
+ {
538
+ if ( ! rb_ca_test_castable(other) ) {
539
+ return rb_ca_binop_pass_to_other(self, other, rb_intern("#{op}"));
540
+ }
541
+ return rb_ca_call_bincmp(self, other, ca_bincmp_#{name});
542
+ }
533
543
  }
534
544
  DEFINITIONS << io.string
535
545
  if op
data/version.h CHANGED
@@ -10,9 +10,9 @@
10
10
 
11
11
  ---------------------------------------------------------------------------- */
12
12
 
13
- #define CA_VERSION "1.3.7"
14
- #define CA_VERSION_CODE 137
13
+ #define CA_VERSION "1.4.0"
14
+ #define CA_VERSION_CODE 140
15
15
  #define CA_VERSION_MAJOR 1
16
- #define CA_VERSION_MINOR 3
17
- #define CA_VERSION_TEENY 7
18
- #define CA_VERSION_DATE "2020/04/07"
16
+ #define CA_VERSION_MINOR 4
17
+ #define CA_VERSION_TEENY 0
18
+ #define CA_VERSION_DATE "2020/06/15"
metadata CHANGED
@@ -1,57 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: carray
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.7
4
+ version: 1.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Hiroki Motoyoshi
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-04-07 00:00:00.000000000 Z
12
- dependencies:
13
- - !ruby/object:Gem::Dependency
14
- name: narray
15
- requirement: !ruby/object:Gem::Requirement
16
- requirements:
17
- - - "~>"
18
- - !ruby/object:Gem::Version
19
- version: 0.6.1.1
20
- type: :runtime
21
- prerelease: false
22
- version_requirements: !ruby/object:Gem::Requirement
23
- requirements:
24
- - - "~>"
25
- - !ruby/object:Gem::Version
26
- version: 0.6.1.1
27
- - !ruby/object:Gem::Dependency
28
- name: narray_miss
29
- requirement: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - "~>"
32
- - !ruby/object:Gem::Version
33
- version: '1.3'
34
- type: :runtime
35
- prerelease: false
36
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - "~>"
39
- - !ruby/object:Gem::Version
40
- version: '1.3'
41
- - !ruby/object:Gem::Dependency
42
- name: sqlite3
43
- requirement: !ruby/object:Gem::Requirement
44
- requirements:
45
- - - "~>"
46
- - !ruby/object:Gem::Version
47
- version: '1.3'
48
- type: :runtime
49
- prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - "~>"
53
- - !ruby/object:Gem::Version
54
- version: '1.3'
11
+ date: 2020-06-15 00:00:00.000000000 Z
12
+ dependencies: []
55
13
  description: |2
56
14
  CArray is a uniform multi-dimensional rectangular array class.
57
15
  It provides the various types of sub-arrays and references
@@ -61,16 +19,12 @@ email: ''
61
19
  executables: []
62
20
  extensions:
63
21
  - extconf.rb
64
- - ext/narray/extconf.rb
65
22
  - ext/mathfunc/extconf.rb
66
- - ext/fortio/extconf.rb
67
23
  - ext/calculus/extconf.rb
68
24
  extra_rdoc_files: []
69
25
  files:
70
26
  - COPYING
71
27
  - GPL
72
- - Gemfile
73
- - Gemfile.lock
74
28
  - LEGAL
75
29
  - NOTE
76
30
  - README.md
@@ -125,61 +79,33 @@ files:
125
79
  - carray_undef.c
126
80
  - carray_utils.c
127
81
  - devel/guess_shape.rb
82
+ - devel/im2col.rb
128
83
  - ext/calculus/carray_calculus.c
129
84
  - ext/calculus/carray_interp.c
130
85
  - ext/calculus/extconf.rb
131
- - ext/calculus/lib/autoload/autoload_math_calculus.rb
132
86
  - ext/calculus/lib/math/calculus.rb
133
87
  - ext/calculus/lib/math/interp/adapter_interp1d.rb
134
- - ext/fortio/extconf.rb
135
- - ext/fortio/lib/carray/autoload/autoload_fortran_format.rb
136
- - ext/fortio/lib/carray/io/fortran_format.rb
137
- - ext/fortio/lib/fortio.rb
138
- - ext/fortio/lib/fortio/fortran_format.rb
139
- - ext/fortio/lib/fortio/fortran_format.tab.rb
140
- - ext/fortio/lib/fortio/fortran_format.y
141
- - ext/fortio/lib/fortio/fortran_namelist.rb
142
- - ext/fortio/lib/fortio/fortran_namelist.tab.rb
143
- - ext/fortio/lib/fortio/fortran_namelist.y
144
- - ext/fortio/lib/fortio/fortran_sequential.rb
145
- - ext/fortio/ruby_fortio.c
146
- - ext/fortio/test/test_H.rb
147
- - ext/fortio/test/test_T.rb
148
- - ext/fortio/test/test_fortran_format.rb
149
- - ext/fortio/test/test_namelist.rb
150
- - ext/fortio/test/test_namelist_write.rb
151
- - ext/fortio/test/test_sequential.rb
152
- - ext/fortio/test/test_sequential2.rb
153
- - ext/fortio/work/test.rb
154
- - ext/fortio/work/test_e.rb
155
- - ext/fortio/work/test_ep.rb
156
- - ext/fortio/work/test_parse.rb
157
88
  - ext/mathfunc/carray_mathfunc.c
158
89
  - ext/mathfunc/extconf.rb
159
- - ext/mathfunc/lib/autoload/autoload_math_mathfunc.rb
160
- - ext/mathfunc/lib/math/mathfunc.rb
161
90
  - ext/mathfunc/test/test_hypot.rb
162
91
  - ext/mathfunc/test/test_j0.rb
163
92
  - ext/mathfunc/test/test_jn.rb
164
93
  - ext/mathfunc/test/test_sph.rb
165
- - ext/narray/README
166
- - ext/narray/ca_wrap_narray.c
167
- - ext/narray/carray_narray.c
168
- - ext/narray/extconf.rb
169
- - ext/narray/lib/autoload/autoload_math_narray.rb
170
- - ext/narray/lib/autoload/autoload_math_narray_miss.rb
171
- - ext/narray/lib/math/narray.rb
172
- - ext/narray/lib/math/narray_miss.rb
173
94
  - extconf.rb
174
95
  - lib/carray.rb
175
96
  - lib/carray/autoload/autoload_base.rb
176
- - lib/carray/autoload/autoload_graphics_gnuplot.rb
177
- - lib/carray/autoload/autoload_graphics_zimg.rb
178
- - lib/carray/autoload/autoload_io_csv.rb
97
+ - lib/carray/autoload/autoload_gem_cairo.rb
98
+ - lib/carray/autoload/autoload_gem_ffi.rb
99
+ - lib/carray/autoload/autoload_gem_gnuplot.rb
100
+ - lib/carray/autoload/autoload_gem_io_csv.rb
101
+ - lib/carray/autoload/autoload_gem_io_pg.rb
102
+ - lib/carray/autoload/autoload_gem_io_sqlite3.rb
103
+ - lib/carray/autoload/autoload_gem_narray.rb
104
+ - lib/carray/autoload/autoload_gem_numo_narray.rb
105
+ - lib/carray/autoload/autoload_gem_opencv.rb
106
+ - lib/carray/autoload/autoload_gem_rmagick.rb
107
+ - lib/carray/autoload/autoload_gem_zimg.rb
179
108
  - lib/carray/autoload/autoload_io_imagemagick.rb
180
- - lib/carray/autoload/autoload_io_numo.rb
181
- - lib/carray/autoload/autoload_io_pg.rb
182
- - lib/carray/autoload/autoload_io_sqlite3.rb
183
109
  - lib/carray/autoload/autoload_io_table.rb
184
110
  - lib/carray/autoload/autoload_math_histogram.rb
185
111
  - lib/carray/autoload/autoload_math_interp.rb
@@ -194,15 +120,10 @@ files:
194
120
  - lib/carray/base/math.rb
195
121
  - lib/carray/base/obsolete.rb
196
122
  - lib/carray/base/serialize.rb
123
+ - lib/carray/base/string.rb
197
124
  - lib/carray/base/struct.rb
198
- - lib/carray/graphics/gnuplot.rb
199
- - lib/carray/graphics/zimg.rb
200
125
  - lib/carray/info.rb
201
- - lib/carray/io/csv.rb
202
126
  - lib/carray/io/imagemagick.rb
203
- - lib/carray/io/numo.rb
204
- - lib/carray/io/pg.rb
205
- - lib/carray/io/sqlite3.rb
206
127
  - lib/carray/io/table.rb
207
128
  - lib/carray/math/histogram.rb
208
129
  - lib/carray/math/interp.rb
@@ -296,11 +217,7 @@ rdoc_options:
296
217
  - rdoc_stat.rb
297
218
  - lib/carray/info.rb
298
219
  - lib/carray/io/table.rb
299
- - lib/carray/io/sqlite3.rb
300
- - lib/carray/io/csv.rb
301
- - lib/carray/io/numo.rb
302
220
  - lib/carray/io/imagemagick.rb
303
- - lib/carray/io/pg.rb
304
221
  - lib/carray/math/interp.rb
305
222
  - lib/carray/math/interp/adapter_gsl_spline.rb
306
223
  - lib/carray/math/histogram.rb
@@ -309,24 +226,28 @@ rdoc_options:
309
226
  - lib/carray/object/ca_obj_pack.rb
310
227
  - lib/carray/object/ca_obj_link.rb
311
228
  - lib/carray/autoload/autoload_io_table.rb
229
+ - lib/carray/autoload/autoload_gem_narray.rb
312
230
  - lib/carray/autoload/autoload_math_histogram.rb
313
- - lib/carray/autoload/autoload_io_csv.rb
314
- - lib/carray/autoload/autoload_io_pg.rb
315
231
  - lib/carray/autoload/autoload_math_interp.rb
316
232
  - lib/carray/autoload/autoload_io_imagemagick.rb
317
- - lib/carray/autoload/autoload_io_numo.rb
233
+ - lib/carray/autoload/autoload_gem_cairo.rb
234
+ - lib/carray/autoload/autoload_gem_numo_narray.rb
235
+ - lib/carray/autoload/autoload_gem_zimg.rb
318
236
  - lib/carray/autoload/autoload_math_recurrence.rb
319
- - lib/carray/autoload/autoload_io_sqlite3.rb
320
- - lib/carray/autoload/autoload_graphics_zimg.rb
321
- - lib/carray/autoload/autoload_graphics_gnuplot.rb
237
+ - lib/carray/autoload/autoload_gem_io_pg.rb
238
+ - lib/carray/autoload/autoload_gem_ffi.rb
239
+ - lib/carray/autoload/autoload_gem_gnuplot.rb
240
+ - lib/carray/autoload/autoload_gem_opencv.rb
241
+ - lib/carray/autoload/autoload_gem_io_sqlite3.rb
242
+ - lib/carray/autoload/autoload_gem_io_csv.rb
243
+ - lib/carray/autoload/autoload_gem_rmagick.rb
322
244
  - lib/carray/autoload/autoload_base.rb
323
245
  - lib/carray/autoload/autoload_object_link.rb
324
246
  - lib/carray/autoload/autoload_object_pack.rb
325
247
  - lib/carray/autoload/autoload_object_iterator.rb
326
248
  - lib/carray/mkmf.rb
327
- - lib/carray/graphics/gnuplot.rb
328
- - lib/carray/graphics/zimg.rb
329
249
  - lib/carray/base/struct.rb
250
+ - lib/carray/base/string.rb
330
251
  - lib/carray/base/math.rb
331
252
  - lib/carray/base/inspect.rb
332
253
  - lib/carray/base/iterator.rb
@@ -347,8 +268,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
347
268
  - !ruby/object:Gem::Version
348
269
  version: '0'
349
270
  requirements: []
350
- rubyforge_project:
351
- rubygems_version: 2.7.7
271
+ rubygems_version: 3.0.3
352
272
  signing_key:
353
273
  specification_version: 4
354
274
  summary: Multi-dimesional array class
data/Gemfile DELETED
@@ -1,8 +0,0 @@
1
- # A sample Gemfile
2
- source "https://rubygems.org"
3
-
4
- # gem "rails"
5
- gem "narray"
6
- gem "narray_miss"
7
- gem "spreadsheet"
8
- gem "sqlite3"
@@ -1,33 +0,0 @@
1
- GEM
2
- remote: https://rubygems.org/
3
- specs:
4
- axlsx (2.0.1)
5
- htmlentities (~> 4.3.1)
6
- nokogiri (>= 1.4.1)
7
- rubyzip (~> 1.0.0)
8
- htmlentities (4.3.4)
9
- mini_portile2 (2.0.0)
10
- narray (0.6.1.2)
11
- narray_miss (1.3.0)
12
- numru-narray
13
- nokogiri (1.6.7.2)
14
- mini_portile2 (~> 2.0.0.rc2)
15
- numru-narray (1.0.3)
16
- ruby-ole (1.2.12)
17
- rubyzip (1.0.0)
18
- spreadsheet (1.1.2)
19
- ruby-ole (>= 1.0)
20
- sqlite3 (1.3.11)
21
-
22
- PLATFORMS
23
- ruby
24
-
25
- DEPENDENCIES
26
- axlsx
27
- narray
28
- narray_miss
29
- spreadsheet
30
- sqlite3
31
-
32
- BUNDLED WITH
33
- 1.11.2
@@ -1,2 +0,0 @@
1
- require "carray/carray_calculus"
2
- require "carray/math/calculus"
@@ -1,3 +0,0 @@
1
- require "mkmf"
2
-
3
- create_makefile("fortio_ext")
@@ -1,5 +0,0 @@
1
-
2
- class CArray
3
- autoload_method "self.from_fortran_format", "carray/io/fortran_format"
4
- autoload_method "to_fortran_format", "carray/io/fortran_format"
5
- end
@@ -1,43 +0,0 @@
1
- require "fortio"
2
-
3
- class CArray
4
-
5
- def self.from_fortran_format (fmt, io)
6
- case io
7
- when String
8
- io = StringIO.new(io)
9
- end
10
- case fmt
11
- when String
12
- fmt = FortranFormat.new(fmt)
13
- end
14
- data = []
15
- begin
16
- data << fmt.read(io)
17
- end until io.eof?
18
- return data.to_ca
19
- end
20
-
21
- def to_fortran_format (fmt, input="")
22
- case input
23
- when String
24
- io = StringIO.new(input)
25
- else
26
- io = input
27
- end
28
- case fmt
29
- when String
30
- fmt = FortranFormat.new(fmt)
31
- end
32
- n = fmt.count_args
33
- attach {
34
- self[nil].blocks(0...n).each do |blk|
35
- fmt.write(io, *blk.to_a)
36
- end
37
- }
38
- return input
39
- end
40
-
41
- end
42
-
43
-
@@ -1,3 +0,0 @@
1
- require "fortio/fortran_format"
2
- require "fortio/fortran_namelist"
3
- require "fortio/fortran_sequential"
@@ -1,605 +0,0 @@
1
- # ----------------------------------------------------------------------------
2
- #
3
- # carray/io/fortran_format.rb
4
- #
5
- # This file is part of Ruby/CArray extension library.
6
- # You can redistribute it and/or modify it under the terms of
7
- # the Ruby Licence.
8
- #
9
- # Copyright (C) 2005 Hiroki Motoyoshi
10
- #
11
- # ----------------------------------------------------------------------------
12
- #
13
- # Supported format descriptors
14
- # ----------------------------
15
- # nFw.d : floating point
16
- # nEw.d : floating point
17
- # nDw.d : floating point
18
- # nGw.d : floating point
19
- # nESw.d :
20
- # nEd : exponential
21
- # nIw(.d) : integer
22
- # nLw : logical
23
- # nAw : string
24
- # nX : write n white space or skip reading by n-characters
25
- # Tn : move to n-character from line head
26
- # TLn : move left relative by n-characters
27
- # TRn : move right relative by n-characters
28
- # +P, -P
29
- # S, SP, SS
30
- # BN,BZ
31
- # nH... : hollerith string (e.g. 5Hhello)
32
- # '...', "..." : quoted string
33
- # / : line feed
34
- # $ : surppress line feed
35
- #
36
- # Short methods
37
- # -------------
38
- #
39
- # ### fortran_format(fmt, *vals)
40
- #
41
- # ### fortran_format_write(io, fmt, *vals)
42
- #
43
- # ### fortran_format_read(io, fmt)
44
- #
45
-
46
-
47
- require "fortio_ext"
48
- require "fortio/fortran_format.tab"
49
- require "stringio"
50
-
51
- class FortranFormat
52
-
53
- FORMAT_POOL = Hash.new { |hash, fmt|
54
- hash[fmt] = FortranFormatParser.new.parse(fmt)
55
- }
56
-
57
- def self.reset
58
- FORMAT_POOL.clear
59
- end
60
-
61
- def initialize (fmt)
62
- @format = FORMAT_POOL[fmt]
63
- end
64
-
65
- def write (io, *list)
66
- io ||= ""
67
- buf = StringIO.new()
68
- @format.write_as_root(buf, list)
69
- io << buf.string
70
- return io
71
- end
72
-
73
- def read (io, list = [])
74
- if io.is_a?(String)
75
- io = StringIO.new(io)
76
- end
77
- @format.read_as_root(io, list)
78
- return list
79
- end
80
-
81
- def count_args
82
- return @format.count_args
83
- end
84
-
85
- def inspect
86
- return "<FortranFormat: #{@format.inspect}>"
87
- end
88
-
89
- end
90
-
91
- def FortranFormat.check_length (len, str)
92
- if str.length > len
93
- return "*" * len
94
- else
95
- return str
96
- end
97
- end
98
-
99
- def FortranFormat (fmt)
100
- return FortranFormat.new(fmt)
101
- end
102
-
103
- def fortran_format_write (io, fmt, *data)
104
- if fmt.is_a?(FortranFormat)
105
- return fmt.write(io, *data)
106
- else
107
- return FortranFormat.new(fmt).write(io, *data)
108
- end
109
- end
110
-
111
- def fortran_format_read (io, fmt)
112
- if fmt.is_a?(FortranFormat)
113
- return fmt.read(io)
114
- else
115
- return FortranFormat.new(fmt).read(io)
116
- end
117
- end
118
-
119
- def fortran_format (fmt, *data)
120
- return fortran_format_write(nil, fmt, *data)
121
- end
122
-
123
- class FortranFormatParser
124
-
125
- State = Struct.new(:scale, :sign, :zero, :continue, :pos0, :tab_move)
126
-
127
- Group = Struct.new(:count, :member)
128
- class Group
129
- def write_as_root (io, list)
130
- state = State.new(0, false, false, false, io.pos, false)
131
- write(io, list, state)
132
- if state.continue
133
- if state.tab_move
134
- io.string.gsub!(/\000/, ' ')
135
- end
136
- else
137
- if state.tab_move
138
- io.string.gsub!(/\000/, ' ')
139
- io.seek(0, IO::SEEK_END)
140
- end
141
- io.puts
142
- end
143
- end
144
- def write (io, list, state)
145
- count.times do |i|
146
- member.each do |mem|
147
- mem.write(io, list, state)
148
- end
149
- end
150
- end
151
- def read_as_root (io, list)
152
- state = State.new(0, false, false, false, io.pos, false)
153
- read(io, list, state)
154
- unless state.continue
155
- io.gets
156
- end
157
- end
158
- def read (io, list, state)
159
- count.times do |i|
160
- member.each do |mem|
161
- mem.read(io, list, state)
162
- end
163
- end
164
- end
165
- def count_args
166
- return count*member.inject(0){|s,m| s + m.count_args}
167
- end
168
- def inspect
169
- count_str = count == 1 ? "" : count.to_s
170
- return "#{count_str}(" + member.map{|x| x.inspect}.join(",")+ ')'
171
- end
172
- end
173
-
174
- class Continue
175
- def write (io, list, state)
176
- state.continue = true
177
- end
178
- def read (io, list, state)
179
- state.continue = true
180
- end
181
- def count_args
182
- return 0
183
- end
184
- def inspect
185
- return "$"
186
- end
187
- end
188
-
189
- Flush = Struct.new(:count)
190
- class Flush
191
- def write (io, list, state)
192
- io << "\n" * count
193
- end
194
- def read (io, list, state)
195
- count.times do
196
- io.gets
197
- end
198
- end
199
- def count_args
200
- return count
201
- end
202
- def inspect
203
- count_str = count == 1 ? "" : count.to_s
204
- return "#{count_str}/"
205
- end
206
- end
207
-
208
- NodeS = Struct.new(:text)
209
- class NodeS
210
- def write (io, list, state)
211
- io << text
212
- end
213
- def read (io, list, state)
214
- raise RuntimeError, "constant string for reading"
215
- end
216
- def count_args
217
- return 0
218
- end
219
- def inspect
220
- if text !~ /'/
221
- return "'" + text + "'"
222
- else
223
- return '"' + text.gsub(/"/, '""') + '"'
224
- end
225
- end
226
- end
227
-
228
- NodeT= Struct.new(:n)
229
- class NodeT
230
- def write (io, list, state)
231
- io.pos = state.pos0 + n
232
- state.tab_move = true
233
- end
234
- def read (io, list, state)
235
- io.pos = state.pos0 + n
236
- end
237
- def count_args
238
- return 0
239
- end
240
- def inspect
241
- return "TL#{n}"
242
- end
243
- end
244
-
245
- NodeTL = Struct.new(:n)
246
- class NodeTL
247
- def write (io, list, state)
248
- io.pos -= n
249
- state.tab_move = true
250
- end
251
- def read (io, list, state)
252
- io.pos -= n
253
- end
254
- def count_args
255
- return 0
256
- end
257
- def inspect
258
- return "TL#{n}"
259
- end
260
- end
261
-
262
- NodeTR = Struct.new(:n)
263
- class NodeTR
264
- def write (io, list, state)
265
- io.pos += n
266
- state.tab_move = true
267
- end
268
- def read (io, list, state)
269
- io.pos += n
270
- end
271
- def count_args
272
- return 0
273
- end
274
- def inspect
275
- return "TR#{n}"
276
- end
277
- end
278
-
279
- NodeX = Struct.new(:count)
280
- class NodeX
281
- def write (io, list, state)
282
- io << " " * count
283
- end
284
- def read (io, list, state)
285
- io.read(count)
286
- end
287
- def count_args
288
- return 0
289
- end
290
- def inspect
291
- count_str = count == 1 ? "" : count.to_s
292
- return "#{count_str}X"
293
- end
294
- end
295
-
296
- NodeP = Struct.new(:scale)
297
- class NodeP
298
- def write (io, list, state)
299
- state.scale = scale
300
- end
301
- def read (io, list, state)
302
- state.scale = scale
303
- end
304
- def count_args
305
- return 0
306
- end
307
- def inspect
308
- return "#{scale}P"
309
- end
310
- end
311
-
312
- NodeSp = Struct.new(:sign)
313
- class NodeSp
314
- def write (io, list, state)
315
- state.sign = sign
316
- end
317
- def read (io, list, state)
318
- end
319
- def count_args
320
- return 0
321
- end
322
- def inspect
323
- if sign
324
- return "SP"
325
- else
326
- return "SS"
327
- end
328
- end
329
- end
330
-
331
- NodeB = Struct.new(:zero)
332
- class NodeB
333
- def write (io, list, state)
334
- end
335
- def read (io, list, state)
336
- state.zero = zero
337
- # if zero
338
- # warn "FortranFormat: BZ is not supported descriptor"
339
- # end
340
- end
341
- def count_args
342
- return 0
343
- end
344
- def inspect
345
- if zero
346
- return "BZ"
347
- else
348
- return "BN"
349
- end
350
- end
351
- end
352
-
353
- NodeH = Struct.new(:count, :string)
354
- class NodeH
355
- def write (io, list, state)
356
- io << string
357
- end
358
- def read (io, list, state)
359
- raise "format h is not implemented for reading"
360
- end
361
- def count_args
362
- return count
363
- end
364
- def inspect
365
- count_str = count == 1 ? "" : count.to_s
366
- return "#{count_str}H#{string}"
367
- end
368
- end
369
-
370
- NodeA = Struct.new(:count, :length)
371
- class NodeA
372
- def write (io, list, state)
373
- len = length
374
- if len
375
- count.times do
376
- str = list.shift
377
- if str.length > len
378
- io << str[0,len]
379
- else
380
- io << str.rjust(len)
381
- end
382
- end
383
- else
384
- io << str
385
- end
386
- end
387
- def read (io, list, state)
388
- str = nil
389
- if length
390
- count.times do
391
- list << (str = io.read(length))
392
- end
393
- else
394
- list << (str = io.read)
395
- end
396
- rescue
397
- raise "reading error in fortran format : #{str.dump} for #{self.inspect}"
398
- end
399
- def count_args
400
- return count
401
- end
402
- def inspect
403
- count_str = count == 1 ? "" : count.to_s
404
- return "#{count_str}A#{length}"
405
- end
406
- end
407
-
408
- NodeL = Struct.new(:count, :length)
409
- class NodeL
410
- def write (io, list, state)
411
- count.times do
412
- if list.shift
413
- io << " "*(length-1) + "T"
414
- else
415
- io << " "*(length-1) + "F"
416
- end
417
- end
418
- end
419
- def read (io, list, state)
420
- count.times do
421
- case io.read(length)
422
- when /\A *?\.?t/i
423
- list.push(true)
424
- else
425
- list.push(false)
426
- end
427
- end
428
- end
429
- def count_args
430
- return count
431
- end
432
- def inspect
433
- count_str = count == 1 ? "" : count.to_s
434
- return "#{count_str}L#{length}"
435
- end
436
- end
437
-
438
- NodeI = Struct.new(:count, :length, :prec)
439
- class NodeI
440
- def write (io, list, state)
441
- if prec
442
- if state.sign
443
- fmt = "%#{length-prec}s%+0#{prec-1}i"
444
- else
445
- fmt = "%#{length-prec}s%0#{prec}i"
446
- end
447
- else
448
- if state.sign
449
- fmt = "%s%+#{length-1}i"
450
- else
451
- fmt = "%s%#{length}i"
452
- end
453
- end
454
- count.times do
455
- str = format(fmt, "", list.shift)
456
- io << FortranFormat.check_length(length, str)
457
- end
458
- end
459
- def read (io, list, state)
460
- str = nil
461
- count.times do
462
- str = io.read(length)
463
- if state.zero
464
- list << str.gsub(/ /,'0').to_i
465
- else
466
- list << str.to_i
467
- end
468
- end
469
- rescue
470
- raise "reading error in fortran format : #{str.dump} for #{self.inspect}"
471
- end
472
- def count_args
473
- return count
474
- end
475
- def inspect
476
- count_str = count == 1 ? "" : count.to_s
477
- if prec
478
- return "#{count_str}I#{length}.#{prec}"
479
- else
480
- return "#{count_str}I#{length}"
481
- end
482
- end
483
- end
484
-
485
- NodeF = Struct.new(:count, :length, :prec)
486
- class NodeF
487
- def write (io, list, state)
488
- count.times do
489
- str = FortranFormat.write_F(state.sign, state.scale, length, prec, list.shift)
490
- io << FortranFormat.check_length(length, str)
491
- end
492
- end
493
- def read (io, list, state)
494
- str = nil
495
- count.times do
496
- str = io.read(length)
497
- if state.zero
498
- str = str.gsub(/ /,'0')
499
- end
500
- list << FortranFormat.read_F(str, state.scale, length, prec)
501
- end
502
- rescue
503
- raise "reading error in fortran format : #{str.dump} for #{self.inspect}"
504
- end
505
- def count_args
506
- return count
507
- end
508
- def inspect
509
- count_str = count == 1 ? "" : count.to_s
510
- return "#{count_str}F#{length}.#{prec}"
511
- end
512
- end
513
-
514
- NodeE = Struct.new(:count, :length, :prec, :exp)
515
- class NodeE
516
- def write (io, list, state)
517
- count.times do
518
- str = FortranFormat.write_E(state.sign, state.scale, length, prec, exp, list.shift)
519
- io << FortranFormat.check_length(length, str)
520
- end
521
- end
522
- def read (io, list, state)
523
- str = nil
524
- count.times do
525
- str = io.read(length)
526
- if state.zero
527
- str = str.gsub(/ /,'0')
528
- end
529
- list << str.to_f
530
- end
531
- rescue
532
- raise "reading error in fortran format : #{str.dump} for #{self.inspect}"
533
- end
534
- def count_args
535
- return count
536
- end
537
- def inspect
538
- count_str = count == 1 ? "" : count.to_s
539
- exp_str = (exp.nil? or exp == 2) ? "" : "E#{exp}"
540
- return "#{count_str}E#{length}.#{prec}#{exp_str}"
541
- end
542
- end
543
-
544
- NodeES = Struct.new(:count, :length, :prec, :exp)
545
- class NodeES
546
- def write (io, list, state)
547
- count.times do
548
- str = FortranFormat.write_E(state.sign, 1, length, prec, exp, list.shift)
549
- io << FortranFormat.check_length(length, str)
550
- end
551
- end
552
- def read (io, list, state)
553
- str = nil
554
- count.times do
555
- str = io.read(length)
556
- if state.zero
557
- str = str.gsub(/ /,'0')
558
- end
559
- list << str.to_f
560
- end
561
- rescue
562
- raise "reading error in fortran format : #{str.dump} for #{self.inspect}"
563
- end
564
- def count_args
565
- return count
566
- end
567
- def inspect
568
- count_str = count == 1 ? "" : count.to_s
569
- exp_str = (exp.nil? or exp == 2) ? "" : "E#{exp}"
570
- return "#{count_str}ES#{length}.#{prec}#{exp_str}"
571
- end
572
- end
573
-
574
- NodeG = Struct.new(:count, :length, :prec, :exp)
575
- class NodeG
576
- def write (io, list, state)
577
- count.times do
578
- str = FortranFormat.write_G(state.sign, state.scale, length, prec, exp, list.shift)
579
- io << FortranFormat.check_length(length, str)
580
- end
581
- end
582
- def read (io, list, state)
583
- str = nil
584
- count.times do
585
- str = io.read(length)
586
- if state.zero
587
- str = str.gsub(/ /,'0')
588
- end
589
- list << str.to_f
590
- end
591
- rescue
592
- raise "reading error in fortran format : #{str.dump} for #{self.inspect}"
593
- end
594
- def count_args
595
- return count
596
- end
597
- def inspect
598
- count_str = count == 1 ? "" : count.to_s
599
- exp_str = (exp.nil? or exp == 2) ? "" : "E#{exp}"
600
- return "#{count_str}G#{length}.#{prec}#{exp_str}"
601
- end
602
- end
603
-
604
- end
605
-