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