![]()
|
ar2tem.h00001 //
00002 // ar2tem.h --- template for the Array2 class
00003 //
00004 // Copyright (C) 1996 Limit Point Systems, Inc.
00005 //
00006 // Author: Curtis Janssen <cljanss@limitpt.com>
00007 // Maintainer: LPS
00008 //
00009 // This file is part of the SC Toolkit.
00010 //
00011 // The SC Toolkit is free software; you can redistribute it and/or modify
00012 // it under the terms of the GNU Library General Public License as published by
00013 // the Free Software Foundation; either version 2, or (at your option)
00014 // any later version.
00015 //
00016 // The SC Toolkit is distributed in the hope that it will be useful,
00017 // but WITHOUT ANY WARRANTY; without even the implied warranty of
00018 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
00019 // GNU Library General Public License for more details.
00020 //
00021 // You should have received a copy of the GNU Library General Public License
00022 // along with the SC Toolkit; see the file COPYING.LIB. If not, write to
00023 // the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
00024 //
00025 // The U.S. Government is granted a limited license as per AL 91-7.
00026 //
00027
00028 namespace sc {
00029
00030 template <class Type>
00031 class Array2 {
00032 protected:
00033 int _length0;
00034 int _length1;
00035 int _managed;
00036 Type * _array;
00037 public:
00038 Array2():_length0(0),_length1(0),_array(0) {}
00039 Array2(const Array2<Type> &a): _length0(0),_length1(0),_array(0) {
00040 operator=(a);
00041 }
00042 Array2(Type* data,int size0,int size1):
00043 _length0(size0),_length1(size1),_managed(0),_array(data) {}
00044 Array2(int size0,int size1): _length0(0),_length1(0),_array(0) {
00045 set_lengths(size0,size1);
00046 }
00047 ~Array2() { clear(); }
00048 int length0() const { return _length0; };
00049 int length1() const { return _length1; };
00050 void clear() { set_lengths(0,0); }
00051 void set_lengths(int size0,int size1) {
00052 if (_managed && _array) delete[] _array;
00053 _managed = 1;
00054 if (size0*size1) _array = new Type [ size0*size1 ];
00055 else _array = 0;
00056 _length0 = size0;
00057 _length1 = size1;
00058 }
00059 Array2<Type>& operator = (const Array2<Type> & s) {
00060 if (_managed && _array) delete[] _array;
00061 _managed = 1;
00062 _length0 = s._length0;
00063 _length1 = s._length1;
00064 if (_length0*_length1) _array = new Type [ _length0*_length1 ];
00065 else _array = 0;
00066 for (int i=0; i<_length0*_length1; i++) {
00067 _array[i] = s._array[i];
00068 }
00069 return (*this);
00070 }
00071 Type& operator() (int i,int j) {
00072 if (i<0 || i>=_length0 || j<0 || j>=_length1) {
00073 ExEnv::err0() << "Array2::operator()(" << i << "," << j << "): "
00074 << "out of range (" << _length0 << "," << _length1
00075 << ",)" << std::endl;
00076 abort();
00077 };
00078 return _array[i*_length1+j];
00079 }
00080 const Type& operator() (int i,int j) const {
00081 if (i<0 || i>=_length0 || j<0 || j>=_length1) {
00082 ExEnv::err0() << "Array2::operator()(" << i << "," << j << "): "
00083 << "out of range (" << _length0 << "," << _length1
00084 << ",)" << std::endl;
00085 abort();
00086 };
00087 return _array[i*_length1+j];
00088 }
00089 };
00090
00091 }
00092
00093 // ///////////////////////////////////////////////////////////////////////////
00094
00095 // Local Variables:
00096 // mode: c++
00097 // c-file-style: "CLJ"
00098 // End:
Generated at Fri Jan 10 08:14:08 2003 for MPQC 2.1.3 using the documentation package Doxygen 1.2.14. |