diff options
| author | Peng Wu <alexepico@gmail.com> | 2016-02-24 14:03:00 +0800 |
|---|---|---|
| committer | Peng Wu <alexepico@gmail.com> | 2016-02-24 14:03:00 +0800 |
| commit | 3636f34f41b174fb34bf9331bb742a9d7bc4d4fb (patch) | |
| tree | f3bb64aaa299f491c57c3a51b17f422d9c8acc3e | |
| parent | 707a5a875ac570929cf8dab8f34e4769ee00099e (diff) | |
| download | libpinyin-3636f34f41b174fb34bf9331bb742a9d7bc4d4fb.tar.gz libpinyin-3636f34f41b174fb34bf9331bb742a9d7bc4d4fb.tar.xz libpinyin-3636f34f41b174fb34bf9331bb742a9d7bc4d4fb.zip | |
write pinyin_compare_*3 functions
| -rw-r--r-- | src/storage/pinyin_phrase3.h | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/src/storage/pinyin_phrase3.h b/src/storage/pinyin_phrase3.h index fb6c769..051e24d 100644 --- a/src/storage/pinyin_phrase3.h +++ b/src/storage/pinyin_phrase3.h @@ -60,6 +60,47 @@ inline int pinyin_exact_compare2(const ChewingKey * key_lhs, return 0; } +/* compare pinyins with chewing internal representations, + fuzzy pinyin is not handled here. */ +inline int pinyin_compare_initial3(ChewingInitial lhs, + ChewingInitial rhs) { + return (lhs - rhs); +} + +inline int pinyin_compare_middle_and_final3(ChewingMiddle middle_lhs, + ChewingMiddle middle_rhs, + ChewingFinal final_lhs, + ChewingFinal final_rhs) { + if (middle_lhs == middle_rhs && final_lhs == final_rhs) + return 0; + + /* handle in-complete pinyin here. */ + if (middle_lhs == CHEWING_ZERO_MIDDLE && + final_lhs == CHEWING_ZERO_FINAL) + return 0; + if (middle_rhs == CHEWING_ZERO_MIDDLE && + final_rhs == CHEWING_ZERO_FINAL) + return 0; + + /* compare chewing middle first. */ + int middle_diff = middle_lhs - middle_rhs; + if (middle_diff) + return middle_diff; + + return (final_lhs - final_rhs); +} + +inline int pinyin_compare_tone3(ChewingTone lhs, + ChewingTone rhs) { + if (lhs == rhs) + return 0; + if (lhs == CHEWING_ZERO_TONE) + return 0; + if (rhs == CHEWING_ZERO_TONE) + return 0; + return (lhs - rhs); +} + template<size_t phrase_length> struct PinyinIndexItem2{ |
