00001 #ifndef LM_BUILDER_ADJUST_COUNTS_H
00002 #define LM_BUILDER_ADJUST_COUNTS_H
00003
00004 #include "lm/builder/discount.hh"
00005 #include "lm/lm_exception.hh"
00006 #include "util/exception.hh"
00007
00008 #include <vector>
00009
00010 #include <stdint.h>
00011
00012 namespace util { namespace stream { class ChainPositions; } }
00013
00014 namespace lm {
00015 namespace builder {
00016
00017 class BadDiscountException : public util::Exception {
00018 public:
00019 BadDiscountException() throw();
00020 ~BadDiscountException() throw();
00021 };
00022
00023 struct DiscountConfig {
00024
00025 std::vector<Discount> overwrite;
00026
00027 Discount fallback;
00028
00029
00030 WarningAction bad_action;
00031 };
00032
00033
00034
00035
00036
00037
00038
00039 class AdjustCounts {
00040 public:
00041
00042
00043
00044
00045 AdjustCounts(
00046 const std::vector<uint64_t> &prune_thresholds,
00047 std::vector<uint64_t> &counts,
00048 std::vector<uint64_t> &counts_pruned,
00049 const std::vector<bool> &prune_words,
00050 const DiscountConfig &discount_config,
00051 std::vector<Discount> &discounts)
00052 : prune_thresholds_(prune_thresholds), counts_(counts), counts_pruned_(counts_pruned),
00053 prune_words_(prune_words), discount_config_(discount_config), discounts_(discounts)
00054 {}
00055
00056 void Run(const util::stream::ChainPositions &positions);
00057
00058 private:
00059 const std::vector<uint64_t> &prune_thresholds_;
00060 std::vector<uint64_t> &counts_;
00061 std::vector<uint64_t> &counts_pruned_;
00062 const std::vector<bool> &prune_words_;
00063
00064 DiscountConfig discount_config_;
00065 std::vector<Discount> &discounts_;
00066 };
00067
00068 }
00069 }
00070
00071 #endif // LM_BUILDER_ADJUST_COUNTS_H
00072