00001 #ifndef _theplu_yat_classifier_matrix_lookup_
00002 #define _theplu_yat_classifier_matrix_lookup_
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028 #include "yat/utility/Container2DIterator.h"
00029 #include "yat/utility/Index.h"
00030 #include "yat/utility/iterator_traits.h"
00031 #include "yat/utility/Matrix.h"
00032 #include "yat/utility/SmartPtr.h"
00033
00034 #include <boost/iterator/permutation_iterator.hpp>
00035
00036 #include <iosfwd>
00037 #include <vector>
00038
00039 namespace theplu {
00040 namespace yat {
00041 namespace classifier {
00042
00069 class MatrixLookup
00070 {
00071 public:
00077 typedef utility::Matrix::value_type value_type;
00078
00084 typedef utility::Matrix::const_reference const_reference;
00085
00087 typedef utility::Container2DIterator<const MatrixLookup, value_type,
00088 const_reference>
00089 const_iterator;
00090
00094 typedef boost::permutation_iterator<utility::Matrix::const_column_iterator,
00095 utility::Index::const_iterator>
00096 const_column_iterator;
00097
00101 typedef const_column_iterator const_row_iterator;
00102
00117 MatrixLookup(const utility::Matrix& matrix, const bool own=false);
00118
00132 MatrixLookup(const utility::Matrix& matrix, const utility::Index& row,
00133 const utility::Index& column);
00134
00152 MatrixLookup(const utility::Matrix& matrix,
00153 const utility::Index& index,
00154 const bool row_vectors);
00155
00166 MatrixLookup(const MatrixLookup& other);
00167
00192 MatrixLookup(const MatrixLookup& ml, const utility::Index& row,
00193 const utility::Index& column);
00194
00217 MatrixLookup(const MatrixLookup& ml, const utility::Index&,
00218 const bool row_vectors);
00219
00225 MatrixLookup(const size_t rows, const size_t columns, const double value=0);
00226
00236 MatrixLookup(std::istream&, char sep='\0');
00237
00244 virtual ~MatrixLookup();
00245
00252 const_iterator begin(void) const;
00253
00259 const_column_iterator begin_column(size_t) const;
00260
00266 const_row_iterator begin_row(size_t) const;
00267
00271 size_t columns(void) const;
00272
00276 const_iterator end(void) const;
00277
00281 const_column_iterator end_column(size_t) const;
00282
00286 const_row_iterator end_row(size_t) const;
00287
00291 size_t rows(void) const;
00292
00296 bool weighted(void) const;
00297
00303 const_reference operator()(size_t row, size_t column) const;
00304
00313 const MatrixLookup& operator=(const MatrixLookup&);
00314
00315 private:
00316 friend class MatrixLookupWeighted;
00317
00318 utility::Index column_index_;
00319 typedef utility::SmartPtr<const utility::Matrix> MatrixP;
00320 MatrixP data_;
00321 utility::Index row_index_;
00322
00323
00324 bool validate(void) const;
00325 };
00326
00332 std::ostream& operator<< (std::ostream& s, const MatrixLookup&);
00333
00334 }}}
00335
00336 #endif