1- use alloc:: boxed:: Box ;
2- use alloc:: string:: String ;
1+ use alloc:: string:: { String , ToString } ;
32use alloc:: vec:: Vec ;
43use alloc:: { format, vec} ;
4+ use plonky2:: util:: serialization:: { Buffer , IoResult , Read , Write } ;
55use core:: marker:: PhantomData ;
66
77use plonky2:: field:: extension:: Extendable ;
@@ -12,7 +12,7 @@ use plonky2::gates::packed_util::PackedEvaluableBase;
1212use plonky2:: gates:: util:: StridedConstraintConsumer ;
1313use plonky2:: hash:: hash_types:: RichField ;
1414use plonky2:: iop:: ext_target:: ExtensionTarget ;
15- use plonky2:: iop:: generator:: { GeneratedValues , SimpleGenerator , WitnessGenerator } ;
15+ use plonky2:: iop:: generator:: { GeneratedValues , SimpleGenerator , WitnessGeneratorRef } ;
1616use plonky2:: iop:: target:: Target ;
1717use plonky2:: iop:: wire:: Wire ;
1818use plonky2:: iop:: witness:: { PartitionWitness , Witness , WitnessWrite } ;
@@ -98,6 +98,18 @@ impl<F: RichField + Extendable<D>, const D: usize> Gate<F, D> for ComparisonGate
9898 format ! ( "{self:?}<D={D}>" )
9999 }
100100
101+ fn serialize ( & self , dst : & mut Vec < u8 > ) -> IoResult < ( ) > {
102+ dst. write_usize ( self . num_bits ) ?;
103+ dst. write_usize ( self . num_chunks ) ?;
104+ Ok ( ( ) )
105+ }
106+
107+ fn deserialize ( src : & mut Buffer ) -> IoResult < Self > {
108+ let num_bits = src. read_usize ( ) ?;
109+ let num_chunks = src. read_usize ( ) ?;
110+ Ok ( Self { num_bits, num_chunks, _phantom : PhantomData } )
111+ }
112+
101113 fn eval_unfiltered ( & self , vars : EvaluationVars < F , D > ) -> Vec < F :: Extension > {
102114 let mut constraints = Vec :: with_capacity ( self . num_constraints ( ) ) ;
103115
@@ -287,12 +299,12 @@ impl<F: RichField + Extendable<D>, const D: usize> Gate<F, D> for ComparisonGate
287299 constraints
288300 }
289301
290- fn generators ( & self , row : usize , _local_constants : & [ F ] ) -> Vec < Box < dyn WitnessGenerator < F > > > {
302+ fn generators ( & self , row : usize , _local_constants : & [ F ] ) -> Vec < WitnessGeneratorRef < F > > {
291303 let gen = ComparisonGenerator :: < F , D > {
292304 row,
293305 gate : self . clone ( ) ,
294306 } ;
295- vec ! [ Box :: new( gen . adapter( ) ) ]
307+ vec ! [ WitnessGeneratorRef :: new( gen . adapter( ) ) ]
296308 }
297309
298310 fn num_wires ( & self ) -> usize {
@@ -404,6 +416,10 @@ struct ComparisonGenerator<F: RichField + Extendable<D>, const D: usize> {
404416impl < F : RichField + Extendable < D > , const D : usize > SimpleGenerator < F >
405417 for ComparisonGenerator < F , D >
406418{
419+ fn id ( & self ) -> String {
420+ "ComparisonGenerator" . to_string ( )
421+ }
422+
407423 fn dependencies ( & self ) -> Vec < Target > {
408424 let local_target = |column| Target :: wire ( self . row , column) ;
409425
@@ -512,6 +528,18 @@ impl<F: RichField + Extendable<D>, const D: usize> SimpleGenerator<F>
512528 ) ;
513529 }
514530 }
531+
532+ fn serialize ( & self , dst : & mut Vec < u8 > ) -> IoResult < ( ) > {
533+ dst. write_usize ( self . row ) ?;
534+ self . gate . serialize ( dst)
535+ }
536+
537+ fn deserialize ( src : & mut Buffer ) -> IoResult < Self > {
538+ let row = src. read_usize ( ) ?;
539+ let gate = ComparisonGate :: deserialize ( src) ?;
540+ Ok ( Self { row, gate } )
541+ }
542+
515543}
516544
517545#[ cfg( test) ]
0 commit comments