@@ -9,6 +9,7 @@ use crate::util::{AfArray, AfIndex, DimT, HasAfEnum, MutAfArray, MutAfIndex};
9
9
10
10
use std:: default:: Default ;
11
11
use std:: marker:: PhantomData ;
12
+ use std:: mem;
12
13
13
14
#[ allow( dead_code) ]
14
15
extern "C" {
@@ -276,7 +277,6 @@ where
276
277
/// print(&a);
277
278
/// print(&row(&a, 4));
278
279
/// ```
279
- #[ allow( dead_code) ]
280
280
pub fn row < T > ( input : & Array < T > , row_num : u64 ) -> Array < T >
281
281
where
282
282
T : HasAfEnum ,
@@ -290,20 +290,18 @@ where
290
290
)
291
291
}
292
292
293
- #[ allow( dead_code) ]
294
- /// Set `row_num`^th row in `input` Array to a new Array `new_row`
295
- pub fn set_row < T > ( input : & Array < T > , new_row : & Array < T > , row_num : u64 ) -> Array < T >
293
+ /// Set `row_num`^th row in `inout` Array to a new Array `new_row`
294
+ pub fn set_row < T > ( inout : & mut Array < T > , new_row : & Array < T > , row_num : u64 )
296
295
where
297
296
T : HasAfEnum ,
298
297
{
299
298
let seqs = [
300
299
Seq :: new ( row_num as f64 , row_num as f64 , 1.0 ) ,
301
300
Seq :: default ( ) ,
302
301
] ;
303
- assign_seq ( input , & seqs, new_row)
302
+ assign_seq ( inout , & seqs, new_row)
304
303
}
305
304
306
- #[ allow( dead_code) ]
307
305
/// Get an Array with all rows from `first` to `last` in the `input` Array
308
306
pub fn rows < T > ( input : & Array < T > , first : u64 , last : u64 ) -> Array < T >
309
307
where
@@ -315,14 +313,13 @@ where
315
313
)
316
314
}
317
315
318
- #[ allow( dead_code) ]
319
- /// Set rows from `first` to `last` in `input` Array with rows from Array `new_rows`
320
- pub fn set_rows < T > ( input : & Array < T > , new_rows : & Array < T > , first : u64 , last : u64 ) -> Array < T >
316
+ /// Set rows from `first` to `last` in `inout` Array with rows from Array `new_rows`
317
+ pub fn set_rows < T > ( inout : & mut Array < T > , new_rows : & Array < T > , first : u64 , last : u64 )
321
318
where
322
319
T : HasAfEnum ,
323
320
{
324
321
let seqs = [ Seq :: new ( first as f64 , last as f64 , 1.0 ) , Seq :: default ( ) ] ;
325
- assign_seq ( input , & seqs, new_rows)
322
+ assign_seq ( inout , & seqs, new_rows)
326
323
}
327
324
328
325
/// Extract `col_num` col from `input` Array
@@ -337,7 +334,6 @@ where
337
334
/// println!("Grab last col of the random matrix");
338
335
/// print(&col(&a, 4));
339
336
/// ```
340
- #[ allow( dead_code) ]
341
337
pub fn col < T > ( input : & Array < T > , col_num : u64 ) -> Array < T >
342
338
where
343
339
T : HasAfEnum ,
@@ -351,20 +347,18 @@ where
351
347
)
352
348
}
353
349
354
- #[ allow( dead_code) ]
355
- /// Set `col_num`^th col in `input` Array to a new Array `new_col`
356
- pub fn set_col < T > ( input : & Array < T > , new_col : & Array < T > , col_num : u64 ) -> Array < T >
350
+ /// Set `col_num`^th col in `inout` Array to a new Array `new_col`
351
+ pub fn set_col < T > ( inout : & mut Array < T > , new_col : & Array < T > , col_num : u64 )
357
352
where
358
353
T : HasAfEnum ,
359
354
{
360
355
let seqs = [
361
356
Seq :: default ( ) ,
362
357
Seq :: new ( col_num as f64 , col_num as f64 , 1.0 ) ,
363
358
] ;
364
- assign_seq ( input , & seqs, new_col)
359
+ assign_seq ( inout , & seqs, new_col)
365
360
}
366
361
367
- #[ allow( dead_code) ]
368
362
/// Get all cols from `first` to `last` in the `input` Array
369
363
pub fn cols < T > ( input : & Array < T > , first : u64 , last : u64 ) -> Array < T >
370
364
where
@@ -376,20 +370,18 @@ where
376
370
)
377
371
}
378
372
379
- #[ allow( dead_code) ]
380
- /// Set cols from `first` to `last` in `input` Array with cols from Array `new_cols`
381
- pub fn set_cols < T > ( input : & Array < T > , new_cols : & Array < T > , first : u64 , last : u64 ) -> Array < T >
373
+ /// Set cols from `first` to `last` in `inout` Array with cols from Array `new_cols`
374
+ pub fn set_cols < T > ( inout : & mut Array < T > , new_cols : & Array < T > , first : u64 , last : u64 )
382
375
where
383
376
T : HasAfEnum ,
384
377
{
385
378
let seqs = [ Seq :: default ( ) , Seq :: new ( first as f64 , last as f64 , 1.0 ) ] ;
386
- assign_seq ( input , & seqs, new_cols)
379
+ assign_seq ( inout , & seqs, new_cols)
387
380
}
388
381
389
- #[ allow( dead_code) ]
390
382
/// Get `slice_num`^th slice from `input` Array
391
383
///
392
- /// Note. Slices indicate that the indexing is along 3rd dimension
384
+ /// Slices indicate that the indexing is along 3rd dimension
393
385
pub fn slice < T > ( input : & Array < T > , slice_num : u64 ) -> Array < T >
394
386
where
395
387
T : HasAfEnum ,
@@ -402,11 +394,10 @@ where
402
394
index ( input, & seqs)
403
395
}
404
396
405
- #[ allow( dead_code) ]
406
- /// Set slice `slice_num` in `input` Array to a new Array `new_slice`
397
+ /// Set slice `slice_num` in `inout` Array to a new Array `new_slice`
407
398
///
408
399
/// Slices indicate that the indexing is along 3rd dimension
409
- pub fn set_slice < T > ( input : & Array < T > , new_slice : & Array < T > , slice_num : u64 ) -> Array < T >
400
+ pub fn set_slice < T > ( inout : & mut Array < T > , new_slice : & Array < T > , slice_num : u64 )
410
401
where
411
402
T : HasAfEnum ,
412
403
{
@@ -415,10 +406,9 @@ where
415
406
Seq :: default ( ) ,
416
407
Seq :: new ( slice_num as f64 , slice_num as f64 , 1.0 ) ,
417
408
] ;
418
- assign_seq ( input , & seqs, new_slice)
409
+ assign_seq ( inout , & seqs, new_slice)
419
410
}
420
411
421
- #[ allow( dead_code) ]
422
412
/// Get slices from `first` to `last` in `input` Array
423
413
///
424
414
/// Slices indicate that the indexing is along 3rd dimension
@@ -434,11 +424,10 @@ where
434
424
index ( input, & seqs)
435
425
}
436
426
437
- #[ allow( dead_code) ]
438
- /// Set `first` to `last` slices of `input` Array to a new Array `new_slices`
427
+ /// Set `first` to `last` slices of `inout` Array to a new Array `new_slices`
439
428
///
440
429
/// Slices indicate that the indexing is along 3rd dimension
441
- pub fn set_slices < T > ( input : & Array < T > , new_slices : & Array < T > , first : u64 , last : u64 ) -> Array < T >
430
+ pub fn set_slices < T > ( inout : & mut Array < T > , new_slices : & Array < T > , first : u64 , last : u64 )
442
431
where
443
432
T : HasAfEnum ,
444
433
{
@@ -447,7 +436,7 @@ where
447
436
Seq :: default ( ) ,
448
437
Seq :: new ( first as f64 , last as f64 , 1.0 ) ,
449
438
] ;
450
- assign_seq ( input , & seqs, new_slices)
439
+ assign_seq ( inout , & seqs, new_slices)
451
440
}
452
441
453
442
/// Lookup(hash) an Array using another Array
@@ -480,25 +469,26 @@ where
480
469
///
481
470
/// ```rust
482
471
/// use arrayfire::{constant, Dim4, Seq, assign_seq, print};
483
- /// let a = constant(2.0 as f32, Dim4::new(&[5, 3, 1, 1]));
484
- /// let b = constant(1.0 as f32, Dim4::new(&[3, 3, 1, 1]));
485
- /// let seqs = &[Seq::new(1.0, 3.0, 1.0), Seq::default()];
486
- /// let sub = assign_seq(&a, seqs, &b);
472
+ /// let mut a = constant(2.0 as f32, Dim4::new(&[5, 3, 1, 1]));
487
473
/// print(&a);
488
474
/// // 2.0 2.0 2.0
489
475
/// // 2.0 2.0 2.0
490
476
/// // 2.0 2.0 2.0
491
477
/// // 2.0 2.0 2.0
492
478
/// // 2.0 2.0 2.0
493
479
///
494
- /// print(&sub);
480
+ /// let b = constant(1.0 as f32, Dim4::new(&[3, 3, 1, 1]));
481
+ /// let seqs = &[Seq::new(1.0, 3.0, 1.0), Seq::default()];
482
+ /// assign_seq(&mut a, seqs, &b);
483
+ ///
484
+ /// print(&a);
495
485
/// // 2.0 2.0 2.0
496
486
/// // 1.0 1.0 1.0
497
487
/// // 1.0 1.0 1.0
498
488
/// // 1.0 1.0 1.0
499
489
/// // 2.0 2.0 2.0
500
490
/// ```
501
- pub fn assign_seq < T : Copy , I > ( lhs : & Array < I > , seqs : & [ Seq < T > ] , rhs : & Array < I > ) -> Array < I >
491
+ pub fn assign_seq < T : Copy , I > ( lhs : & mut Array < I > , seqs : & [ Seq < T > ] , rhs : & Array < I > )
502
492
where
503
493
c_double : From < T > ,
504
494
I : HasAfEnum ,
@@ -516,7 +506,8 @@ where
516
506
) ;
517
507
HANDLE_ERROR ( AfError :: from ( err_val) ) ;
518
508
}
519
- temp. into ( )
509
+ let modified = temp. into ( ) ;
510
+ let _old_arr = mem:: replace ( lhs, modified) ;
520
511
}
521
512
522
513
/// Index an Array using any combination of Array's and Sequence's
@@ -574,7 +565,7 @@ where
574
565
/// let values: [f32; 3] = [1.0, 2.0, 3.0];
575
566
/// let indices = Array::new(&values, Dim4::new(&[3, 1, 1, 1]));
576
567
/// let seq4gen = Seq::new(0.0, 2.0, 1.0);
577
- /// let a = randu::<f32>(Dim4::new(&[5, 3, 1, 1]));
568
+ /// let mut a = randu::<f32>(Dim4::new(&[5, 3, 1, 1]));
578
569
/// // [5 3 1 1]
579
570
/// // 0.0000 0.2190 0.3835
580
571
/// // 0.1315 0.0470 0.5194
@@ -588,16 +579,16 @@ where
588
579
/// idxrs.set_index(&indices, 0, None); // 2nd parameter is indexing dimension
589
580
/// idxrs.set_index(&seq4gen, 1, Some(false)); // 3rd parameter indicates batch operation
590
581
///
591
- /// let sub2 = assign_gen(&a, &idxrs, &b);
592
- /// println!("a(indices, seq(0, 2, 1))"); print(&sub2 );
582
+ /// assign_gen(&mut a, &idxrs, &b);
583
+ /// println!("a(indices, seq(0, 2, 1))"); print(&a );
593
584
/// // [5 3 1 1]
594
585
/// // 0.0000 0.2190 0.3835
595
586
/// // 2.0000 2.0000 2.0000
596
587
/// // 2.0000 2.0000 2.0000
597
588
/// // 2.0000 2.0000 2.0000
598
589
/// // 0.5328 0.9347 0.0535
599
590
/// ```
600
- pub fn assign_gen < T > ( lhs : & Array < T > , indices : & Indexer , rhs : & Array < T > ) -> Array < T >
591
+ pub fn assign_gen < T > ( lhs : & mut Array < T > , indices : & Indexer , rhs : & Array < T > )
601
592
where
602
593
T : HasAfEnum ,
603
594
{
@@ -612,7 +603,8 @@ where
612
603
) ;
613
604
HANDLE_ERROR ( AfError :: from ( err_val) ) ;
614
605
}
615
- temp. into ( )
606
+ let modified = temp. into ( ) ;
607
+ let _old_arr = mem:: replace ( lhs, modified) ;
616
608
}
617
609
618
610
#[ repr( C ) ]
0 commit comments