Class: Tengai::VectorEphemerisParser

Inherits:
Object
  • Object
show all
Defined in:
ext/horizons/vector_ephemeris_parser.rb

Class Attribute Summary collapse

Class Method Summary collapse

Class Attribute Details

._ephemeris_parser_actionsObject

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_offsetsObject

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_indiciesObject

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_offsetsObject

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_lengthsObject

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_lengthsObject

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_actionsObject

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_keysObject

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_targsObject

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_mainObject

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_errorObject

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_finalObject

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_startObject

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