@@ -71,24 +71,33 @@ mod gps_data_codec {
7171
7272 #[ pyfunction]
7373 fn decode ( input : String ) -> PyResult < Vec < ( i64 , f64 , f64 ) > > {
74- let mut vals: [ i64 ; 3 ] = [ YEAR2010 , 0 , 0 ] ;
75- let mut bytes_consumed: u32 = 0 ;
76- let mut decoding_result: DecodingResult ;
7774 let mut encoded = input. as_bytes ( ) . into_iter ( ) ;
7875 let encoded_length: u32 = encoded. len ( ) as u32 ;
79- let mut output: Vec < ( i64 , f64 , f64 ) > = Vec :: new ( ) ;
80-
76+ let mut bytes_consumed: u32 = 0 ;
77+ let mut timestamp: i64 = YEAR2010 ;
78+ let mut latitude: i64 = 0 ;
79+ let mut longitude: i64 = 0 ;
80+
8181 while bytes_consumed < encoded_length {
82- for ( i, val) in vals. iter_mut ( ) . enumerate ( ) {
83- if i == 0 && bytes_consumed != 0 {
84- decoding_result = decode_unsigned_value_from_string ( & mut encoded) ;
85- } else {
86- decoding_result = decode_signed_value_from_string ( & mut encoded) ;
87- }
82+ if bytes_consumed == 0 {
83+ let decoding_result = decode_signed_value_from_string ( & mut encoded) ;
8884 bytes_consumed += decoding_result. offset ;
89- * val += decoding_result. value ;
85+ timestamp += decoding_result. value ;
86+ } else {
87+ let decoding_result = decode_unsigned_value_from_string ( & mut encoded) ;
88+ bytes_consumed += decoding_result. offset ;
89+ timestamp += decoding_result. value ;
9090 }
91- output. push ( ( vals[ 0 ] , ( vals[ 1 ] as f64 ) / 1e5 , ( vals[ 2 ] as f64 ) / 1e5 ) ) ;
91+
92+ let decoding_result = decode_signed_value_from_string ( & mut encoded) ;
93+ bytes_consumed += decoding_result. offset ;
94+ latitude += decoding_result. value ;
95+
96+ let decoding_result = decode_signed_value_from_string ( & mut encoded) ;
97+ bytes_consumed += decoding_result. offset ;
98+ longitude += decoding_result. value ;
99+
100+ output. push ( ( timestamp, ( latitude as f64 ) / 1e5 , ( longitude as f64 ) / 1e5 ) ) ;
92101 }
93102 Ok ( output)
94103 }
0 commit comments