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