diff options
| author | Kenneth Heafield <github@kheafield.com> | 2013-01-18 17:12:51 +0000 | 
|---|---|---|
| committer | Kenneth Heafield <github@kheafield.com> | 2013-01-18 17:12:51 +0000 | 
| commit | d884099e0db8b4510847ec106b59ef7dca3c245b (patch) | |
| tree | b45a3f17eb002e224a7b728e0f985a15e2503196 /klm/lm/builder/ngram_stream.hh | |
| parent | bae5fe99037ae7e101953ad0df118127191c711c (diff) | |
KenLM dffafbf with lmplz source (but not built)
Diffstat (limited to 'klm/lm/builder/ngram_stream.hh')
| -rw-r--r-- | klm/lm/builder/ngram_stream.hh | 55 | 
1 files changed, 55 insertions, 0 deletions
diff --git a/klm/lm/builder/ngram_stream.hh b/klm/lm/builder/ngram_stream.hh new file mode 100644 index 00000000..3c994664 --- /dev/null +++ b/klm/lm/builder/ngram_stream.hh @@ -0,0 +1,55 @@ +#ifndef LM_BUILDER_NGRAM_STREAM__ +#define LM_BUILDER_NGRAM_STREAM__ + +#include "lm/builder/ngram.hh" +#include "util/stream/chain.hh" +#include "util/stream/stream.hh" + +#include <cstddef> + +namespace lm { namespace builder { + +class NGramStream { +  public: +    NGramStream() : gram_(NULL, 0) {} + +    NGramStream(const util::stream::ChainPosition &position) : gram_(NULL, 0) { +      Init(position); +    } + +    void Init(const util::stream::ChainPosition &position) { +      stream_.Init(position); +      gram_ = NGram(stream_.Get(), NGram::OrderFromSize(position.GetChain().EntrySize())); +    } + +    NGram &operator*() { return gram_; } +    const NGram &operator*() const { return gram_; } + +    NGram *operator->() { return &gram_; } +    const NGram *operator->() const { return &gram_; } + +    void *Get() { return stream_.Get(); } +    const void *Get() const { return stream_.Get(); } + +    operator bool() const { return stream_; } +    bool operator!() const { return !stream_; } +    void Poison() { stream_.Poison(); } + +    NGramStream &operator++() { +      ++stream_; +      gram_.ReBase(stream_.Get()); +      return *this; +    } + +  private: +    NGram gram_; +    util::stream::Stream stream_; +}; + +inline util::stream::Chain &operator>>(util::stream::Chain &chain, NGramStream &str) { +  str.Init(chain.Add()); +  return chain; +} + +}} // namespaces +#endif // LM_BUILDER_NGRAM_STREAM__  | 
