lump together x and y, and counts
This commit is contained in:
parent
9dbfb5e4ec
commit
78d1d6e7de
@ -21,7 +21,7 @@ use std::collections::HashMap;
|
||||
|
||||
use arrow::array::{
|
||||
StructBuilder, FixedSizeListBuilder, ListBuilder, StringBuilder, ArrayBuilder, BooleanBuilder,
|
||||
Int32Builder, Int16Builder, UInt32Builder, UInt8Builder, Float64Builder,
|
||||
Int32Builder, Int16Builder, UInt64Builder, UInt32Builder, UInt8Builder, Float64Builder,
|
||||
};
|
||||
|
||||
|
||||
@ -319,17 +319,18 @@ pub fn read_text<'a>(
|
||||
angle_builder.append_option(angle_deg);
|
||||
|
||||
let (input, mut xy_iter) = XY::read_data(input, header.data_size)?;
|
||||
let x_builder = text_builder.field_builder::<Int32Builder>(9).unwrap();
|
||||
x_builder.append_value(xy_iter.next().unwrap());
|
||||
let y_builder = text_builder.field_builder::<Int32Builder>(10).unwrap();
|
||||
y_builder.append_value(xy_iter.next().unwrap());
|
||||
let xx = xy_iter.next().unwrap();
|
||||
let yy = xy_iter.next().unwrap();
|
||||
let xy = ((xx as u32 as u64) << 32) | (yy as u32 as u64);
|
||||
let xy_builder = text_builder.field_builder::<UInt64Builder>(9).unwrap();
|
||||
xy_builder.append_value(xy);
|
||||
|
||||
let (input, string_bytes) = STRING::read(input)?;
|
||||
let string = String::from_utf8(string_bytes).unwrap();
|
||||
let string_builder = text_builder.field_builder::<StringBuilder>(11).unwrap();
|
||||
let string_builder = text_builder.field_builder::<StringBuilder>(10).unwrap();
|
||||
string_builder.append_value(string);
|
||||
|
||||
let props_builder = text_builder.field_builder::<DListBuilder>(12).unwrap();
|
||||
let props_builder = text_builder.field_builder::<DListBuilder>(11).unwrap();
|
||||
let (input, ()) = read_properties(input, props_builder)?;
|
||||
|
||||
text_builder.append(true);
|
||||
@ -406,57 +407,47 @@ pub fn read_ref<'a>(
|
||||
|
||||
|
||||
let (input, mut xy_iter) = XY::read_data(input, header.data_size)?;
|
||||
let x = xy_iter.next().unwrap();
|
||||
let y = xy_iter.next().unwrap();
|
||||
let x_builder = ref_builder.field_builder::<Int32Builder>(4).unwrap();
|
||||
x_builder.append_value(x);
|
||||
let y_builder = ref_builder.field_builder::<Int32Builder>(5).unwrap();
|
||||
y_builder.append_value(y);
|
||||
let xx = xy_iter.next().unwrap();
|
||||
let yy = xy_iter.next().unwrap();
|
||||
let xy = ((xx as u32 as u64) << 32) | (yy as u32 as u64);
|
||||
let xy_builder = ref_builder.field_builder::<UInt64Builder>(4).unwrap();
|
||||
xy_builder.append_value(xy);
|
||||
|
||||
let rep_builder = ref_builder.field_builder::<StructBuilder>(6).unwrap();
|
||||
println!("ref, {is_aref:?}");
|
||||
let rep_builder = ref_builder.field_builder::<StructBuilder>(5).unwrap();
|
||||
if is_aref {
|
||||
if colrow.is_none() {
|
||||
return fail(input, "AREF without COLROW before XY".to_string())
|
||||
}
|
||||
let (count0, count1) = colrow.unwrap();
|
||||
|
||||
let x0a = (xy_iter.next().unwrap() - x) / (count0 as i32);
|
||||
let y0a = (xy_iter.next().unwrap() - y) / (count0 as i32);
|
||||
let x1a = (xy_iter.next().unwrap() - x) / (count1 as i32);
|
||||
let y1a = (xy_iter.next().unwrap() - y) / (count1 as i32);
|
||||
let x0a = (xy_iter.next().unwrap() - xx) / (count0 as i32);
|
||||
let y0a = (xy_iter.next().unwrap() - yy) / (count0 as i32);
|
||||
let x1a = (xy_iter.next().unwrap() - xx) / (count1 as i32);
|
||||
let y1a = (xy_iter.next().unwrap() - yy) / (count1 as i32);
|
||||
|
||||
let x0_builder = rep_builder.field_builder::<Int32Builder>(0).unwrap();
|
||||
x0_builder.append_value(x0a);
|
||||
let y0_builder = rep_builder.field_builder::<Int32Builder>(1).unwrap();
|
||||
y0_builder.append_value(y0a);
|
||||
let x1_builder = rep_builder.field_builder::<Int32Builder>(2).unwrap();
|
||||
x1_builder.append_value(x1a);
|
||||
let y1_builder = rep_builder.field_builder::<Int32Builder>(3).unwrap();
|
||||
y1_builder.append_value(y1a);
|
||||
let xy0a = ((x0a as u32 as u64) << 32) | (y0a as u32 as u64);
|
||||
let xy1a = ((x1a as u32 as u64) << 32) | (y1a as u32 as u64);
|
||||
let xy0_builder = rep_builder.field_builder::<UInt64Builder>(0).unwrap();
|
||||
xy0_builder.append_value(xy0a);
|
||||
let xy1_builder = rep_builder.field_builder::<UInt64Builder>(1).unwrap();
|
||||
xy1_builder.append_value(xy1a);
|
||||
|
||||
let count0_builder = rep_builder.field_builder::<Int16Builder>(4).unwrap();
|
||||
count0_builder.append_value(count0);
|
||||
let count1_builder = rep_builder.field_builder::<Int16Builder>(5).unwrap();
|
||||
count1_builder.append_value(count1);
|
||||
let counts = ((count0 as u16 as u32) << 16) | (count1 as u16 as u32);
|
||||
let counts_builder = rep_builder.field_builder::<UInt32Builder>(2).unwrap();
|
||||
counts_builder.append_value(counts);
|
||||
|
||||
} else {
|
||||
let x0_builder = rep_builder.field_builder::<Int32Builder>(0).unwrap();
|
||||
x0_builder.append_null();
|
||||
let y0_builder = rep_builder.field_builder::<Int32Builder>(1).unwrap();
|
||||
y0_builder.append_null();
|
||||
let x1_builder = rep_builder.field_builder::<Int32Builder>(2).unwrap();
|
||||
x1_builder.append_null();
|
||||
let y1_builder = rep_builder.field_builder::<Int32Builder>(3).unwrap();
|
||||
y1_builder.append_null();
|
||||
let count0_builder = rep_builder.field_builder::<Int16Builder>(4).unwrap();
|
||||
count0_builder.append_null();
|
||||
let count1_builder = rep_builder.field_builder::<Int16Builder>(5).unwrap();
|
||||
count1_builder.append_null();
|
||||
let xy0_builder = rep_builder.field_builder::<UInt64Builder>(0).unwrap();
|
||||
xy0_builder.append_null();
|
||||
let xy1_builder = rep_builder.field_builder::<UInt64Builder>(1).unwrap();
|
||||
xy1_builder.append_null();
|
||||
let counts_builder = rep_builder.field_builder::<UInt32Builder>(2).unwrap();
|
||||
counts_builder.append_null();
|
||||
}
|
||||
rep_builder.append(is_aref);
|
||||
|
||||
let props_builder = ref_builder.field_builder::<DListBuilder>(7).unwrap();
|
||||
let props_builder = ref_builder.field_builder::<DListBuilder>(6).unwrap();
|
||||
let (input, ()) = read_properties(input, props_builder)?;
|
||||
|
||||
ref_builder.append(true);
|
||||
|
@ -112,12 +112,9 @@ pub fn read_library(input: &[u8]) -> IResult<StructArray> {
|
||||
|
||||
|
||||
let repetition_struct_t = DataType::Struct(Fields::from(vec![
|
||||
Field::new("x0", DataType::Int32, false),
|
||||
Field::new("y0", DataType::Int32, false),
|
||||
Field::new("x1", DataType::Int32, false),
|
||||
Field::new("y1", DataType::Int32, false),
|
||||
Field::new("count0", DataType::Int16, false),
|
||||
Field::new("count1", DataType::Int16, false),
|
||||
Field::new("xy0", DataType::UInt64, false),
|
||||
Field::new("xy1", DataType::UInt64, false),
|
||||
Field::new("counts", DataType::UInt32, false),
|
||||
]));
|
||||
|
||||
let ref_struct_t = DataType::Struct(Fields::from(vec![
|
||||
@ -125,8 +122,7 @@ pub fn read_library(input: &[u8]) -> IResult<StructArray> {
|
||||
Field::new("invert_y", DataType::Boolean, true),
|
||||
Field::new("mag", DataType::Float64, true),
|
||||
Field::new("angle_deg", DataType::Float64, true),
|
||||
Field::new("x", DataType::Int32, false),
|
||||
Field::new("y", DataType::Int32, false),
|
||||
Field::new("xy", DataType::UInt64, false),
|
||||
Field::new("repetition", repetition_struct_t, true),
|
||||
Field::new("properties", property_list_t.clone(), true),
|
||||
]));
|
||||
@ -141,8 +137,7 @@ pub fn read_library(input: &[u8]) -> IResult<StructArray> {
|
||||
Field::new("invert_y", DataType::Boolean, true),
|
||||
Field::new("mag", DataType::Float64, true),
|
||||
Field::new("angle_deg", DataType::Float64, true),
|
||||
Field::new("x", DataType::Int32, false),
|
||||
Field::new("y", DataType::Int32, false),
|
||||
Field::new("xy", DataType::UInt64, false),
|
||||
Field::new("string", DataType::Utf8, false),
|
||||
Field::new("properties", property_list_t.clone(), true),
|
||||
]));
|
||||
|
Loading…
x
Reference in New Issue
Block a user