| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
|
|
| #ifndef MERT_FEATURE_DATA_ITERATOR_H_ |
| #define MERT_FEATURE_DATA_ITERATOR_H_ |
|
|
| |
| |
| |
|
|
| #include <fstream> |
| #include <map> |
| #include <stdexcept> |
| #include <vector> |
|
|
| #include <boost/iterator/iterator_facade.hpp> |
| #include <boost/shared_ptr.hpp> |
|
|
| #include "util/exception.hh" |
| #include "util/string_piece.hh" |
|
|
| #include "FeatureStats.h" |
|
|
| namespace util |
| { |
| class FilePiece; |
| } |
|
|
| namespace MosesTuning |
| { |
|
|
|
|
| class FileFormatException : public util::Exception |
| { |
| public: |
| explicit FileFormatException(const std::string& filename, const std::string& line) { |
| *this << "Error in line \"" << line << "\" of " << filename; |
| } |
| }; |
|
|
|
|
| |
| int ParseInt(const StringPiece& str ); |
|
|
| |
| float ParseFloat(const StringPiece& str); |
|
|
|
|
| class FeatureDataItem |
| { |
| public: |
| std::vector<float> dense; |
| SparseVector sparse; |
| }; |
|
|
| bool operator==(FeatureDataItem const& item1, FeatureDataItem const& item2); |
| std::size_t hash_value(FeatureDataItem const& item); |
|
|
| class FeatureDataIterator : |
| public boost::iterator_facade<FeatureDataIterator, |
| const std::vector<FeatureDataItem>, |
| boost::forward_traversal_tag> |
| { |
| public: |
| FeatureDataIterator(); |
| explicit FeatureDataIterator(const std::string& filename); |
| ~FeatureDataIterator(); |
|
|
| static FeatureDataIterator end() { |
| return FeatureDataIterator(); |
| } |
|
|
|
|
| private: |
| friend class boost::iterator_core_access; |
|
|
| void increment(); |
| bool equal(const FeatureDataIterator& rhs) const; |
| const std::vector<FeatureDataItem>& dereference() const; |
|
|
| void readNext(); |
|
|
| boost::shared_ptr<util::FilePiece> m_in; |
| std::vector<FeatureDataItem> m_next; |
| }; |
|
|
| } |
|
|
| #endif |
|
|