/* 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 ConcreteFormedArray3d::ConcreteFormedArray3d() : ConcreteArray3d(SubscriptArray<3>(0,0,0), 0) { } template ConcreteFormedArray3d::ConcreteFormedArray3d(Subscript s0, Subscript s1, Subscript s2) : ConcreteArray3d(SubscriptArray<3>(s0, s1, s2), 0) { setSizeOnHeap(s0 * s1 * s2); } template ConcreteFormedArray3d:: ConcreteFormedArray3d(const ConcreteFormedArray3d& a) : ConcreteArray3d(SubscriptArray<3>(a.shape(0), a.shape(1), a.shape(2)), 0) { setSizeOnHeap(a.numElts()); concreteCopy(*this, a); } template ConcreteFormedArray3d:: ConcreteFormedArray3d(const ConcreteArray3dConstRef& a) : ConcreteArray3d(SubscriptArray<3>(a.shape(0), a.shape(1), a.shape(2)), 0) { setSizeOnHeap(a.numElts()); concreteCopy(*this, a); } template ConcreteFormedArray3d:: ConcreteFormedArray3d(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 ConcreteFormedArray3d::~ConcreteFormedArray3d() { delete[] datap; } template ConcreteFormedArray3d& ConcreteFormedArray3d::operator=(const ConcreteFormedArray3d& rhs) { concreteCopy(*this, rhs); return *this; } template ConcreteFormedArray3d& ConcreteFormedArray3d::operator=(const ConcreteArray3dConstRef& rhs) { concreteCopy(*this, rhs); return *this; } template ConcreteFormedArray3d& ConcreteFormedArray3d::operator=(const T& rhs) { ConcreteArray3d, T>::operator=(rhs); return *this; }