From 4e435b044c18da78fe0d0aceb06bb15060ccea2d Mon Sep 17 00:00:00 2001 From: Simon Rozman Date: Fri, 13 May 2016 10:16:23 +0200 Subject: [PATCH] Additional operators --- lib/libZRCola/include/zrcola/character.h | 77 ++++++++++++++++++++++-- 1 file changed, 73 insertions(+), 4 deletions(-) diff --git a/lib/libZRCola/include/zrcola/character.h b/lib/libZRCola/include/zrcola/character.h index 10cef5d..9afa7b3 100644 --- a/lib/libZRCola/include/zrcola/character.h +++ b/lib/libZRCola/include/zrcola/character.h @@ -49,6 +49,12 @@ namespace ZRCola { data[1] = src.data[1]; return *this; } + + inline chrcatid_t& operator=(const char *src) + { + data[1] = (data[0] = src[0]) != 0 ? src[1] : 0; + return *this; + } }; @@ -58,6 +64,40 @@ namespace ZRCola { const chrcatid_t chrcatid_t_blank = {}; + /// + /// Compares two character category IDs + /// + /// \param[in] a First character category ID + /// \param[in] b Second character category ID + /// + /// \returns + /// - true when \p a == \p b + /// - false otherwise + /// + inline bool operator==(const chrcatid_t &a, const chrcatid_t & b) + { + return + a.data[0] == b.data[0] && + (a.data[0] == 0 || a.data[1] == b.data[1]); + } + + + /// + /// Compares two character category IDs + /// + /// \param[in] a First character category ID + /// \param[in] b Second character category ID + /// + /// \returns + /// - true when \p a != \p b + /// - false otherwise + /// + inline bool operator!=(const chrcatid_t &a, const chrcatid_t & b) + { + return !operator==(a, b); + } + + /// /// Compares two character category IDs /// @@ -89,10 +129,39 @@ namespace ZRCola { /// inline bool operator>(const chrcatid_t& a, const chrcatid_t& b) { - if (a.data[0] > b.data[0]) return true; - else if (a.data[0] < b.data[0]) return false; - else if (a.data[1] > b.data[1]) return true; - else return false; + return operator<(b, a); + } + + + /// + /// Compares two character category IDs + /// + /// \param[in] a First character category ID + /// \param[in] b Second character category ID + /// + /// \returns + /// - true when \p a <= \p b + /// - false otherwise + /// + inline bool operator<=(const chrcatid_t &a, const chrcatid_t & b) + { + return !operator>(a, b); + } + + + /// + /// Compares two character category IDs + /// + /// \param[in] a First character category ID + /// \param[in] b Second character category ID + /// + /// \returns + /// - true when \p a >= \p b + /// - false otherwise + /// + inline bool operator>=(const chrcatid_t &a, const chrcatid_t & b) + { + return !operator<(a, b); }