diff options
author | Peng Wu <alexepico@gmail.com> | 2011-11-17 15:32:52 +0800 |
---|---|---|
committer | Peng Wu <alexepico@gmail.com> | 2011-11-17 15:33:28 +0800 |
commit | 96b2e5ba48baa9ada8e64eba9ad43001a90524ce (patch) | |
tree | 9d5b20b0475a78cc142e14faa9d1075ff9470a9f /src | |
parent | a9864c66724dc3a74324afc2a28ca801c6ca7477 (diff) | |
download | libpinyin-96b2e5ba48baa9ada8e64eba9ad43001a90524ce.tar.gz libpinyin-96b2e5ba48baa9ada8e64eba9ad43001a90524ce.tar.xz libpinyin-96b2e5ba48baa9ada8e64eba9ad43001a90524ce.zip |
add pinyin compare 2
Diffstat (limited to 'src')
-rw-r--r-- | src/storage/pinyin_parser2.h | 22 | ||||
-rw-r--r-- | src/storage/pinyin_phrase2.h | 87 |
2 files changed, 98 insertions, 11 deletions
diff --git a/src/storage/pinyin_parser2.h b/src/storage/pinyin_parser2.h index c517f7b..948e31e 100644 --- a/src/storage/pinyin_parser2.h +++ b/src/storage/pinyin_parser2.h @@ -186,9 +186,9 @@ public: /* compare pinyins with chewing internal representations. */ -int pinyin_compare_initial2 (guint32 options, - ChewingInitial lhs, - ChewingInitial rhs){ +inline int pinyin_compare_initial2 (guint32 options, + ChewingInitial lhs, + ChewingInitial rhs){ if (lhs == rhs) return 0; @@ -231,11 +231,11 @@ int pinyin_compare_initial2 (guint32 options, } -int pinyin_compare_middle_and_final2 (guint32 options, - ChewingMiddle middle_lhs, - ChewingMiddle middle_rhs, - ChewingFinal final_lhs, - ChewingFinal final_rhs){ +inline int pinyin_compare_middle_and_final2 (guint32 options, + ChewingMiddle middle_lhs, + ChewingMiddle middle_rhs, + ChewingFinal final_lhs, + ChewingFinal final_rhs){ if (middle_lhs == middle_rhs && final_lhs == final_rhs) return 0; @@ -273,9 +273,9 @@ int pinyin_compare_middle_and_final2 (guint32 options, } -int pinyin_compare_tone2 (guint32 options, - ChewingTone lhs, - ChewingTone rhs){ +inline int pinyin_compare_tone2 (guint32 options, + ChewingTone lhs, + ChewingTone rhs){ if (lhs == rhs) return 0; if (lhs == CHEWING_ZERO_TONE) diff --git a/src/storage/pinyin_phrase2.h b/src/storage/pinyin_phrase2.h index 49a2fa8..0f96856 100644 --- a/src/storage/pinyin_phrase2.h +++ b/src/storage/pinyin_phrase2.h @@ -19,3 +19,90 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ +#ifndef PINYIN_PARSER2_H +#define PINYIN_PARSER2_H + +#include "chewing_key.h" +#include "pinyin_parser2.h" + +namespace pinyin{ + +inline int pinyin_exact_compare2(const ChewingKey * key_lhs, + const ChewingKey * key_rhs, + int phrase_length){ + int i; + int result; + + /* compare initial */ + for (i = 0; i < phrase_length; ++i) { + result = key_lhs[i].m_initial - key_rhs[i].m_initial; + if (0 != result) + return result; + } + + /* compare middle and final */ + for (i = 0; i < phrase_length; ++i) { + result = key_lhs[i].m_middle - key_rhs[i].m_middle; + if (0 != result) + return result; + result = key_lhs[i].m_final - key_rhs[i].m_final; + if (0 != result) + return result; + } + + /* compare tone */ + for (i = 0; i < phrase_length; ++i) { + result = key_lhs[i].m_tone - key_rhs[i].m_tone; + if (0 != result) + return result; + } + + return 0; +} + + +inline int pinyin_compare_with_ambiguities2(guint32 options, + const ChewingKey * key_lhs, + const ChewingKey * key_rhs, + int phrase_length){ + int i; + int result; + + /* compare initial */ + for (i = 0; i < phrase_length; ++i) { + result = pinyin_compare_initial2 + (options, + (ChewingInitial)key_lhs[i].m_initial, + (ChewingInitial)key_rhs[i].m_initial); + if (0 != result) + return result; + } + + /* compare middle and final */ + for (i = 0; i < phrase_length; ++i) { + result = pinyin_compare_middle_and_final2 + (options, + (ChewingMiddle)key_lhs[i].m_middle, + (ChewingMiddle)key_rhs[i].m_middle, + (ChewingFinal) key_lhs[i].m_final, + (ChewingFinal) key_rhs[i].m_final); + if (0 != result) + return result; + } + + /* compare tone */ + for (i = 0; i < phrase_length; ++i) { + result = pinyin_compare_tone2 + (options, + (ChewingTone)key_lhs[i].m_tone, + (ChewingTone)key_rhs[i].m_tone); + if (0 != result) + return result; + } + + return 0; +} + +}; + +#endif |