Update lookup serialization

This commit is contained in:
Robin Salen 2023-06-28 08:54:54 -04:00
parent c80201261d
commit b32345cd52
No known key found for this signature in database
GPG Key ID: F98FD38F65687358
2 changed files with 47 additions and 24 deletions

View File

@ -1,6 +1,5 @@
use alloc::format;
use alloc::string::String;
use alloc::sync::Arc;
use alloc::vec::Vec;
use core::usize;
@ -60,18 +59,24 @@ impl<F: RichField + Extendable<D>, const D: usize> Gate<F, D> for LookupGate {
format!("{self:?}")
}
fn serialize(&self, dst: &mut Vec<u8>, _cd: &CommonCircuitData<F, D>) -> IoResult<()> {
fn serialize(&self, dst: &mut Vec<u8>, cd: &CommonCircuitData<F, D>) -> IoResult<()> {
dst.write_usize(self.num_slots)?;
dst.write_lut(&self.lut)
for (i, lut) in cd.luts.iter().enumerate() {
if lut == &self.lut {
return dst.write_usize(i);
}
}
panic!("The associated lookup table couldn't be found.")
}
fn deserialize(src: &mut Buffer, _cd: &CommonCircuitData<F, D>) -> IoResult<Self> {
fn deserialize(src: &mut Buffer, cd: &CommonCircuitData<F, D>) -> IoResult<Self> {
let num_slots = src.read_usize()?;
let lut = src.read_lut()?;
let lut_index = src.read_usize()?;
Ok(Self {
num_slots,
lut: Arc::new(lut),
lut: cd.luts[lut_index].clone(),
})
}
@ -184,20 +189,26 @@ impl<F: RichField + Extendable<D>, const D: usize> SimpleGenerator<F, D> for Loo
out_buffer.set_target(out_wire, output_val);
}
fn serialize(&self, dst: &mut Vec<u8>, _cd: &CommonCircuitData<F, D>) -> IoResult<()> {
fn serialize(&self, dst: &mut Vec<u8>, cd: &CommonCircuitData<F, D>) -> IoResult<()> {
dst.write_usize(self.row)?;
dst.write_lut(&self.lut)?;
dst.write_usize(self.slot_nb)
dst.write_usize(self.slot_nb)?;
for (i, lut) in cd.luts.iter().enumerate() {
if lut == &self.lut {
return dst.write_usize(i);
}
}
panic!("The associated lookup table couldn't be found.")
}
fn deserialize(src: &mut Buffer, _cd: &CommonCircuitData<F, D>) -> IoResult<Self> {
fn deserialize(src: &mut Buffer, cd: &CommonCircuitData<F, D>) -> IoResult<Self> {
let row = src.read_usize()?;
let lut = src.read_lut()?;
let slot_nb = src.read_usize()?;
let lut_index = src.read_usize()?;
Ok(Self {
row,
lut: Arc::new(lut),
lut: cd.luts[lut_index].clone(),
slot_nb,
})
}

View File

@ -72,20 +72,26 @@ impl<F: RichField + Extendable<D>, const D: usize> Gate<F, D> for LookupTableGat
format!("{self:?}")
}
fn serialize(&self, dst: &mut Vec<u8>, _cd: &CommonCircuitData<F, D>) -> IoResult<()> {
fn serialize(&self, dst: &mut Vec<u8>, cd: &CommonCircuitData<F, D>) -> IoResult<()> {
dst.write_usize(self.num_slots)?;
dst.write_lut(&self.lut)?;
dst.write_usize(self.last_lut_row)
dst.write_usize(self.last_lut_row)?;
for (i, lut) in cd.luts.iter().enumerate() {
if lut == &self.lut {
return dst.write_usize(i);
}
}
panic!("The associated lookup table couldn't be found.")
}
fn deserialize(src: &mut Buffer, _cd: &CommonCircuitData<F, D>) -> IoResult<Self> {
fn deserialize(src: &mut Buffer, cd: &CommonCircuitData<F, D>) -> IoResult<Self> {
let num_slots = src.read_usize()?;
let lut = src.read_lut()?;
let last_lut_row = src.read_usize()?;
let lut_index = src.read_usize()?;
Ok(Self {
num_slots,
lut: Arc::new(lut),
lut: cd.luts[lut_index].clone(),
last_lut_row,
})
}
@ -202,24 +208,30 @@ impl<F: RichField + Extendable<D>, const D: usize> SimpleGenerator<F, D> for Loo
}
}
fn serialize(&self, dst: &mut Vec<u8>, _cd: &CommonCircuitData<F, D>) -> IoResult<()> {
fn serialize(&self, dst: &mut Vec<u8>, cd: &CommonCircuitData<F, D>) -> IoResult<()> {
dst.write_usize(self.row)?;
dst.write_lut(&self.lut)?;
dst.write_usize(self.slot_nb)?;
dst.write_usize(self.num_slots)?;
dst.write_usize(self.last_lut_row)
dst.write_usize(self.last_lut_row)?;
for (i, lut) in cd.luts.iter().enumerate() {
if lut == &self.lut {
return dst.write_usize(i);
}
}
panic!("The associated lookup table couldn't be found.")
}
fn deserialize(src: &mut Buffer, _cd: &CommonCircuitData<F, D>) -> IoResult<Self> {
fn deserialize(src: &mut Buffer, cd: &CommonCircuitData<F, D>) -> IoResult<Self> {
let row = src.read_usize()?;
let lut = src.read_lut()?;
let slot_nb = src.read_usize()?;
let num_slots = src.read_usize()?;
let last_lut_row = src.read_usize()?;
let lut_index = src.read_usize()?;
Ok(Self {
row,
lut: Arc::new(lut),
lut: cd.luts[lut_index].clone(),
slot_nb,
num_slots,
last_lut_row,