/* 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. */ #include "Array/ArrayTuplize.h" template ConcreteRigidArray3d::ConcreteRigidArray3d(Subscript s0, Subscript s1, Subscript s2) { if (s0 != n0 || s1 != n1 || s2 != n2) throw ArrayErr::CreationSize(); } template ConcreteRigidArray3d& ConcreteRigidArray3d::operator=(const T& rhs) { T* p = firstDatum(); T* const endp = p + numElts(); while (p < endp) *p++ = rhs; return *this; } template ConstConcreteArrayProjection2d::Subscriptor, T> ConcreteRigidArray3d::project(Subscript s, Dimension d) const { SubscriptArray<3> pjs(0,0,0); pjs(d) = s; Subscriptor the_subscriptor(SubscriptArray<3>(n0, n1, n2)); return ConstConcreteArrayProjection2d( the_subscriptor.projectionSubscriptor(d, s), firstDatum()+offset(pjs) ); } template ConcreteArrayProjection2d::Subscriptor, T> ConcreteRigidArray3d::project(Subscript s, Dimension d) { SubscriptArray<3> pjs(0,0,0); pjs(d) = s; Subscriptor the_subscriptor(SubscriptArray<3>(n0, n1, n2)); return ConcreteArrayProjection2d( the_subscriptor.projectionSubscriptor(d, s), firstDatum()+offset(pjs) ); } template ostream& operator<<(ostream& os, const ConcreteRigidArray3d& a) { return arrayTuplize(a, os); }