Index: third_party/prediction/suggest/core/dicnode/dic_node_profiler.h |
diff --git a/third_party/prediction/suggest/core/dicnode/dic_node_profiler.h b/third_party/prediction/suggest/core/dicnode/dic_node_profiler.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..a87bb87ee547acbe3ca67bd053a71731eefe9854 |
--- /dev/null |
+++ b/third_party/prediction/suggest/core/dicnode/dic_node_profiler.h |
@@ -0,0 +1,173 @@ |
+/* |
+ * Copyright (C) 2012 The Android Open Source Project |
+ * |
+ * Licensed under the Apache License, Version 2.0 (the "License"); |
+ * you may not use this file except in compliance with the License. |
+ * You may obtain a copy of the License at |
+ * |
+ * http://www.apache.org/licenses/LICENSE-2.0 |
+ * |
+ * Unless required by applicable law or agreed to in writing, software |
+ * distributed under the License is distributed on an "AS IS" BASIS, |
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
+ * See the License for the specific language governing permissions and |
+ * limitations under the License. |
+ */ |
+ |
+#ifndef LATINIME_DIC_NODE_PROFILER_H |
+#define LATINIME_DIC_NODE_PROFILER_H |
+ |
+#include "third_party/prediction/defines.h" |
+ |
+#if DEBUG_DICT |
+#define PROF_SPACE_SUBSTITUTION(profiler) profiler.profSpaceSubstitution() |
+#define PROF_SPACE_OMISSION(profiler) profiler.profSpaceOmission() |
+#define PROF_ADDITIONAL_PROXIMITY(profiler) profiler.profAdditionalProximity() |
+#define PROF_SUBSTITUTION(profiler) profiler.profSubstitution() |
+#define PROF_OMISSION(profiler) profiler.profOmission() |
+#define PROF_INSERTION(profiler) profiler.profInsertion() |
+#define PROF_MATCH(profiler) profiler.profMatch() |
+#define PROF_COMPLETION(profiler) profiler.profCompletion() |
+#define PROF_TRANSPOSITION(profiler) profiler.profTransposition() |
+#define PROF_NEARESTKEY(profiler) profiler.profNearestKey() |
+#define PROF_TERMINAL(profiler) profiler.profTerminal() |
+#define PROF_TERMINAL_INSERTION(profiler) profiler.profTerminalInsertion() |
+#define PROF_NEW_WORD(profiler) profiler.profNewWord() |
+#define PROF_NEW_WORD_BIGRAM(profiler) profiler.profNewWordBigram() |
+#define PROF_NODE_RESET(profiler) profiler.reset() |
+#define PROF_NODE_COPY(src, dest) dest.copy(src) |
+#else |
+#define PROF_SPACE_SUBSTITUTION(profiler) |
+#define PROF_SPACE_OMISSION(profiler) |
+#define PROF_ADDITONAL_PROXIMITY(profiler) |
+#define PROF_SUBSTITUTION(profiler) |
+#define PROF_OMISSION(profiler) |
+#define PROF_INSERTION(profiler) |
+#define PROF_MATCH(profiler) |
+#define PROF_COMPLETION(profiler) |
+#define PROF_TRANSPOSITION(profiler) |
+#define PROF_NEARESTKEY(profiler) |
+#define PROF_TERMINAL(profiler) |
+#define PROF_TERMINAL_INSERTION(profiler) |
+#define PROF_NEW_WORD(profiler) |
+#define PROF_NEW_WORD_BIGRAM(profiler) |
+#define PROF_NODE_RESET(profiler) |
+#define PROF_NODE_COPY(src, dest) |
+#endif |
+ |
+namespace latinime { |
+ |
+class DicNodeProfiler { |
+ public: |
+#if DEBUG_DICT |
+ AK_FORCE_INLINE DicNodeProfiler() |
+ : mProfOmission(0), |
+ mProfInsertion(0), |
+ mProfTransposition(0), |
+ mProfAdditionalProximity(0), |
+ mProfSubstitution(0), |
+ mProfSpaceSubstitution(0), |
+ mProfSpaceOmission(0), |
+ mProfMatch(0), |
+ mProfCompletion(0), |
+ mProfTerminal(0), |
+ mProfTerminalInsertion(0), |
+ mProfNearestKey(0), |
+ mProfNewWord(0), |
+ mProfNewWordBigram(0) {} |
+ |
+ int mProfOmission; |
+ int mProfInsertion; |
+ int mProfTransposition; |
+ int mProfAdditionalProximity; |
+ int mProfSubstitution; |
+ int mProfSpaceSubstitution; |
+ int mProfSpaceOmission; |
+ int mProfMatch; |
+ int mProfCompletion; |
+ int mProfTerminal; |
+ int mProfTerminalInsertion; |
+ int mProfNearestKey; |
+ int mProfNewWord; |
+ int mProfNewWordBigram; |
+ |
+ void profSpaceSubstitution() { ++mProfSpaceSubstitution; } |
+ |
+ void profSpaceOmission() { ++mProfSpaceOmission; } |
+ |
+ void profAdditionalProximity() { ++mProfAdditionalProximity; } |
+ |
+ void profSubstitution() { ++mProfSubstitution; } |
+ |
+ void profOmission() { ++mProfOmission; } |
+ |
+ void profInsertion() { ++mProfInsertion; } |
+ |
+ void profMatch() { ++mProfMatch; } |
+ |
+ void profCompletion() { ++mProfCompletion; } |
+ |
+ void profTransposition() { ++mProfTransposition; } |
+ |
+ void profNearestKey() { ++mProfNearestKey; } |
+ |
+ void profTerminal() { ++mProfTerminal; } |
+ |
+ void profTerminalInsertion() { ++mProfTerminalInsertion; } |
+ |
+ void profNewWord() { ++mProfNewWord; } |
+ |
+ void profNewWordBigram() { ++mProfNewWordBigram; } |
+ |
+ void reset() { |
+ mProfSpaceSubstitution = 0; |
+ mProfSpaceOmission = 0; |
+ mProfAdditionalProximity = 0; |
+ mProfSubstitution = 0; |
+ mProfOmission = 0; |
+ mProfInsertion = 0; |
+ mProfMatch = 0; |
+ mProfCompletion = 0; |
+ mProfTransposition = 0; |
+ mProfNearestKey = 0; |
+ mProfTerminal = 0; |
+ mProfNewWord = 0; |
+ mProfNewWordBigram = 0; |
+ } |
+ |
+ void copy(const DicNodeProfiler* const profiler) { |
+ mProfSpaceSubstitution = profiler->mProfSpaceSubstitution; |
+ mProfSpaceOmission = profiler->mProfSpaceOmission; |
+ mProfAdditionalProximity = profiler->mProfAdditionalProximity; |
+ mProfSubstitution = profiler->mProfSubstitution; |
+ mProfOmission = profiler->mProfOmission; |
+ mProfInsertion = profiler->mProfInsertion; |
+ mProfMatch = profiler->mProfMatch; |
+ mProfCompletion = profiler->mProfCompletion; |
+ mProfTransposition = profiler->mProfTransposition; |
+ mProfNearestKey = profiler->mProfNearestKey; |
+ mProfTerminal = profiler->mProfTerminal; |
+ mProfNewWord = profiler->mProfNewWord; |
+ mProfNewWordBigram = profiler->mProfNewWordBigram; |
+ } |
+ |
+ void dump() const { |
+ 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", |
+ mProfOmission, mProfInsertion, mProfTransposition, |
+ mProfAdditionalProximity, mProfSubstitution, mProfSpaceSubstitution, |
+ mProfSpaceOmission, mProfMatch, mProfCompletion, mProfTerminal, |
+ mProfNewWord, mProfNewWordBigram); |
+ } |
+#else |
+ DicNodeProfiler() {} |
+#endif |
+ private: |
+ // Caution!!! |
+ // Use a default copy constructor and an assign operator because shallow |
+ // copies are ok |
+ // for this class |
+}; |
+} |
+#endif // LATINIME_DIC_NODE_PROFILER_H |