summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPeng Wu <alexepico@gmail.com>2016-02-24 14:03:00 +0800
committerPeng Wu <alexepico@gmail.com>2016-02-24 14:03:00 +0800
commit3636f34f41b174fb34bf9331bb742a9d7bc4d4fb (patch)
treef3bb64aaa299f491c57c3a51b17f422d9c8acc3e
parent707a5a875ac570929cf8dab8f34e4769ee00099e (diff)
downloadlibpinyin-3636f34f41b174fb34bf9331bb742a9d7bc4d4fb.tar.gz
libpinyin-3636f34f41b174fb34bf9331bb742a9d7bc4d4fb.tar.xz
libpinyin-3636f34f41b174fb34bf9331bb742a9d7bc4d4fb.zip
write pinyin_compare_*3 functions
-rw-r--r--src/storage/pinyin_phrase3.h41
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{