dic_node_profiler.h revision 38c26dd0bf8cd5c4511e4a02d5eeae4b3553f03a
1/* 2 * Copyright (C) 2012 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17#ifndef LATINIME_DIC_NODE_PROFILER_H 18#define LATINIME_DIC_NODE_PROFILER_H 19 20#include "defines.h" 21 22#if DEBUG_DICT 23#define PROF_SPACE_SUBSTITUTION(profiler) profiler.profSpaceSubstitution() 24#define PROF_SPACE_OMISSION(profiler) profiler.profSpaceOmission() 25#define PROF_ADDITIONAL_PROXIMITY(profiler) profiler.profAdditionalProximity() 26#define PROF_SUBSTITUTION(profiler) profiler.profSubstitution() 27#define PROF_OMISSION(profiler) profiler.profOmission() 28#define PROF_INSERTION(profiler) profiler.profInsertion() 29#define PROF_MATCH(profiler) profiler.profMatch() 30#define PROF_COMPLETION(profiler) profiler.profCompletion() 31#define PROF_TRANSPOSITION(profiler) profiler.profTransposition() 32#define PROF_NEARESTKEY(profiler) profiler.profNearestKey() 33#define PROF_TERMINAL(profiler) profiler.profTerminal() 34#define PROF_NEW_WORD(profiler) profiler.profNewWord() 35#define PROF_NEW_WORD_BIGRAM(profiler) profiler.profNewWordBigram() 36#define PROF_NODE_RESET(profiler) profiler.reset() 37#define PROF_NODE_COPY(src, dest) dest.copy(src) 38#else 39#define PROF_SPACE_SUBSTITUTION(profiler) 40#define PROF_SPACE_OMISSION(profiler) 41#define PROF_ADDITONAL_PROXIMITY(profiler) 42#define PROF_SUBSTITUTION(profiler) 43#define PROF_OMISSION(profiler) 44#define PROF_INSERTION(profiler) 45#define PROF_MATCH(profiler) 46#define PROF_COMPLETION(profiler) 47#define PROF_TRANSPOSITION(profiler) 48#define PROF_NEARESTKEY(profiler) 49#define PROF_TERMINAL(profiler) 50#define PROF_NEW_WORD(profiler) 51#define PROF_NEW_WORD_BIGRAM(profiler) 52#define PROF_NODE_RESET(profiler) 53#define PROF_NODE_COPY(src, dest) 54#endif 55 56namespace latinime { 57 58class DicNodeProfiler { 59 public: 60#if DEBUG_DICT 61 AK_FORCE_INLINE DicNodeProfiler() 62 : mProfOmission(0), mProfInsertion(0), mProfTransposition(0), 63 mProfAdditionalProximity(0), mProfSubstitution(0), 64 mProfSpaceSubstitution(0), mProfSpaceOmission(0), 65 mProfMatch(0), mProfCompletion(0), mProfTerminal(0), 66 mProfNearestKey(0), mProfNewWord(0), mProfNewWordBigram(0) {} 67 68 int mProfOmission; 69 int mProfInsertion; 70 int mProfTransposition; 71 int mProfAdditionalProximity; 72 int mProfSubstitution; 73 int mProfSpaceSubstitution; 74 int mProfSpaceOmission; 75 int mProfMatch; 76 int mProfCompletion; 77 int mProfTerminal; 78 int mProfNearestKey; 79 int mProfNewWord; 80 int mProfNewWordBigram; 81 82 void profSpaceSubstitution() { 83 ++mProfSpaceSubstitution; 84 } 85 86 void profSpaceOmission() { 87 ++mProfSpaceOmission; 88 } 89 90 void profAdditionalProximity() { 91 ++mProfAdditionalProximity; 92 } 93 94 void profSubstitution() { 95 ++mProfSubstitution; 96 } 97 98 void profOmission() { 99 ++mProfOmission; 100 } 101 102 void profInsertion() { 103 ++mProfInsertion; 104 } 105 106 void profMatch() { 107 ++mProfMatch; 108 } 109 110 void profCompletion() { 111 ++mProfCompletion; 112 } 113 114 void profTransposition() { 115 ++mProfTransposition; 116 } 117 118 void profNearestKey() { 119 ++mProfNearestKey; 120 } 121 122 void profTerminal() { 123 ++mProfTerminal; 124 } 125 126 void profNewWord() { 127 ++mProfNewWord; 128 } 129 130 void profNewWordBigram() { 131 ++mProfNewWordBigram; 132 } 133 134 void reset() { 135 mProfSpaceSubstitution = 0; 136 mProfSpaceOmission = 0; 137 mProfAdditionalProximity = 0; 138 mProfSubstitution = 0; 139 mProfOmission = 0; 140 mProfInsertion = 0; 141 mProfMatch = 0; 142 mProfCompletion = 0; 143 mProfTransposition = 0; 144 mProfNearestKey = 0; 145 mProfTerminal = 0; 146 mProfNewWord = 0; 147 mProfNewWordBigram = 0; 148 } 149 150 void copy(const DicNodeProfiler *const profiler) { 151 mProfSpaceSubstitution = profiler->mProfSpaceSubstitution; 152 mProfSpaceOmission = profiler->mProfSpaceOmission; 153 mProfAdditionalProximity = profiler->mProfAdditionalProximity; 154 mProfSubstitution = profiler->mProfSubstitution; 155 mProfOmission = profiler->mProfOmission; 156 mProfInsertion = profiler->mProfInsertion; 157 mProfMatch = profiler->mProfMatch; 158 mProfCompletion = profiler->mProfCompletion; 159 mProfTransposition = profiler->mProfTransposition; 160 mProfNearestKey = profiler->mProfNearestKey; 161 mProfTerminal = profiler->mProfTerminal; 162 mProfNewWord = profiler->mProfNewWord; 163 mProfNewWordBigram = profiler->mProfNewWordBigram; 164 } 165 166 void dump() const { 167 AKLOGI("O %d, I %d, T %d, AP %d, S %d, SS %d, SO %d, M %d, C %d, TE %d, NW = %d, NWB = %d", 168 mProfOmission, mProfInsertion, mProfTransposition, mProfAdditionalProximity, 169 mProfSubstitution, mProfSpaceSubstitution, mProfSpaceOmission, mProfMatch, 170 mProfCompletion, mProfTerminal, mProfNewWord, mProfNewWordBigram); 171 } 172#else 173 DicNodeProfiler() {} 174#endif 175 private: 176 // Caution!!! 177 // Use a default copy constructor and an assign operator because shallow copies are ok 178 // for this class 179}; 180} 181#endif // LATINIME_DIC_NODE_PROFILER_H 182