00001 //Copyright (c) 2004-2005, Baris Sumengen 00002 //All rights reserved. 00003 // 00004 // CIMPL Matrix Performance Library 00005 // 00006 //Redistribution and use in source and binary 00007 //forms, with or without modification, are 00008 //permitted provided that the following 00009 //conditions are met: 00010 // 00011 // * No commercial use is allowed. 00012 // This software can only be used 00013 // for non-commercial purposes. This 00014 // distribution is mainly intended for 00015 // academic research and teaching. 00016 // * Redistributions of source code must 00017 // retain the above copyright notice, this 00018 // list of conditions and the following 00019 // disclaimer. 00020 // * Redistributions of binary form must 00021 // mention the above copyright notice, this 00022 // list of conditions and the following 00023 // disclaimer in a clearly visible part 00024 // in associated product manual, 00025 // readme, and web site of the redistributed 00026 // software. 00027 // * Redistributions in binary form must 00028 // reproduce the above copyright notice, 00029 // this list of conditions and the 00030 // following disclaimer in the 00031 // documentation and/or other materials 00032 // provided with the distribution. 00033 // * The name of Baris Sumengen may not be 00034 // used to endorse or promote products 00035 // derived from this software without 00036 // specific prior written permission. 00037 // 00038 //THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT 00039 //HOLDERS AND CONTRIBUTORS "AS IS" AND ANY 00040 //EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT 00041 //NOT LIMITED TO, THE IMPLIED WARRANTIES OF 00042 //MERCHANTABILITY AND FITNESS FOR A PARTICULAR 00043 //PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 00044 //CONTRIBUTORS BE LIABLE FOR ANY 00045 //DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 00046 //EXEMPLARY, OR CONSEQUENTIAL DAMAGES 00047 //(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT 00048 //OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 00049 //DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 00050 //HOWEVER CAUSED AND ON ANY THEORY OF 00051 //LIABILITY, WHETHER IN CONTRACT, STRICT 00052 //LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 00053 //OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 00054 //OF THIS SOFTWARE, EVEN IF ADVISED OF THE 00055 //POSSIBILITY OF SUCH DAMAGE. 00056 00057 00058 00059 00060 template< class T > 00061 SubMatrix<T>::SubMatrix(void) 00062 { 00063 xDim = 0; 00064 yDim = 0; 00065 columns = 0; 00066 clean = 0; 00067 } 00068 00069 00070 template< class T > 00071 SubMatrix<T>::SubMatrix(SubMatrix<T> &m) 00072 { 00073 xDim = m.xDim; 00074 yDim = m.yDim; 00075 columns = m.columns; 00076 clean = new Cleaner<T>(columns); 00077 00078 } 00079 00080 00081 00082 00083 template< class T > 00084 SubMatrix<T>::~SubMatrix(void) 00085 { 00086 00087 if(clean != 0) 00088 { 00089 delete clean; 00090 } 00091 00092 } 00093 00094 00095 00096 00097 00098 00099 00100 00101 00102 template< class T > 00103 inline const int SubMatrix<T>::Columns() const 00104 { 00105 return xDim; 00106 } 00107 00108 template< class T > 00109 inline const int SubMatrix<T>::Rows() const 00110 { 00111 return yDim; 00112 } 00113 00114 00115 template< class T > 00116 inline const int SubMatrix<T>::XDim() const 00117 { 00118 return xDim; 00119 } 00120 00121 template< class T > 00122 inline const int SubMatrix<T>::YDim() const 00123 { 00124 return yDim; 00125 } 00126 00127 00128 template< class T > 00129 inline const List<int,2> SubMatrix<T>::Size() const 00130 { 00131 return List(dims[1],dims[0]); 00132 } 00133 00134 template< class T > 00135 SubMatrix<T>& SubMatrix<T>::operator= (SubMatrix<T>& m) 00136 { 00137 xDim = m.xDim; 00138 yDim = m.yDim; 00139 columns = m.columns; 00140 delete clean; 00141 clean = new Cleaner<T>(columns); 00142 00143 00144 return *this; 00145 } 00146 00147 00148 00149 00150 template< class T > 00151 inline T& SubMatrix<T>::operator() (const int j, const int i) 00152 { 00153 if(i<0 || i>=dims[0] || j<0 || j>=dims[1]) 00154 { 00155 cerr << "Line: " << __LINE__ << " File: " << __FILE__ << endl; 00156 Utility::RunTimeError("Index outside bounds!"); 00157 } 00158 00159 return columns[i].data[j]; 00160 00161 } 00162 00163 template< class T > 00164 inline Vector<T>& SubMatrix<T>::operator[] (const int i) 00165 { 00166 return columns[i]; 00167 } 00168 00169 00170 00171 00172 00173 00174 00175 00176 00177 00178 00179