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::{
|
use arrow::array::{
|
||||||
StructBuilder, FixedSizeListBuilder, ListBuilder, StringBuilder, ArrayBuilder, BooleanBuilder,
|
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);
|
angle_builder.append_option(angle_deg);
|
||||||
|
|
||||||
let (input, mut xy_iter) = XY::read_data(input, header.data_size)?;
|
let (input, mut xy_iter) = XY::read_data(input, header.data_size)?;
|
||||||
let x_builder = text_builder.field_builder::<Int32Builder>(9).unwrap();
|
let xx = xy_iter.next().unwrap();
|
||||||
x_builder.append_value(xy_iter.next().unwrap());
|
let yy = xy_iter.next().unwrap();
|
||||||
let y_builder = text_builder.field_builder::<Int32Builder>(10).unwrap();
|
let xy = ((xx as u32 as u64) << 32) | (yy as u32 as u64);
|
||||||
y_builder.append_value(xy_iter.next().unwrap());
|
let xy_builder = text_builder.field_builder::<UInt64Builder>(9).unwrap();
|
||||||
|
xy_builder.append_value(xy);
|
||||||
|
|
||||||
let (input, string_bytes) = STRING::read(input)?;
|
let (input, string_bytes) = STRING::read(input)?;
|
||||||
let string = String::from_utf8(string_bytes).unwrap();
|
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);
|
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)?;
|
let (input, ()) = read_properties(input, props_builder)?;
|
||||||
|
|
||||||
text_builder.append(true);
|
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 (input, mut xy_iter) = XY::read_data(input, header.data_size)?;
|
||||||
let x = xy_iter.next().unwrap();
|
let xx = xy_iter.next().unwrap();
|
||||||
let y = xy_iter.next().unwrap();
|
let yy = xy_iter.next().unwrap();
|
||||||
let x_builder = ref_builder.field_builder::<Int32Builder>(4).unwrap();
|
let xy = ((xx as u32 as u64) << 32) | (yy as u32 as u64);
|
||||||
x_builder.append_value(x);
|
let xy_builder = ref_builder.field_builder::<UInt64Builder>(4).unwrap();
|
||||||
let y_builder = ref_builder.field_builder::<Int32Builder>(5).unwrap();
|
xy_builder.append_value(xy);
|
||||||
y_builder.append_value(y);
|
|
||||||
|
|
||||||
let rep_builder = ref_builder.field_builder::<StructBuilder>(6).unwrap();
|
|
||||||
println!("ref, {is_aref:?}");
|
println!("ref, {is_aref:?}");
|
||||||
|
let rep_builder = ref_builder.field_builder::<StructBuilder>(5).unwrap();
|
||||||
if is_aref {
|
if is_aref {
|
||||||
if colrow.is_none() {
|
if colrow.is_none() {
|
||||||
return fail(input, "AREF without COLROW before XY".to_string())
|
return fail(input, "AREF without COLROW before XY".to_string())
|
||||||
}
|
}
|
||||||
let (count0, count1) = colrow.unwrap();
|
let (count0, count1) = colrow.unwrap();
|
||||||
|
|
||||||
let x0a = (xy_iter.next().unwrap() - x) / (count0 as i32);
|
let x0a = (xy_iter.next().unwrap() - xx) / (count0 as i32);
|
||||||
let y0a = (xy_iter.next().unwrap() - y) / (count0 as i32);
|
let y0a = (xy_iter.next().unwrap() - yy) / (count0 as i32);
|
||||||
let x1a = (xy_iter.next().unwrap() - x) / (count1 as i32);
|
let x1a = (xy_iter.next().unwrap() - xx) / (count1 as i32);
|
||||||
let y1a = (xy_iter.next().unwrap() - y) / (count1 as i32);
|
let y1a = (xy_iter.next().unwrap() - yy) / (count1 as i32);
|
||||||
|
|
||||||
let x0_builder = rep_builder.field_builder::<Int32Builder>(0).unwrap();
|
let xy0a = ((x0a as u32 as u64) << 32) | (y0a as u32 as u64);
|
||||||
x0_builder.append_value(x0a);
|
let xy1a = ((x1a as u32 as u64) << 32) | (y1a as u32 as u64);
|
||||||
let y0_builder = rep_builder.field_builder::<Int32Builder>(1).unwrap();
|
let xy0_builder = rep_builder.field_builder::<UInt64Builder>(0).unwrap();
|
||||||
y0_builder.append_value(y0a);
|
xy0_builder.append_value(xy0a);
|
||||||
let x1_builder = rep_builder.field_builder::<Int32Builder>(2).unwrap();
|
let xy1_builder = rep_builder.field_builder::<UInt64Builder>(1).unwrap();
|
||||||
x1_builder.append_value(x1a);
|
xy1_builder.append_value(xy1a);
|
||||||
let y1_builder = rep_builder.field_builder::<Int32Builder>(3).unwrap();
|
|
||||||
y1_builder.append_value(y1a);
|
|
||||||
|
|
||||||
let count0_builder = rep_builder.field_builder::<Int16Builder>(4).unwrap();
|
let counts = ((count0 as u16 as u32) << 16) | (count1 as u16 as u32);
|
||||||
count0_builder.append_value(count0);
|
let counts_builder = rep_builder.field_builder::<UInt32Builder>(2).unwrap();
|
||||||
let count1_builder = rep_builder.field_builder::<Int16Builder>(5).unwrap();
|
counts_builder.append_value(counts);
|
||||||
count1_builder.append_value(count1);
|
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
let x0_builder = rep_builder.field_builder::<Int32Builder>(0).unwrap();
|
let xy0_builder = rep_builder.field_builder::<UInt64Builder>(0).unwrap();
|
||||||
x0_builder.append_null();
|
xy0_builder.append_null();
|
||||||
let y0_builder = rep_builder.field_builder::<Int32Builder>(1).unwrap();
|
let xy1_builder = rep_builder.field_builder::<UInt64Builder>(1).unwrap();
|
||||||
y0_builder.append_null();
|
xy1_builder.append_null();
|
||||||
let x1_builder = rep_builder.field_builder::<Int32Builder>(2).unwrap();
|
let counts_builder = rep_builder.field_builder::<UInt32Builder>(2).unwrap();
|
||||||
x1_builder.append_null();
|
counts_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();
|
|
||||||
}
|
}
|
||||||
rep_builder.append(is_aref);
|
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)?;
|
let (input, ()) = read_properties(input, props_builder)?;
|
||||||
|
|
||||||
ref_builder.append(true);
|
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![
|
let repetition_struct_t = DataType::Struct(Fields::from(vec![
|
||||||
Field::new("x0", DataType::Int32, false),
|
Field::new("xy0", DataType::UInt64, false),
|
||||||
Field::new("y0", DataType::Int32, false),
|
Field::new("xy1", DataType::UInt64, false),
|
||||||
Field::new("x1", DataType::Int32, false),
|
Field::new("counts", DataType::UInt32, false),
|
||||||
Field::new("y1", DataType::Int32, false),
|
|
||||||
Field::new("count0", DataType::Int16, false),
|
|
||||||
Field::new("count1", DataType::Int16, false),
|
|
||||||
]));
|
]));
|
||||||
|
|
||||||
let ref_struct_t = DataType::Struct(Fields::from(vec![
|
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("invert_y", DataType::Boolean, true),
|
||||||
Field::new("mag", DataType::Float64, true),
|
Field::new("mag", DataType::Float64, true),
|
||||||
Field::new("angle_deg", DataType::Float64, true),
|
Field::new("angle_deg", DataType::Float64, true),
|
||||||
Field::new("x", DataType::Int32, false),
|
Field::new("xy", DataType::UInt64, false),
|
||||||
Field::new("y", DataType::Int32, false),
|
|
||||||
Field::new("repetition", repetition_struct_t, true),
|
Field::new("repetition", repetition_struct_t, true),
|
||||||
Field::new("properties", property_list_t.clone(), 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("invert_y", DataType::Boolean, true),
|
||||||
Field::new("mag", DataType::Float64, true),
|
Field::new("mag", DataType::Float64, true),
|
||||||
Field::new("angle_deg", DataType::Float64, true),
|
Field::new("angle_deg", DataType::Float64, true),
|
||||||
Field::new("x", DataType::Int32, false),
|
Field::new("xy", DataType::UInt64, false),
|
||||||
Field::new("y", DataType::Int32, false),
|
|
||||||
Field::new("string", DataType::Utf8, false),
|
Field::new("string", DataType::Utf8, false),
|
||||||
Field::new("properties", property_list_t.clone(), true),
|
Field::new("properties", property_list_t.clone(), true),
|
||||||
]));
|
]));
|
||||||
|
Loading…
x
Reference in New Issue
Block a user