Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
132 changes: 132 additions & 0 deletions lib/wlib/stl/Comparator.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,132 @@
#ifndef EMBEDDEDCPLUSPLUS_COMPARATOR_H
#define EMBEDDEDCPLUSPLUS_COMPARATOR_H

#include <stdint.h>

#include "../WlibConfig.h"
#include "Equal.h"

namespace wlp {

int8_t strcmp(const char *s1, const char *s2) {
for (; *s1 == *s2; ++s1, ++s2) {
if (*s1 == 0) {
return 0;
}
}
return *s2 - *s1;
}

template<typename T>
struct Comparator {
bool __lt__(const T t1, const T t2) const {
return t1 < t2;
}
bool __le__(const T t1, const T t2) const {
return t1 <= t2;
}
bool __eq__(const T t1, const T t2) const {
return t1 == t2;
}
bool __ne__(const T t1, const T t2) const {
return t1 != t2;
}
bool __gt__(const T t1, const T t2) const {
return t1 > t2;
}
bool __ge__(const T t1, const T t2) const {
return t1 >= t2;
}
};

TEMPLATE_NULL
struct Comparator<char *> {
bool __lt__(const char *s1, const char *s2) {
return strcmp(s1, s2) < 0;
}
bool __le__(const char *s1, const char *s2) {
return strcmp(s1, s2) <= 0;
}
bool __eq__(const char *s1, const char *s2) {
return strcmp(s1, s2) == 0;
}
bool __ne__(const char *s1, const char *s2) {
return strcmp(s1, s2) != 0;
}
bool __gt__(const char *s1, const char *s2) {
return strcmp(s1, s2) > 0;
}
bool __ge__(const char *s1, const char *s2) {
return strcmp(s1, s2) >= 0;
}
};

TEMPLATE_NULL
struct Comparator<const char *> {
bool __lt__(const char *s1, const char *s2) {
return strcmp(s1, s2) < 0;
}
bool __le__(const char *s1, const char *s2) {
return strcmp(s1, s2) <= 0;
}
bool __eq__(const char *s1, const char *s2) {
return strcmp(s1, s2) == 0;
}
bool __ne__(const char *s1, const char *s2) {
return strcmp(s1, s2) != 0;
}
bool __gt__(const char *s1, const char *s2) {
return strcmp(s1, s2) > 0;
}
bool __ge__(const char *s1, const char *s2) {
return strcmp(s1, s2) >= 0;
}
};ß

template<uint16_t tSize>
struct Comparator<StaticString<tSize>> {
bool __lt__(const StaticString<tSize> &s1, const StaticString<tSize> &s2) {
return strcmp(s1.c_str(), s2.c_str()) < 0;
}
bool __le__(const StaticString<tSize> &s1, const StaticString<tSize> &s2) {
return strcmp(s1.c_str(), s2.c_str()) <= 0;
}
bool __eq__(const StaticString<tSize> &s1, const StaticString<tSize> &s2) {
return strcmp(s1.c_str(), s2.c_str()) == 0;
}
bool __ne__(const StaticString<tSize> &s1, const StaticString<tSize> &s2) {
return strcmp(s1.c_str(), s2.c_str()) != 0;
}
bool __gt__(const StaticString<tSize> &s1, const StaticString<tSize> &s2) {
return strcmp(s1.c_str(), s2.c_str()) > 0;
}
bool __ge__(const StaticString<tSize> &s1, const StaticString<tSize> &s2) {
return strcmp(s1.c_str(), s2.c_str()) >= 0;
}
};

template<uint16_t tSize>
struct Comparator<const StaticString<tSize>> {
bool __lt__(const StaticString<tSize> &s1, const StaticString<tSize> &s2) {
return strcmp(s1.c_str(), s2.c_str()) < 0;
}
bool __le__(const StaticString<tSize> &s1, const StaticString<tSize> &s2) {
return strcmp(s1.c_str(), s2.c_str()) <= 0;
}
bool __eq__(const StaticString<tSize> &s1, const StaticString<tSize> &s2) {
return strcmp(s1.c_str(), s2.c_str()) == 0;
}
bool __ne__(const StaticString<tSize> &s1, const StaticString<tSize> &s2) {
return strcmp(s1.c_str(), s2.c_str()) != 0;
}
bool __gt__(const StaticString<tSize> &s1, const StaticString<tSize> &s2) {
return strcmp(s1.c_str(), s2.c_str()) > 0;
}
bool __ge__(const StaticString<tSize> &s1, const StaticString<tSize> &s2) {
return strcmp(s1.c_str(), s2.c_str()) >= 0;
}
};

}

#endif //EMBEDDEDCPLUSPLUS_COMPARATOR_H
9 changes: 8 additions & 1 deletion lib/wlib/stl/Equal.h
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,14 @@ namespace wlp {
}

template<uint16_t tSize>
struct equals<StaticString<tSize> > {
struct equals<StaticString<tSize>> {
bool operator()(const StaticString<tSize> &key1, const StaticString<tSize> &key2) const {
return static_string_equals(key1, key2);
}
};

template<uint16_t tSize>
struct equals<const StaticString<tSize>> {
bool operator()(const StaticString<tSize> &key1, const StaticString<tSize> &key2) const {
return static_string_equals(key1, key2);
}
Expand Down