[ox/std] Add all_of and any_of range functions, cleanup
This commit is contained in:
parent
488f73f60f
commit
b58431c09a
1
deps/ox/src/ox/std/CMakeLists.txt
vendored
1
deps/ox/src/ox/std/CMakeLists.txt
vendored
@ -97,6 +97,7 @@ install(
|
|||||||
new.hpp
|
new.hpp
|
||||||
optional.hpp
|
optional.hpp
|
||||||
random.hpp
|
random.hpp
|
||||||
|
ranges.hpp
|
||||||
serialize.hpp
|
serialize.hpp
|
||||||
std.hpp
|
std.hpp
|
||||||
stddef.hpp
|
stddef.hpp
|
||||||
|
17
deps/ox/src/ox/std/memops.cpp
vendored
17
deps/ox/src/ox/std/memops.cpp
vendored
@ -27,13 +27,8 @@ void *ox_inhibit_loop_to_libcall memset(void *ptr, int val, std::size_t size) {
|
|||||||
return ox_memset(ptr, val, size);
|
return ox_memset(ptr, val, size);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
#undef ox_inhibit_loop_to_libcall
|
int ox_inhibit_loop_to_libcall memcmp(const void *ptr1, const void *ptr2, std::size_t size) noexcept {
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
int ox_memcmp(const void *ptr1, const void *ptr2, std::size_t size) noexcept {
|
|
||||||
int retval = 0;
|
int retval = 0;
|
||||||
auto block1 = reinterpret_cast<const uint8_t*>(ptr1);
|
auto block1 = reinterpret_cast<const uint8_t*>(ptr1);
|
||||||
auto block2 = reinterpret_cast<const uint8_t*>(ptr2);
|
auto block2 = reinterpret_cast<const uint8_t*>(ptr2);
|
||||||
@ -48,3 +43,13 @@ int ox_memcmp(const void *ptr1, const void *ptr2, std::size_t size) noexcept {
|
|||||||
}
|
}
|
||||||
return retval;
|
return retval;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#undef ox_inhibit_loop_to_libcall
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
int ox_memcmp(const void *ptr1, const void *ptr2, std::size_t size) noexcept {
|
||||||
|
return memcmp(ptr1, ptr2, size);
|
||||||
|
}
|
||||||
|
14
deps/ox/src/ox/std/memops.hpp
vendored
14
deps/ox/src/ox/std/memops.hpp
vendored
@ -23,6 +23,8 @@ void *memmove(void *dest, const void *src, std::size_t size);
|
|||||||
|
|
||||||
void *memset(void *ptr, int val, std::size_t size);
|
void *memset(void *ptr, int val, std::size_t size);
|
||||||
|
|
||||||
|
int memcmp(const void *ptr1, const void *ptr2, std::size_t size) noexcept;
|
||||||
|
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -68,10 +70,22 @@ constexpr void *ox_memset(void *ptr, int val, std::size_t size) noexcept {
|
|||||||
|
|
||||||
namespace ox {
|
namespace ox {
|
||||||
|
|
||||||
|
constexpr void *memmove(void *dest, const void *src, std::size_t size) {
|
||||||
|
return ox_memmove(dest, src, size);
|
||||||
|
}
|
||||||
|
|
||||||
|
constexpr void *memset(void *ptr, int val, std::size_t size) noexcept {
|
||||||
|
return ox_memset(ptr, val, size);
|
||||||
|
}
|
||||||
|
|
||||||
constexpr void *memcpy(void *dest, const void *src, std::size_t size) noexcept {
|
constexpr void *memcpy(void *dest, const void *src, std::size_t size) noexcept {
|
||||||
return ox_memcpy(dest, src, size);
|
return ox_memcpy(dest, src, size);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
inline int memcmp(const void *ptr1, const void *ptr2, std::size_t size) noexcept {
|
||||||
|
return ox_memcmp(ptr1, ptr2, size);
|
||||||
|
}
|
||||||
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
void *memsetElements(T *ptr, T val, std::size_t elements) noexcept {
|
void *memsetElements(T *ptr, T val, std::size_t elements) noexcept {
|
||||||
return memset(ptr, val, elements * sizeof(T));
|
return memset(ptr, val, elements * sizeof(T));
|
||||||
|
1
deps/ox/src/ox/std/random.hpp
vendored
1
deps/ox/src/ox/std/random.hpp
vendored
@ -8,6 +8,7 @@
|
|||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include "bit.hpp"
|
||||||
#include "stddef.hpp"
|
#include "stddef.hpp"
|
||||||
#include "types.hpp"
|
#include "types.hpp"
|
||||||
|
|
||||||
|
35
deps/ox/src/ox/std/ranges.hpp
vendored
Normal file
35
deps/ox/src/ox/std/ranges.hpp
vendored
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2015 - 2023 gary@drinkingtea.net
|
||||||
|
*
|
||||||
|
* This Source Code Form is subject to the terms of the Mozilla Public
|
||||||
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||||
|
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
namespace ox {
|
||||||
|
|
||||||
|
[[nodiscard]]
|
||||||
|
constexpr bool all_of(auto begin, auto end, auto pred) noexcept {
|
||||||
|
while (begin != end) {
|
||||||
|
if (!pred(*begin)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
++begin;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
[[nodiscard]]
|
||||||
|
constexpr bool any_of(auto begin, auto end, auto pred) noexcept {
|
||||||
|
while (begin != end) {
|
||||||
|
if (pred(*begin)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
++begin;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
16
deps/ox/src/ox/std/stringview.hpp
vendored
16
deps/ox/src/ox/std/stringview.hpp
vendored
@ -352,3 +352,19 @@ constexpr auto toStdStringView(CRStringView sv) noexcept {
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
constexpr ox::Result<int> ox_atoi(ox::CRStringView str) noexcept {
|
||||||
|
int total = 0;
|
||||||
|
int multiplier = 1;
|
||||||
|
for (auto i = static_cast<int64_t>(str.len()) - 1; i != -1; --i) {
|
||||||
|
auto s = static_cast<uint64_t>(i);
|
||||||
|
if (str[s] >= '0' && str[s] <= '9') {
|
||||||
|
total += (str[s] - '0') * multiplier;
|
||||||
|
multiplier *= 10;
|
||||||
|
} else {
|
||||||
|
return OxError(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return total;
|
||||||
|
}
|
||||||
|
|
||||||
|
14
deps/ox/src/ox/std/strops.hpp
vendored
14
deps/ox/src/ox/std/strops.hpp
vendored
@ -125,20 +125,6 @@ constexpr int ox_lastIndexOf(const auto &str, int character, std::size_t maxLen
|
|||||||
return retval;
|
return retval;
|
||||||
}
|
}
|
||||||
|
|
||||||
constexpr ox::Result<int> ox_atoi(const char *str) noexcept {
|
|
||||||
int total = 0;
|
|
||||||
int multiplier = 1;
|
|
||||||
for (auto i = static_cast<int64_t>(ox_strlen(str)) - 1; i != -1; i--) {
|
|
||||||
if (str[i] >= '0' && str[i] <= '9') {
|
|
||||||
total += (str[i] - '0') * multiplier;
|
|
||||||
multiplier *= 10;
|
|
||||||
} else {
|
|
||||||
return OxError(1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return total;
|
|
||||||
}
|
|
||||||
|
|
||||||
template<typename Integer, typename T>
|
template<typename Integer, typename T>
|
||||||
constexpr T ox_itoa(Integer v, T str) noexcept {
|
constexpr T ox_itoa(Integer v, T str) noexcept {
|
||||||
if (v) {
|
if (v) {
|
||||||
|
2
deps/ox/src/ox/std/uuid.cpp
vendored
2
deps/ox/src/ox/std/uuid.cpp
vendored
@ -35,6 +35,6 @@ Result<UUID> UUID::generate() noexcept {
|
|||||||
}
|
}
|
||||||
|
|
||||||
static_assert(UUID{}.isNull());
|
static_assert(UUID{}.isNull());
|
||||||
static_assert(!UUID::fromString("34AF4809-043D-4348-B720-2B454E5678C7").value.isNull());
|
static_assert(!UUID::fromString("34af4809-043d-4348-b720-2b454e5678c7").value.isNull());
|
||||||
|
|
||||||
}
|
}
|
||||||
|
17
deps/ox/src/ox/std/uuid.hpp
vendored
17
deps/ox/src/ox/std/uuid.hpp
vendored
@ -11,6 +11,7 @@
|
|||||||
#include "array.hpp"
|
#include "array.hpp"
|
||||||
#include "bstring.hpp"
|
#include "bstring.hpp"
|
||||||
#include "random.hpp"
|
#include "random.hpp"
|
||||||
|
#include "ranges.hpp"
|
||||||
#include "stringview.hpp"
|
#include "stringview.hpp"
|
||||||
#include "strops.hpp"
|
#include "strops.hpp"
|
||||||
#include "trace.hpp"
|
#include "trace.hpp"
|
||||||
@ -56,8 +57,8 @@ constexpr ox::Result<uint8_t> fromHex(ox::CRStringView v) noexcept {
|
|||||||
return OxError(2);
|
return OxError(2);
|
||||||
}
|
}
|
||||||
uint8_t out = 0;
|
uint8_t out = 0;
|
||||||
out += valMap[static_cast<unsigned>(v[0])] * 16u;
|
out += valMap[static_cast<unsigned char>(v[0])] * 16u;
|
||||||
out += valMap[static_cast<unsigned>(v[1])];
|
out += valMap[static_cast<unsigned char>(v[1])];
|
||||||
return out;
|
return out;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -95,7 +96,7 @@ class UUID {
|
|||||||
protected:
|
protected:
|
||||||
static bool s_seeded;
|
static bool s_seeded;
|
||||||
static Random s_rand;
|
static Random s_rand;
|
||||||
ox::Array<uint8_t, 16> m_value;
|
ox::Array<uint8_t, 16> m_value{};
|
||||||
|
|
||||||
public:
|
public:
|
||||||
static void seedGenerator(const RandomSeed &seed) noexcept;
|
static void seedGenerator(const RandomSeed &seed) noexcept;
|
||||||
@ -110,12 +111,10 @@ class UUID {
|
|||||||
[[nodiscard]]
|
[[nodiscard]]
|
||||||
constexpr auto isNull() const noexcept {
|
constexpr auto isNull() const noexcept {
|
||||||
if (std::is_constant_evaluated()) {
|
if (std::is_constant_evaluated()) {
|
||||||
for (auto v : m_value) {
|
if (ox::all_of(m_value.begin(), m_value.end(), [](auto v) { return v == 0; })) {
|
||||||
if (v) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return true;
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
} else {
|
} else {
|
||||||
constexpr uint64_t zero = 0;
|
constexpr uint64_t zero = 0;
|
||||||
return ox::memcmp(&zero, m_value.data() + 0, 8) == 0
|
return ox::memcmp(&zero, m_value.data() + 0, 8) == 0
|
||||||
@ -125,7 +124,7 @@ class UUID {
|
|||||||
|
|
||||||
static constexpr ox::Result<ox::UUID> fromString(ox::CRStringView s) noexcept {
|
static constexpr ox::Result<ox::UUID> fromString(ox::CRStringView s) noexcept {
|
||||||
if (s.len() < 36) {
|
if (s.len() < 36) {
|
||||||
return OxError(1, "Insufficient data contain complete UUID");
|
return OxError(1, "Insufficient data to contain a complete UUID");
|
||||||
}
|
}
|
||||||
UUID out;
|
UUID out;
|
||||||
auto valueI = 0u;
|
auto valueI = 0u;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user