@@ -111,6 +111,18 @@ void FixedSizeSketchColumn::update(const vec_t update) {
111111 deterministic_bucket ^= {update, checksum};
112112}
113113
114+ const ColumnEntryDelta FixedSizeSketchColumn::generate_entry_delta (vec_t update) const {
115+ vec_hash_t checksum = Bucket_Boruvka::get_index_hash (update, seed);
116+ col_hash_t depth = Bucket_Boruvka::get_index_depth_legacy (update, seed, capacity-1 );
117+ return {Bucket{update, checksum}, static_cast <uint16_t >(depth)};
118+ }
119+
120+ void FixedSizeSketchColumn::apply_entry_delta (const ColumnEntryDelta &delta) {
121+ assert (delta.depth < capacity);
122+ buckets[delta.depth ] ^= delta.bucket ;
123+ deterministic_bucket ^= delta.bucket ;
124+ }
125+
114126void FixedSizeSketchColumn::atomic_update (const vec_t update) {
115127 vec_hash_t checksum = Bucket_Boruvka::get_index_hash (update, seed);
116128 col_hash_t depth = Bucket_Boruvka::get_index_depth_legacy (update, seed, capacity-1 );
@@ -247,6 +259,23 @@ void ResizeableSketchColumn::update(const vec_t update) {
247259 buckets[depth] ^= {update, checksum};
248260}
249261
262+ const ColumnEntryDelta ResizeableSketchColumn::generate_entry_delta (vec_t update) const {
263+ vec_hash_t checksum = Bucket_Boruvka::get_index_hash (update, seed);
264+ col_hash_t depth = Bucket_Boruvka::get_index_depth_legacy (update, seed, 60 );
265+ return {Bucket{update, checksum}, static_cast <uint16_t >(depth)};
266+ }
267+
268+ void ResizeableSketchColumn::apply_entry_delta (const ColumnEntryDelta &delta) {
269+ assert (delta.depth < capacity);
270+ deterministic_bucket ^= delta.bucket ;
271+
272+ if (delta.depth >= capacity) {
273+ size_t new_capacity = ((delta.depth >> 2 ) << 2 ) + 4 ;
274+ reallocate (new_capacity);
275+ }
276+ buckets[delta.depth ] ^= delta.bucket ;
277+ }
278+
250279void ResizeableSketchColumn::atomic_update (const vec_t update) {
251280 vec_hash_t checksum = Bucket_Boruvka::get_index_hash (update, seed);
252281 col_hash_t depth = Bucket_Boruvka::get_index_depth_legacy (update, seed, 60 );
@@ -378,6 +407,23 @@ void ResizeableAlignedSketchColumn::update(const vec_t update) {
378407 aligned_buckets[depth] ^= {update, checksum};
379408}
380409
410+ const ColumnEntryDelta ResizeableAlignedSketchColumn::generate_entry_delta (vec_t update) const {
411+ vec_hash_t checksum = Bucket_Boruvka::get_index_hash (update, seed);
412+ col_hash_t depth = Bucket_Boruvka::get_index_depth_legacy (update, seed, 60 );
413+ return {Bucket{update, checksum}, static_cast <uint16_t >(depth)};
414+ }
415+
416+ void ResizeableAlignedSketchColumn::apply_entry_delta (const ColumnEntryDelta &delta) {
417+ assert (delta.depth < capacity);
418+ deterministic_bucket ^= delta.bucket ;
419+
420+ if (delta.depth >= capacity) {
421+ size_t new_capacity = ((delta.depth >> 2 ) << 2 ) + 4 ;
422+ reallocate (new_capacity);
423+ }
424+ aligned_buckets[delta.depth ] ^= delta.bucket ;
425+ }
426+
381427void ResizeableAlignedSketchColumn::merge (ResizeableAlignedSketchColumn const & other) {
382428 deterministic_bucket ^= other.deterministic_bucket ;
383429 if (other.capacity > capacity) {
0 commit comments