Ignore:
Timestamp:
Feb 27, 2008, 1:06:55 AM (14 years ago)
Author:
Peter
Message:

removing DataLookup2D closes ticket:243

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/yat/classifier/MatrixLookup.cc

    r1169 r1170  
    3030#include <cassert>
    3131#include <fstream>
     32#include <vector>
    3233
    3334namespace theplu {
     
    3637
    3738  MatrixLookup::MatrixLookup(const utility::Matrix& data, const bool own)
    38     : DataLookup2D(own), data_(MatrixP(&data, own))
     39    : data_(MatrixP(&data, own))
    3940  {
    4041    column_index_ = utility::Index(data.columns());
    4142    row_index_ = utility::Index(data.rows());
     43    assert(rows()==data.rows());
     44    assert(columns()==data.columns());
     45    assert(validate());
    4246  }
    4347 
     
    4751                             const utility::Index& row,
    4852                             const utility::Index& col)
    49     : DataLookup2D(row,col), data_(MatrixP(&data, false))
    50   {
     53    : column_index_(col),
     54      data_(MatrixP(&data, false)),
     55      row_index_(row)
     56
     57  {
     58    assert(rows()==row.size());
     59    assert(columns()==col.size());
     60    assert(validate());
    5161  }
    5262 
     
    5666                             const utility::Index& index,
    5767                             const bool row)
    58     : DataLookup2D(), data_(MatrixP(&data, false))
     68    : data_(MatrixP(&data, false))
    5969  {
    6070    if (row){
     
    6676      row_index_ = utility::Index(data.rows());
    6777    }
     78    assert(row || rows()==data.rows());
     79    assert(row || columns()==index.size());
     80    assert(!row || rows()==index.size());
     81    assert(!row || columns()==data.columns());
     82    assert(validate());
    6883  }
    6984 
     
    7186
    7287  MatrixLookup::MatrixLookup(const MatrixLookup& other)
    73     : DataLookup2D(other), data_(other.data_)
    74   {
     88    : column_index_(other.column_index_),
     89      data_(other.data_),
     90      row_index_(other.row_index_)
     91  {
     92    assert(validate());
    7593  }
    7694
     
    8098                             const utility::Index& row,
    8199                             const utility::Index& col)
    82     : DataLookup2D(other,row,col), data_(other.data_)
    83   {
     100    : column_index_(utility::Index(other.column_index_, col)),
     101      data_(other.data_), row_index_(utility::Index(other.row_index_, row))
     102  {
     103    assert(rows()==row.size());
     104    assert(columns()==col.size());
     105    assert(validate());
    84106  }
    85107 
     
    88110  MatrixLookup::MatrixLookup(const MatrixLookup& other,
    89111                             const utility::Index& index, bool row)
    90     : DataLookup2D(other,index,row), data_(other.data_)
    91   {
     112    : data_(other.data_)
     113  {
     114    if (row){
     115      row_index_ = utility::Index(other.row_index_, index);
     116      column_index_= other.column_index_;
     117    }
     118    else{
     119      column_index_ = utility::Index(other.column_index_, index);
     120      row_index_= other.row_index_;
     121    }
     122    assert(validate());
    92123  }
    93124 
     
    96127  MatrixLookup::MatrixLookup(const size_t rows, const size_t columns,
    97128                             const double value)
    98     : DataLookup2D(rows,columns)
    99   {
    100     data_ = MatrixP(new utility::Matrix(1,1,value));
     129    : data_(MatrixP(new utility::Matrix(1,1,value)))
     130  {   
     131    column_index_ = utility::Index(std::vector<size_t>(columns, 0));
     132    row_index_ = utility::Index(std::vector<size_t>(rows,0));
     133    assert(validate());
    101134  }
    102135
    103136
    104137  MatrixLookup::MatrixLookup(std::istream& is, char sep)
    105     : DataLookup2D()
    106   {
    107     data_ = MatrixP(new utility::Matrix(is,sep));
     138    : data_(MatrixP(new utility::Matrix(is,sep)))
     139  {
     140    column_index_ = utility::Index(data_->columns());
    108141    row_index_ = utility::Index(data_->rows());
    109     column_index_ = utility::Index(data_->columns());
     142    assert(validate());
    110143  }
    111144
     
    133166  {
    134167    return const_row_iterator(const_row_iterator::iterator_type(*this,i,0), 1);
     168  }
     169
     170
     171  size_t MatrixLookup::columns(void) const
     172  {
     173    return column_index_.size();
    135174  }
    136175
     
    157196
    158197
     198  size_t MatrixLookup::rows(void) const
     199  {
     200    return row_index_.size();
     201  }
     202
     203
     204  bool MatrixLookup::validate(void) const
     205  {
     206    for (size_t i=0; i<row_index_.size(); ++i)
     207      if (row_index_[i]>=data_->rows())
     208        return false;
     209    for (size_t i=0; i<column_index_.size(); ++i)
     210      if (column_index_[i]>=data_->columns())
     211        return false;
     212    return true;
     213  }
     214
     215
    159216  bool MatrixLookup::weighted(void) const
    160217  {
     
    168225    assert(row<rows());
    169226    assert(column<columns());
     227    assert(row_index_[row]<data_->rows());
     228    assert(column_index_[column]<data_->columns());
    170229    return (*data_)(row_index_[row], column_index_[column]);
    171230  }
     
    176235  {
    177236    if (this!=&other){
    178       DataLookup2D::operator=(other);
     237      row_index_ = other.row_index_;
     238      column_index_ = other.column_index_;
    179239      data_ = other.data_;
    180240    }
     241    assert(validate());
    181242    return *this;
    182243  }
Note: See TracChangeset for help on using the changeset viewer.