aboutsummaryrefslogtreecommitdiff
path: root/include/cru/common
diff options
context:
space:
mode:
Diffstat (limited to 'include/cru/common')
-rw-r--r--include/cru/common/Base.hpp25
-rw-r--r--include/cru/common/String.hpp5
2 files changed, 30 insertions, 0 deletions
diff --git a/include/cru/common/Base.hpp b/include/cru/common/Base.hpp
index 5ed1e763..2f76385e 100644
--- a/include/cru/common/Base.hpp
+++ b/include/cru/common/Base.hpp
@@ -42,6 +42,31 @@
classname() = default; \
~classname() override = default;
+#define CRU_DEFINE_COMPARE_OPERATORS(classname) \
+ inline bool operator==(const classname& left, const classname& right) { \
+ return left.Compare(right) == 0; \
+ } \
+ \
+ inline bool operator!=(const classname& left, const classname& right) { \
+ return left.Compare(right) != 0; \
+ } \
+ \
+ inline bool operator<(const classname& left, const classname& right) { \
+ return left.Compare(right) < 0; \
+ } \
+ \
+ inline bool operator<=(const classname& left, const classname& right) { \
+ return left.Compare(right) <= 0; \
+ } \
+ \
+ inline bool operator>(const classname& left, const classname& right) { \
+ return left.Compare(right) > 0; \
+ } \
+ \
+ inline bool operator>=(const classname& left, const classname& right) { \
+ return left.Compare(right) >= 0; \
+ }
+
namespace cru {
class CRU_BASE_API Object {
public:
diff --git a/include/cru/common/String.hpp b/include/cru/common/String.hpp
index e779e3a6..c8defd13 100644
--- a/include/cru/common/String.hpp
+++ b/include/cru/common/String.hpp
@@ -139,6 +139,8 @@ class CRU_BASE_API String {
std::string ToUtf8() const;
+ int Compare(const String& other) const;
+
private:
static std::uint16_t kEmptyBuffer[1];
@@ -147,4 +149,7 @@ class CRU_BASE_API String {
Index size_ = 0; // not including trailing '\0'
Index capacity_ = 0; // always 1 smaller than real buffer size
};
+
+CRU_DEFINE_COMPARE_OPERATORS(String)
+
} // namespace cru