27#ifdef TNT_BOUNDS_CHECK
31#include "tnt_array1d.h"
32#include "tnt_array2d.h"
56 Array3D(
int m,
int n,
int g, T val);
57 Array3D(
int m,
int n,
int g, T *a);
59 inline operator T***();
60 inline operator const T***();
62 inline Array3D & operator=(
const T &a);
68 inline T** operator[](
int i);
69 inline const T*
const * operator[](
int i)
const;
70 inline int dim1()
const;
71 inline int dim2()
const;
72 inline int dim3()
const;
77 inline int ref_count(){
return data_.ref_count(); }
78 Array3D subarray(
int i0,
int i1,
int j0,
int j1,
86Array3D<T>::Array3D(
const Array3D<T> &A) : data_(A.data_),
87 v_(A.v_), m_(A.m_), n_(A.n_), g_(A.g_)
94Array3D<T>::Array3D(
int m,
int n,
int g) : data_(m*n*g), v_(m,n),
98 if (m>0 && n>0 && g>0)
103 for (
int i=0; i<m_; i++)
106 for (
int j=0; j<n; j++)
107 v_[i][j] = ping + j*g_;
115Array3D<T>::Array3D(
int m,
int n,
int g, T val) : data_(m*n*g, val),
116 v_(m,n), m_(m), n_(n), g_(g)
118 if (m>0 && n>0 && g>0)
124 for (
int i=0; i<m_; i++)
127 for (
int j=0; j<n; j++)
128 v_[i][j] = ping + j*g_;
136Array3D<T>::Array3D(
int m,
int n,
int g, T* a) :
137 data_(m*n*g, a), v_(m,n), m_(m), n_(n), g_(g)
140 if (m>0 && n>0 && g>0)
145 for (
int i=0; i<m_; i++)
148 for (
int j=0; j<n; j++)
149 v_[i][j] = ping + j*g_;
157inline T** Array3D<T>::operator[](
int i)
159#ifdef TNT_BOUNDS_CHECK
169inline const T*
const * Array3D<T>::operator[](
int i)
const
173Array3D<T> & Array3D<T>::operator=(
const T &a)
175 for (
int i=0; i<m_; i++)
176 for (
int j=0; j<n_; j++)
177 for (
int k=0; k<g_; k++)
184Array3D<T> Array3D<T>::copy()
const
186 Array3D A(m_, n_, g_);
187 for (
int i=0; i<m_; i++)
188 for (
int j=0; j<n_; j++)
189 for (
int k=0; k<g_; k++)
190 A.v_[i][j][k] = v_[i][j][k];
197Array3D<T> & Array3D<T>::inject(
const Array3D &A)
199 if (A.m_ == m_ && A.n_ == n_ && A.g_ == g_)
201 for (
int i=0; i<m_; i++)
202 for (
int j=0; j<n_; j++)
203 for (
int k=0; k<g_; k++)
204 v_[i][j][k] = A.v_[i][j][k];
212Array3D<T> & Array3D<T>::ref(
const Array3D<T> &A)
226Array3D<T> & Array3D<T>::operator=(
const Array3D<T> &A)
233inline int Array3D<T>::dim1()
const {
return m_; }
236inline int Array3D<T>::dim2()
const {
return n_; }
239inline int Array3D<T>::dim3()
const {
return g_; }
244Array3D<T>::~Array3D() {}
247inline Array3D<T>::operator T***()
254inline Array3D<T>::operator
const T***()
261Array3D<T> Array3D<T>::subarray(
int i0,
int i1,
int j0,
262 int j1,
int k0,
int k1)
266 if (!( 0 <= i0 && i0 <= i1 && i1 < m_ &&
267 0 <= j0 && j0 <= j1 && j1 < n_ &&
268 0 <= k0 && k0 <= k1 && k1 < g_))
277 A.v_ = Array2D<T*>(A.m_,A.n_);
278 T* p = &(data_[0]) + i0*n_*g_ + j0*g_ + k0;
280 for (
int i=0; i<A.m_; i++)
282 T* ping = p + i*n_*g_;
283 for (
int j=0; j<A.n_; j++)
284 A.v_[i][j] = ping + j*g_ ;
Definition tnt_array1d.h:40
Definition tnt_array2d.h:65
Definition tnt_array3d.h:39
Definition tnt_array1d.h:36