/* Example programs from the book Scientific and Engineering Programming in C++: An Introduction with Advanced Techniques and Examples, Addison-Wesley, 1994. (c) COPYRIGHT INTERNATIONAL BUSINESS MACHINES CORPORATION 1994. ALL RIGHTS RESERVED. See README file for further details. */ template ConcreteFortranArray3d::ConcreteFortranArray3d(Subscript s0, Subscript s1, Subscript s2) : ConcreteArray3d(SubscriptArray<3>(s0, s1, s2), 0) { setSizeOnHeap(s0 * s1 * s2); } template ConcreteFortranArray3d:: ConcreteFortranArray3d(const ConcreteFortranArray3d& a) : ConcreteArray3d(SubscriptArray<3>(a.shape(0), a.shape(1), a.shape(2)), 0) { setSizeOnHeap(a.numElts()); concreteCopy(*this, a); } template ConcreteFortranArray3d:: ConcreteFortranArray3d(const ConcreteArray3dConstRef& a) : ConcreteArray3d(SubscriptArray<3>(a.shape(0), a.shape(1), a.shape(2)), 0) { setSizeOnHeap(a.numElts()); concreteCopy(*this, a); } template ConcreteFortranArray3d:: ConcreteFortranArray3d(const ConcreteArray3dConstRef::ProjectionT, T>& a) : ConcreteArray3d(SubscriptArray<3>(a.shape(0), a.shape(1), a.shape(2)), 0) { setSizeOnHeap(a.numElts()); concreteCopy(*this, a); } template ConcreteFortranArray3d::~ConcreteFortranArray3d() { delete[] datap; } template ConcreteFortranArray3d& ConcreteFortranArray3d::operator=(const ConcreteFortranArray3d& rhs) { concreteCopy(*this, rhs); return *this; } template ConcreteFortranArray3d& ConcreteFortranArray3d::operator=(const ConcreteArray3dConstRef& rhs) { concreteCopy(*this, rhs); return *this; } template ConcreteFortranArray3d& ConcreteFortranArray3d::operator=(const T& rhs) { ConcreteArray3d, T>::operator=(rhs); return *this; }