Skip to content

Commit 3ca0789

Browse files
author
Jason Ramapuram
committed
add slice, slices, set_slice, set_slices, rows, cols, set_row, set_col, set_rows, set_cols
1 parent d517e0a commit 3ca0789

File tree

3 files changed

+72
-31
lines changed

3 files changed

+72
-31
lines changed

examples/helloworld.rs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,12 @@ fn main() {
7171
print(&row(&a, num_rows - 1).unwrap());
7272
print(&col(&a, num_cols - 1).unwrap());
7373

74+
println!("Set last row to 1's");
75+
let r_dims = Dim4::new(&[3, 1, 1, 1]);
76+
let r_input: [f32; 3] = [1.0, 1.0, 1.0];
77+
let r = Array::new(r_dims, &r_input, Aftype::F32).unwrap();
78+
print(&set_row(&a, &r, num_rows - 1).unwrap());
79+
7480
println!("Create 2-by-3 matrix from host data");
7581
let d_dims = Dim4::new(&[2, 3, 1, 1]);
7682
let d_input: [i32; 6] = [1, 2, 3, 4, 5, 6];

src/index.rs

Lines changed: 63 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -114,48 +114,81 @@ pub fn index(input: &Array, seqs: &[Seq]) -> Result<Array, AfError> {
114114
}
115115
}
116116

117+
#[allow(dead_code)]
117118
pub fn row(input: &Array, row_num: u64) -> Result<Array, AfError> {
118-
let dims_err = input.dims();
119-
let dims = match dims_err {
120-
Ok(dim) => dim.clone(),
121-
Err(e) => panic!("Error unwrapping dims in row(): {}", e),
122-
};
123-
124119
index(input, &[Seq::new(row_num as f64, row_num as f64, 1.0)
125-
,Seq::new(0.0, dims[1] as f64 - 1.0, 1.0)])
120+
, Seq::default()])
126121
}
127122

123+
#[allow(dead_code)]
124+
pub fn set_row(input: &Array, new_row: &Array, row_num: u64) -> Result<Array, AfError> {
125+
assign_seq(input, &[Seq::new(row_num as f64, row_num as f64, 1.0), Seq::default()]
126+
, new_row)
127+
}
128+
129+
#[allow(dead_code)]
128130
pub fn rows(input: &Array, first: u64, last: u64) -> Result<Array, AfError> {
129-
let dims_err = input.dims();
130-
let dims = match dims_err {
131-
Ok(dim) => dim.clone(),
132-
Err(e) => panic!("Error unwrapping dims in rows(): {}", e),
133-
};
131+
index(input, &[Seq::new(first as f64, last as f64, 1.0), Seq::default()])
132+
}
134133

135-
index(input, &[Seq::new(first as f64, last as f64, 1.0)
136-
,Seq::new(0.0, dims[1] as f64 - 1.0, 1.0)])
134+
#[allow(dead_code)]
135+
pub fn set_rows(input: &Array, new_rows: &Array, first: u64, last: u64) -> Result<Array, AfError> {
136+
assign_seq(input, &[Seq::new(first as f64, last as f64, 1.0), Seq::default()]
137+
, new_rows)
137138
}
138139

140+
#[allow(dead_code)]
139141
pub fn col(input: &Array, col_num: u64) -> Result<Array, AfError> {
140-
let dims_err = input.dims();
141-
let dims = match dims_err {
142-
Ok(dim) => dim.clone(),
143-
Err(e) => panic!("Error unwrapping dims in col(): {}", e),
144-
};
142+
index(input, &[Seq::default()
143+
, Seq::new(col_num as f64, col_num as f64, 1.0)])
144+
}
145145

146-
index(input, &[Seq::new(0.0, dims[0] as f64 - 1.0, 1.0)
147-
,Seq::new(col_num as f64, col_num as f64, 1.0)])
146+
#[allow(dead_code)]
147+
pub fn set_col(input: &Array, new_col: &Array, col_num: u64) -> Result<Array, AfError> {
148+
assign_seq(input, &[Seq::default(), Seq::new(col_num as f64, col_num as f64, 1.0)]
149+
, new_col)
148150
}
149151

