|
1 | 1 | use std::ops::{Index, IndexMut};
|
2 | 2 | use std::slice;
|
3 | 3 | use std::vec;
|
| 4 | +use std::fmt; |
4 | 5 |
|
5 | 6 | use Dimension;
|
6 | 7 |
|
7 | 8 | /// A multi-dimensional array.
|
8 |
| -#[derive(Debug, PartialEq, Eq, Clone)] |
| 9 | +#[derive(PartialEq, Eq, Clone)] |
9 | 10 | pub struct Array<T> {
|
10 | 11 | dims: Vec<Dimension>,
|
11 | 12 | data: Vec<T>,
|
12 | 13 | }
|
13 | 14 |
|
| 15 | +impl<T: fmt::Debug> fmt::Debug for Array<T> { |
| 16 | + fn fmt(&self, fmt: &mut fmt::Formatter) -> fmt::Result { |
| 17 | + if self.dims.iter().any(|dim| dim.lower_bound != 1) { |
| 18 | + for dim in &self.dims { |
| 19 | + try!(write!(fmt, "[{}:{}]", dim.lower_bound, |
| 20 | + dim.lower_bound + dim.len as isize - 1)); |
| 21 | + } |
| 22 | + try!(write!(fmt, "=")); |
| 23 | + } |
| 24 | + fmt_helper(0, &self.dims, &mut self.data.iter(), fmt) |
| 25 | + } |
| 26 | +} |
| 27 | + |
| 28 | +fn fmt_helper<'a, T, I>(depth: usize, |
| 29 | + dims: &[Dimension], |
| 30 | + mut data: &mut I, |
| 31 | + fmt: &mut fmt::Formatter) |
| 32 | + -> fmt::Result |
| 33 | + where I: Iterator<Item=&'a T>, T: 'a+fmt::Debug { |
| 34 | + if depth == dims.len() { |
| 35 | + return write!(fmt, "{:?}", data.next().unwrap()); |
| 36 | + } |
| 37 | + |
| 38 | + try!(write!(fmt, "{{")); |
| 39 | + for i in 0..dims[depth].len { |
| 40 | + if i != 0 { |
| 41 | + try!(write!(fmt, ",")); |
| 42 | + } |
| 43 | + try!(fmt_helper(depth + 1, dims, data, fmt)); |
| 44 | + } |
| 45 | + write!(fmt, "}}") |
| 46 | +} |
| 47 | + |
14 | 48 | impl<T> Array<T> {
|
15 | 49 | /// Creates a new `Array` from its underlying components.
|
16 | 50 | ///
|
|
0 commit comments