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/deprecate.h"
00030 #include "yat/utility/Index.h"
00031 #include "yat/utility/iterator_traits.h"
00032 #include "yat/utility/Matrix.h"
00033 #include "yat/utility/SmartPtr.h"
00034
00035 #include <boost/iterator/permutation_iterator.hpp>
00036
00037 #include <iosfwd>
00038 #include <vector>
00039
00040 namespace theplu {
00041 namespace yat {
00042 namespace classifier {
00043
00070 class MatrixLookup
00071 {
00072 public:
00078 typedef utility::Matrix::value_type value_type;
00079
00085 typedef utility::Matrix::const_reference const_reference;
00086
00088 typedef utility::Container2DIterator<const MatrixLookup, const double,
00089 const_reference>
00090 const_iterator;
00091
00095 typedef boost::permutation_iterator<utility::Matrix::const_column_iterator,
00096 utility::Index::const_iterator>
00097 const_column_iterator;
00098
00102 typedef const_column_iterator const_row_iterator;
00103
00118 MatrixLookup(const utility::Matrix& matrix, const bool own=false);
00119
00133 MatrixLookup(const utility::Matrix& matrix, const utility::Index& row,
00134 const utility::Index& column);
00135
00157 MatrixLookup(const utility::Matrix& matrix,
00158 const utility::Index& index,
00159 const bool row_vectors) YAT_DEPRECATE;
00160
00171 MatrixLookup(const MatrixLookup& other);
00172
00197 MatrixLookup(const MatrixLookup& ml, const utility::Index& row,
00198 const utility::Index& column);
00199
00226 MatrixLookup(const MatrixLookup& ml, const utility::Index&,
00227 const bool row_vectors);
00228
00234 MatrixLookup(const size_t rows, const size_t columns, const double value=0);
00235
00246 MatrixLookup(std::istream&, char sep='\0');
00247
00254 virtual ~MatrixLookup();
00255
00262 const_iterator begin(void) const;
00263
00269 const_column_iterator begin_column(size_t) const;
00270
00276 const_row_iterator begin_row(size_t) const;
00277
00281 size_t columns(void) const;
00282
00286 const_iterator end(void) const;
00287
00291 const_column_iterator end_column(size_t) const;
00292
00296 const_row_iterator end_row(size_t) const;
00297
00301 size_t rows(void) const;
00302
00306 bool weighted(void) const;
00307
00313 const_reference operator()(size_t row, size_t column) const;
00314
00323 const MatrixLookup& operator=(const MatrixLookup&);
00324
00325 private:
00326 friend class MatrixLookupWeighted;
00327
00328 utility::Index column_index_;
00329 typedef utility::SmartPtr<const utility::Matrix> MatrixP;
00330 MatrixP data_;
00331 utility::Index row_index_;
00332
00333
00334 bool validate(void) const;
00335 };
00336
00342 std::ostream& operator<< (std::ostream& s, const MatrixLookup&);
00343
00344 }}}
00345
00346 #endif