152+
#[allow(dead_code)]
150153
pub fn cols(input: &Array, first: u64, last: u64) -> Result<Array, AfError> {
151-
let dims_err = input.dims();
152-
let dims = match dims_err {
153-
Ok(dim) => dim.clone(),
154-
Err(e) => panic!("Error unwrapping dims in cols(): {}", e),
155-
};
154+
index(input, &[Seq::default()
155+
, Seq::new(first as f64, last as f64, 1.0)])
156+
}
156157

157-
index(input, &[Seq::new(0.0, dims[0] as f64 - 1.0, 1.0)
158-
,Seq::new(first as f64, last as f64, 1.0)])
158+
#[allow(dead_code)]
159+
pub fn set_cols(input: &Array, new_cols: &Array, first: u64, last: u64) -> Result<Array, AfError> {
160+
assign_seq(input, &[Seq::default(), Seq::new(first as f64, last as f64, 1.0)]
161+
, new_cols)
162+
}
163+
164+
#[allow(dead_code)]
165+
pub fn slice(input: &Array, slice_num: u64) -> Result<Array, AfError> {
166+
index(input, &[Seq::default()
167+
, Seq::default()
168+
, Seq::new(slice_num as f64, slice_num as f64, 1.0)])
169+
}
170+
171+
#[allow(dead_code)]
172+
pub fn set_slice(input: &Array, new_slice: &Array, slice_num: u64) -> Result<Array, AfError> {
173+
assign_seq(input, &[Seq::default()
174+
, Seq::default()
175+
, Seq::new(slice_num as f64, slice_num as f64, 1.0)]
176+
, new_slice)
177+
}
178+
179+
#[allow(dead_code)]
180+
pub fn slices(input: &Array, first: u64, last: u64) -> Result<Array, AfError> {
181+
index(input, &[Seq::default()
182+
, Seq::default()
183+
, Seq::new(first as f64, last as f64, 1.0)])
184+
}
185+
186+
#[allow(dead_code)]
187+
pub fn set_slices(input: &Array, new_slices: &Array, first: u64, last: u64) -> Result<Array, AfError> {
188+
assign_seq(input, &[Seq::default()
189+
, Seq::default()
190+
, Seq::new(first as f64, last as f64, 1.0)]
191+
, new_slices)
159192
}
160193

161194
pub fn lookup(input: &Array, indices: &Array, seq_dim: i32) -> Result<Array, AfError> {
@@ -170,11 +203,11 @@ pub fn lookup(input: &Array, indices: &Array, seq_dim: i32) -> Result<Array, AfE
170203
}
171204
}
172205

173-
pub fn assign_seq(lhs: &Array, ndims: usize, seqs: &[Seq], rhs: &Array) -> Result<Array, AfError> {
206+
pub fn assign_seq(lhs: &Array, seqs: &[Seq], rhs: &Array) -> Result<Array, AfError> {
174207
unsafe{
175208
let mut temp: i64 = 0;
176209
let err_val = af_assign_seq(&mut temp as MutAfArray, lhs.get() as AfArray,
177-
ndims as c_uint, seqs.as_ptr() as *const Seq,
210+
seqs.len() as c_uint, seqs.as_ptr() as *const Seq,
178211
rhs.get() as AfArray);
179212
match err_val {
180213
0 => Ok(Array::from(temp)),

src/lib.rs

100644100755
Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,9 @@ mod defines;
4444
pub use dim4::Dim4;
4545
mod dim4;
4646

47-
pub use index::{Indexer, index, row, col, lookup, assign_seq, index_gen, assign_gen};
47+
pub use index::{Indexer, index, row, rows, col, cols, slice, slices
48+
, set_row, set_rows, set_col, set_cols, set_slice, set_slices
49+
, lookup, assign_seq, index_gen, assign_gen};
4850
mod index;
4951

5052
pub use seq::Seq;

0 commit comments

Comments
 (0)