@@ -238,29 +238,21 @@ pub fn sum<C: Config>(
238
238
acc
239
239
}
240
240
241
- // Join two arrays
242
- pub fn join < C : Config > (
241
+ // Extend an array by one element
242
+ pub fn extend < C : Config > (
243
243
builder : & mut Builder < C > ,
244
- a : & Array < C , Ext < C :: F , C :: EF > > ,
245
- b : & Array < C , Ext < C :: F , C :: EF > > ,
244
+ arr : & Array < C , Ext < C :: F , C :: EF > > ,
245
+ elem : & Ext < C :: F , C :: EF > ,
246
246
) -> Array < C , Ext < C :: F , C :: EF > > {
247
- let a_len = a. len ( ) ;
248
- let b_len = b. len ( ) ;
249
- let out_len = builder. eval_expr ( a_len. clone ( ) + b_len. clone ( ) ) ;
250
- let out = builder. dyn_array ( out_len) ;
247
+ let new_len: Var < C :: N > = builder. eval ( arr. len ( ) + C :: N :: ONE ) ;
248
+ let out = builder. dyn_array ( new_len) ;
251
249
252
- builder. range ( 0 , a_len . clone ( ) ) . for_each ( |i_vec, builder| {
250
+ builder. range ( 0 , arr . len ( ) ) . for_each ( |i_vec, builder| {
253
251
let i = i_vec[ 0 ] ;
254
- let a_val = builder. get ( a, i) ;
255
- builder. set ( & out, i, a_val) ;
256
- } ) ;
257
-
258
- builder. range ( 0 , b_len) . for_each ( |i_vec, builder| {
259
- let b_i = i_vec[ 0 ] ;
260
- let i = builder. eval_expr ( b_i + a_len. clone ( ) ) ;
261
- let b_val = builder. get ( b, b_i) ;
262
- builder. set ( & out, i, b_val) ;
252
+ let val = builder. get ( arr, i) ;
253
+ builder. set_value ( & out, i, val) ;
263
254
} ) ;
255
+ builder. set_value ( & out, arr. len ( ) , elem. clone ( ) ) ;
264
256
265
257
out
266
258
}
0 commit comments