carray 1.3.7 → 1.4.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.
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
-