Class: Tengai::VectorEphemerisParser
- Inherits:
-
Object
- Object
- Tengai::VectorEphemerisParser
- Defined in:
- ext/horizons/vector_ephemeris_parser.rb
Class Attribute Summary collapse
-
._ephemeris_parser_actions ⇒ Object
Returns the value of attribute _ephemeris_parser_actions.
-
._ephemeris_parser_index_offsets ⇒ Object
Returns the value of attribute _ephemeris_parser_index_offsets.
-
._ephemeris_parser_indicies ⇒ Object
Returns the value of attribute _ephemeris_parser_indicies.
-
._ephemeris_parser_key_offsets ⇒ Object
Returns the value of attribute _ephemeris_parser_key_offsets.
-
._ephemeris_parser_range_lengths ⇒ Object
Returns the value of attribute _ephemeris_parser_range_lengths.
-
._ephemeris_parser_single_lengths ⇒ Object
Returns the value of attribute _ephemeris_parser_single_lengths.
-
._ephemeris_parser_trans_actions ⇒ Object
Returns the value of attribute _ephemeris_parser_trans_actions.
-
._ephemeris_parser_trans_keys ⇒ Object
Returns the value of attribute _ephemeris_parser_trans_keys.
-
._ephemeris_parser_trans_targs ⇒ Object
Returns the value of attribute _ephemeris_parser_trans_targs.
-
.ephemeris_parser_en_main ⇒ Object
Returns the value of attribute ephemeris_parser_en_main.
-
.ephemeris_parser_error ⇒ Object
Returns the value of attribute ephemeris_parser_error.
-
.ephemeris_parser_first_final ⇒ Object
Returns the value of attribute ephemeris_parser_first_final.
-
.ephemeris_parser_start ⇒ Object
Returns the value of attribute ephemeris_parser_start.
Class Method Summary collapse
Class Attribute Details
._ephemeris_parser_actions ⇒ Object
Returns the value of attribute _ephemeris_parser_actions.
194 195 196 |
# File 'ext/horizons/vector_ephemeris_parser.rb', line 194 def _ephemeris_parser_actions @_ephemeris_parser_actions end |
._ephemeris_parser_index_offsets ⇒ Object
Returns the value of attribute _ephemeris_parser_index_offsets.
2313 2314 2315 |
# File 'ext/horizons/vector_ephemeris_parser.rb', line 2313 def _ephemeris_parser_index_offsets @_ephemeris_parser_index_offsets end |
._ephemeris_parser_indicies ⇒ Object
Returns the value of attribute _ephemeris_parser_indicies.
2511 2512 2513 |
# File 'ext/horizons/vector_ephemeris_parser.rb', line 2511 def _ephemeris_parser_indicies @_ephemeris_parser_indicies end |
._ephemeris_parser_key_offsets ⇒ Object
Returns the value of attribute _ephemeris_parser_key_offsets.
205 206 207 |
# File 'ext/horizons/vector_ephemeris_parser.rb', line 205 def _ephemeris_parser_key_offsets @_ephemeris_parser_key_offsets end |
._ephemeris_parser_range_lengths ⇒ Object
Returns the value of attribute _ephemeris_parser_range_lengths.
2115 2116 2117 |
# File 'ext/horizons/vector_ephemeris_parser.rb', line 2115 def _ephemeris_parser_range_lengths @_ephemeris_parser_range_lengths end |
._ephemeris_parser_single_lengths ⇒ Object
Returns the value of attribute _ephemeris_parser_single_lengths.
1917 1918 1919 |
# File 'ext/horizons/vector_ephemeris_parser.rb', line 1917 def _ephemeris_parser_single_lengths @_ephemeris_parser_single_lengths end |
._ephemeris_parser_trans_actions ⇒ Object
Returns the value of attribute _ephemeris_parser_trans_actions.
4174 4175 4176 |
# File 'ext/horizons/vector_ephemeris_parser.rb', line 4174 def _ephemeris_parser_trans_actions @_ephemeris_parser_trans_actions end |
._ephemeris_parser_trans_keys ⇒ Object
Returns the value of attribute _ephemeris_parser_trans_keys.
403 404 405 |
# File 'ext/horizons/vector_ephemeris_parser.rb', line 403 def _ephemeris_parser_trans_keys @_ephemeris_parser_trans_keys end |
._ephemeris_parser_trans_targs ⇒ Object
Returns the value of attribute _ephemeris_parser_trans_targs.
3968 3969 3970 |
# File 'ext/horizons/vector_ephemeris_parser.rb', line 3968 def _ephemeris_parser_trans_targs @_ephemeris_parser_trans_targs end |
.ephemeris_parser_en_main ⇒ Object
Returns the value of attribute ephemeris_parser_en_main.
4393 4394 4395 |
# File 'ext/horizons/vector_ephemeris_parser.rb', line 4393 def ephemeris_parser_en_main @ephemeris_parser_en_main end |
.ephemeris_parser_error ⇒ Object
Returns the value of attribute ephemeris_parser_error.
4388 4389 4390 |
# File 'ext/horizons/vector_ephemeris_parser.rb', line 4388 def ephemeris_parser_error @ephemeris_parser_error end |
.ephemeris_parser_first_final ⇒ Object
Returns the value of attribute ephemeris_parser_first_final.
4384 4385 4386 |
# File 'ext/horizons/vector_ephemeris_parser.rb', line 4384 def ephemeris_parser_first_final @ephemeris_parser_first_final end |
.ephemeris_parser_start ⇒ Object
Returns the value of attribute ephemeris_parser_start.
4380 4381 4382 |
# File 'ext/horizons/vector_ephemeris_parser.rb', line 4380 def ephemeris_parser_start @ephemeris_parser_start end |
Class Method Details
.parse(data, ephemeris_table_parser = EphemerisTableParser) ⇒ Object
12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 |
# File 'ext/horizons/vector_ephemeris_parser.rb', line 12 def self.parse(data, ephemeris_table_parser=EphemerisTableParser) data = data.unpack('c*') if data.is_a? String eof = data.length # line 18 "ext/horizons/vector_ephemeris_parser.rb" begin p ||= 0 pe ||= data.length cs = ephemeris_parser_start end # line 102 "ext/horizons/vector_ephemeris_parser.rl" # line 27 "ext/horizons/vector_ephemeris_parser.rb" begin _klen, _trans, _keys, _acts, _nacts = nil _goto_level = 0 _resume = 10 _eof_trans = 15 _again = 20 _test_eof = 30 _out = 40 while true _trigger_goto = false if _goto_level <= 0 if p == pe _goto_level = _test_eof next end if cs == 0 _goto_level = _out next end end if _goto_level <= _resume _keys = _ephemeris_parser_key_offsets[cs] _trans = _ephemeris_parser_index_offsets[cs] _klen = _ephemeris_parser_single_lengths[cs] _break_match = false begin if _klen > 0 _lower = _keys _upper = _keys + _klen - 1 loop do break if _upper < _lower _mid = _lower + ( (_upper - _lower) >> 1 ) if data[p].ord < _ephemeris_parser_trans_keys[_mid] _upper = _mid - 1 elsif data[p].ord > _ephemeris_parser_trans_keys[_mid] _lower = _mid + 1 else _trans += (_mid - _keys) _break_match = true break end end # loop break if _break_match _keys += _klen _trans += _klen end _klen = _ephemeris_parser_range_lengths[cs] if _klen > 0 _lower = _keys _upper = _keys + (_klen << 1) - 2 loop do break if _upper < _lower _mid = _lower + (((_upper-_lower) >> 1) & ~1) if data[p].ord < _ephemeris_parser_trans_keys[_mid] _upper = _mid - 2 elsif data[p].ord > _ephemeris_parser_trans_keys[_mid+1] _lower = _mid + 2 else _trans += ((_mid - _keys) >> 1) _break_match = true break end end # loop break if _break_match _trans += _klen end end while false _trans = _ephemeris_parser_indicies[_trans] cs = _ephemeris_parser_trans_targs[_trans] if _ephemeris_parser_trans_actions[_trans] != 0 _acts = _ephemeris_parser_trans_actions[_trans] _nacts = _ephemeris_parser_actions[_acts] _acts += 1 while _nacts > 0 _nacts -= 1 _acts += 1 case _ephemeris_parser_actions[_acts - 1] when 0 then # line 6 "ext/horizons/vector_ephemeris_parser.rl" begin mark = p end when 1 then # line 8 "ext/horizons/vector_ephemeris_parser.rl" begin target_body_id = data[mark..p].pack('c*') end when 2 then # line 12 "ext/horizons/vector_ephemeris_parser.rl" begin center_body_id = data[mark..p].pack('c*') end when 3 then # line 16 "ext/horizons/vector_ephemeris_parser.rl" begin start_time = data[mark..p].pack('c*') end when 4 then # line 20 "ext/horizons/vector_ephemeris_parser.rl" begin stop_time = data[mark..p].pack('c*') end when 5 then # line 24 "ext/horizons/vector_ephemeris_parser.rl" begin step_size = data[mark..p].pack('c*') end when 6 then # line 28 "ext/horizons/vector_ephemeris_parser.rl" begin ephemeris_table = data[mark..p - 1].pack('c*') end when 7 then # line 32 "ext/horizons/vector_ephemeris_parser.rl" begin ephemeris_columns = data[mark..p].pack('c*') end # line 154 "ext/horizons/vector_ephemeris_parser.rb" end # action switch end end if _trigger_goto next end end if _goto_level <= _again if cs == 0 _goto_level = _out next end p += 1 if p != pe _goto_level = _resume next end end if _goto_level <= _test_eof end if _goto_level <= _out break end end end # line 103 "ext/horizons/vector_ephemeris_parser.rl" { target_body_id: target_body_id.to_i, center_body_id: center_body_id.to_i, start_time: DateTime.parse(start_time), stop_time: DateTime.parse(stop_time), step_size: step_size, ephemeris_table: ephemeris_table_parser.parse( "#{ephemeris_columns}\n#{ephemeris_table}") } end |