mirror of https://github.com/oxen-io/session-ios
You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
45 lines
1.6 KiB
C++
45 lines
1.6 KiB
C++
#pragma once
|
|
#include "types.hpp"
|
|
|
|
namespace session {
|
|
|
|
// Helper function to go to/from char pointers to unsigned char pointers:
|
|
inline const unsigned char* to_unsigned(const char* x) {
|
|
return reinterpret_cast<const unsigned char*>(x);
|
|
}
|
|
inline unsigned char* to_unsigned(char* x) {
|
|
return reinterpret_cast<unsigned char*>(x);
|
|
}
|
|
inline const char* from_unsigned(const unsigned char* x) {
|
|
return reinterpret_cast<const char*>(x);
|
|
}
|
|
inline char* from_unsigned(unsigned char* x) {
|
|
return reinterpret_cast<char*>(x);
|
|
}
|
|
// Helper function to switch between string_view and ustring_view
|
|
inline ustring_view to_unsigned_sv(std::string_view v) {
|
|
return {to_unsigned(v.data()), v.size()};
|
|
}
|
|
inline std::string_view from_unsigned_sv(ustring_view v) {
|
|
return {from_unsigned(v.data()), v.size()};
|
|
}
|
|
|
|
/// Returns true if the first string is equal to the second string, compared case-insensitively.
|
|
inline bool string_iequal(std::string_view s1, std::string_view s2) {
|
|
return std::equal(s1.begin(), s1.end(), s2.begin(), s2.end(), [](char a, char b) {
|
|
return std::tolower(static_cast<unsigned char>(a)) ==
|
|
std::tolower(static_cast<unsigned char>(b));
|
|
});
|
|
}
|
|
|
|
// C++20 starts_/ends_with backport
|
|
inline constexpr bool starts_with(std::string_view str, std::string_view prefix) {
|
|
return str.size() >= prefix.size() && str.substr(prefix.size()) == prefix;
|
|
}
|
|
|
|
inline constexpr bool end_with(std::string_view str, std::string_view suffix) {
|
|
return str.size() >= suffix.size() && str.substr(str.size() - suffix.size()) == suffix;
|
|
}
|
|
|
|
} // namespace session
|