libzed 1.9.9
A general-purpose library for quick and simple data manipulation.
 
Loading...
Searching...
No Matches
compare.hpp
1#pragma once
2
3#include "typeChecks.hpp"
4#include <cstring>
5
6namespace z {
7namespace core {
8template <typename T>
9static typename std::enable_if<types::equalExists<T>::value, bool>::type equals(const T &arg1, const T &arg2) noexcept {
10 return arg1 == arg2;
11}
12
13template <typename T>
14static typename std::enable_if<!types::equalExists<T>::value, bool>::type equals(const T &arg1, const T &arg2) noexcept {
15 return !std::memcmp(&arg1, &arg2, sizeof(T));
16}
17
18template <typename T>
19static typename std::enable_if<types::greaterExists<T>::value, bool>::type greater(const T &arg1, const T &arg2) noexcept {
20 return arg1 > arg2;
21}
22
23template <typename T>
24static typename std::enable_if<!types::greaterExists<T>::value, bool>::type greater(const T &arg1, const T &arg2) noexcept {
25 return std::memcmp(&arg1, &arg2, sizeof(T)) > 0;
26}
27
28template <typename T>
29static typename std::enable_if<types::lesserExists<T>::value, bool>::type lesser(const T &arg1, const T &arg2) noexcept {
30 return arg1 < arg2;
31}
32
33template <typename T>
34static typename std::enable_if<!types::lesserExists<T>::value, bool>::type lesser(const T &arg1, const T &arg2) noexcept {
35 return std::memcmp(&arg1, &arg2, sizeof(T)) < 0;
36}
37} // namespace core
38} // namespace z