return masque-style (dx, dy) vectors for AREF

This commit is contained in:
jan 2025-04-12 23:02:08 -07:00
parent 1b3a6a45ce
commit 9c98ee2b97

View File

@ -374,32 +374,40 @@ pub fn read_ref<'a>(input: &'a [u8], cell_builder: &mut StructBuilder, tag: u16,
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(xy_iter.next().unwrap());
x_builder.append_value(x);
let y_builder = ref_builder.field_builder::<Int32Builder>(5).unwrap();
y_builder.append_value(xy_iter.next().unwrap());
y_builder.append_value(y);
let rep_builder = ref_builder.field_builder::<StructBuilder>(6).unwrap();
println!("ref, {is_aref:?}");
if is_aref {
let x0_builder = rep_builder.field_builder::<Int32Builder>(0).unwrap();
x0_builder.append_value(xy_iter.next().unwrap());
let y0_builder = rep_builder.field_builder::<Int32Builder>(1).unwrap();
y0_builder.append_value(xy_iter.next().unwrap());
let x1_builder = rep_builder.field_builder::<Int32Builder>(2).unwrap();
x1_builder.append_value(xy_iter.next().unwrap());
let y1_builder = rep_builder.field_builder::<Int32Builder>(3).unwrap();
y1_builder.append_value(xy_iter.next().unwrap());
match colrow {
None => return fail(input, "AREF without COLROW before XY".to_string()),
Some((count0, count1)) => {
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);
},
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 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 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);
} else {
let x0_builder = rep_builder.field_builder::<Int32Builder>(0).unwrap();
x0_builder.append_null();