Matrix.h

Go to the documentation of this file.
00001 /***************************************************************************
00002  *
00003  * Copyright (C) 2009-2010 Cassio Neri Moreira
00004  *
00005  * This file is part of the KeyValue library.
00006  *
00007  * The KeyValue library is free software; you can redistribute it and/or
00008  * modify it under the terms of the GNU General Public License as published
00009  * by the Free Software Foundation, either version 3 of the License, or (at
00010  * your option) any later version.
00011  *
00012  * The KeyValue library is distributed in the hope that it will be useful,
00013  * but WITHOUT ANY WARRANTY; without even the implied warranty of
00014  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
00015  * Public License for more details.
00016  *
00017  * You should have received a copy of the GNU General Public License along
00018  * with KeyValue. If not, see <http://www.gnu.org/licenses/>.
00019  *
00020  **************************************************************************/
00021 
00029 #ifndef KEYVALUE_KEY_GENERIC_MATRIX_H_
00030 #define KEYVALUE_KEY_GENERIC_MATRIX_H_
00031 
00032 #include "keyvalue/extern/String.h"
00033 #include "keyvalue/key/converter/StdMatrix.h"
00034 #include "keyvalue/key/Traits.h"
00035 
00036 namespace keyvalue {
00037 namespace key {
00038 
00046 template<typename ElementType>
00047 class Matrix : public Traits<ElementType, StdMatrix> {
00048 
00049 public:
00050 
00054   explicit
00055   Matrix(const string& name);
00056 
00065   Matrix(const string& name, size_t nRows, size_t nCols_);
00066 
00067 private:
00068 
00069 private :
00070 
00079   void
00080   checkSize(size_t nRows, size_t nCols) const;
00081 
00082   size_t nRows_;
00083   size_t nCols_;
00084 
00085 }; // class Matrix
00086 
00087 /*--------------------------------------------------------------------------
00088  * Matrix()
00089  *------------------------------------------------------------------------*/
00090 
00091 template<typename ElementType>
00092 Matrix<ElementType>::Matrix(const string& name) : Matrix::Traits_(name),
00093   nRows_(0), nCols_(0) {
00094 }
00095 
00096 template<typename ElementType>
00097 Matrix<ElementType>::Matrix(const string& name, const size_t nRows,
00098   const size_t nCols) : Matrix::Traits_(name), nRows_(nRows), nCols_(nCols)
00099 {
00100 }
00101 
00102 /*--------------------------------------------------------------------------
00103  * checkSize()
00104  *------------------------------------------------------------------------*/
00105 
00106 template<typename ElementType>
00107 void
00108 Matrix<ElementType>::checkSize(const size_t nRows, const size_t nCols) const
00109 {
00110   if (nRows_ != 0 && nRows_ != nRows)
00111     throw RuntimeError() & "Matrix assigned to key '" & Key::getName() &
00112       "' has wrong number of rows! Expecting " & nRows_ & " got " & nRows &
00113       ".";
00114 
00115   if (nCols_ != 0 && nCols_ != nCols)
00116     throw RuntimeError() & "Matrix assigned to key '" & Key::getName() &
00117       "' has wrong number of columns! Expecting " & nCols_ & " got " & nCols
00118       & ".";
00119 }
00120 
00121 } // namespace key
00122 } // namespace keyvalue
00123 
00124 #endif // KEYVALUE_KEY_GENERIC_MATRIX_H_

Generated on Sat Mar 20 15:08:29 2010 for KeyValue by  doxygen 1.6.1