15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2006-2009 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef ENCODINGS_COMPACT_LANG_DET_TOTE_H_
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define ENCODINGS_COMPACT_LANG_DET_TOTE_H_
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <stdio.h>
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "encodings/compact_lang_det/win/cld_basictypes.h"
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Take a set of <key, value> pairs and tote them up.
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// After explicitly sorting, retrieve top key, value pairs
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class Tote {
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Tote();
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ~Tote();
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void Reinit();
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void AddGram();
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void Add(uint8 ikey, int idelta);
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void AddBytes(int ibytes) {byte_count_ += ibytes;}
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int CurrentTopKey();
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void Sort(int n);
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void Dump(FILE* f);
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  uint16 GetGramCount() const {return gram_count_;}
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  uint16 GetIncrCount() const {return incr_count_;}
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int GetByteCount() const {return byte_count_;}
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int MaxSize() const {return kMaxSize_;}
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  uint8 Key(int i) const {return key_[i];}
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int Value(int i) const {return value_[i];}
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void SetGramCount(uint16 v) {gram_count_ = v;}
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void SetIncrCount(uint16 v) {incr_count_ = v;}
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void SetKey(int i, int v) {key_[i] = v;}
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void SetValue(int i, int v) {value_[i] = v;}
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static const int kMaxSize_ = 24;
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  uint16 gram_count_;       // Number of quadgrams/etc. scored
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  uint16 incr_count_;       // Number of Add calls (1-3 per gram)
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int byte_count_;          // Bytes of text scored
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Align at multiple of 8 bytes
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  uint8 key_[kMaxSize_];    // Lang unassigned = 0, valid = 1..255
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int value_[kMaxSize_];    // Probability score sum
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Take a set of <key, value, reliability> triples and tote them up.
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// After explicitly sorting, retrieve top key, value, reliability triples
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ToteWithReliability {
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ToteWithReliability();
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ~ToteWithReliability();
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void Reinit();
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void Add(uint8 ikey, int ibytes, int score, int ireliability);
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int Find(uint8 ikey);
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void AddClosePair(int subscr, int val) {closepair_[subscr] += val;}
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int CurrentTopKey();
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void Sort(int n);
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void Dump(FILE* f);
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ////void AddSeq(uint8 ikey) {ss_.Add(ikey);}
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ////void ExtractSeq(int n, uint8* dst) {ss_.Extract(n, dst);}
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int GetIncrCount() const {return incr_count_;}
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int GetClosePair(int subscr) const {return closepair_[subscr];}
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int MaxSize() const {return kMaxSize_;}
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  uint8 Key(int i) const {return key_[i];}
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int Value(int i) const {return value_[i];}
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int Score(int i) const {return score_[i];}
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int Reliability(int i) const {return reliability_[i];}
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void SetKey(int i, int v) {key_[i] = v;}
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void SetValue(int i, int v) {value_[i] = v;}
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void SetScore(int i, int v) {score_[i] = v;}
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void SetReliability(int i, int v) {reliability_[i] = v;}
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static const int kMaxSize_ = 24;
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static const int kMaxClosePairSize_ = 8;
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int incr_count_;         // Number of Add calls
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int sorted_;             // Contents have been sorted, cannot Add
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Align at multiple of 8 bytes
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int closepair_[kMaxClosePairSize_];
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  uint8 key_[kMaxSize_];    // Lang unassigned = 0, valid = 1..255
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int value_[kMaxSize_];    // Bytecount this lang
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int score_[kMaxSize_];    // Probability score sum
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int reliability_[kMaxSize_];  // Percentage 0..100
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ////SubsetSequence ss_;
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // ENCODINGS_COMPACT_LANG_DET_TOTE_H_
90