aboutsummaryrefslogtreecommitdiff
path: root/src/zencore
diff options
context:
space:
mode:
Diffstat (limited to 'src/zencore')
-rw-r--r--src/zencore/include/zencore/uid.h2
-rw-r--r--src/zencore/iobuffer.cpp12
-rw-r--r--src/zencore/uid.cpp28
3 files changed, 39 insertions, 3 deletions
diff --git a/src/zencore/include/zencore/uid.h b/src/zencore/include/zencore/uid.h
index 3abec9d16..f8b1ccf98 100644
--- a/src/zencore/include/zencore/uid.h
+++ b/src/zencore/include/zencore/uid.h
@@ -61,8 +61,10 @@ struct Oid
const Oid& Generate();
[[nodiscard]] static Oid FromHexString(const std::string_view String);
+ [[nodiscard]] static Oid TryFromHexString(const std::string_view String, const Oid& Default = Oid::Zero);
StringBuilderBase& ToString(StringBuilderBase& OutString) const;
void ToString(char OutString[StringLength]) const;
+ std::string ToString() const;
[[nodiscard]] static Oid FromMemory(const void* Ptr);
auto operator<=>(const Oid& rhs) const = default;
diff --git a/src/zencore/iobuffer.cpp b/src/zencore/iobuffer.cpp
index fd99a01cb..33762bdb7 100644
--- a/src/zencore/iobuffer.cpp
+++ b/src/zencore/iobuffer.cpp
@@ -30,6 +30,10 @@ ZEN_THIRD_PARTY_INCLUDES_END
# include <unistd.h>
#endif
+#if ZEN_WITH_TESTS
+# include <zencore/testutils.h>
+#endif
+
#include <gsl/gsl-lite.hpp>
namespace zen {
@@ -723,14 +727,16 @@ TEST_CASE("IoBuffer")
TEST_CASE("IoBuffer.mmap")
{
+ zen::ScopedTemporaryDirectory TempDir;
+
zen::IoBuffer Buffer1{65536};
uint8_t* Mutate = Buffer1.MutableData<uint8_t>();
memcpy(Mutate, "abc123", 6);
- zen::WriteFile("test_file.data", Buffer1);
+ zen::WriteFile(TempDir.Path() / "test_file.data", Buffer1);
SUBCASE("in-range")
{
- zen::IoBuffer FileBuffer = IoBufferBuilder::MakeFromFile("test_file.data", 0, 65536);
+ zen::IoBuffer FileBuffer = IoBufferBuilder::MakeFromFile(TempDir.Path() / "test_file.data", 0, 65536);
const void* Data = FileBuffer.GetData();
CHECK(Data != nullptr);
CHECK_EQ(memcmp(Data, "abc123", 6), 0);
@@ -741,7 +747,7 @@ TEST_CASE("IoBuffer.mmap")
# if ZEN_PLATFORM_WINDOWS
SUBCASE("out-of-range")
{
- zen::IoBuffer FileBuffer = IoBufferBuilder::MakeFromFile("test_file.data", 131072, 65536);
+ zen::IoBuffer FileBuffer = IoBufferBuilder::MakeFromFile(TempDir.Path() / "test_file.data", 131072, 65536);
const void* Data = nullptr;
CHECK_THROWS(Data = FileBuffer.GetData());
CHECK(Data == nullptr);
diff --git a/src/zencore/uid.cpp b/src/zencore/uid.cpp
index 0f04d70ac..8ef660c7a 100644
--- a/src/zencore/uid.cpp
+++ b/src/zencore/uid.cpp
@@ -83,6 +83,26 @@ Oid::FromHexString(const std::string_view String)
}
Oid
+Oid::TryFromHexString(const std::string_view String, const Oid& Default)
+{
+ if (String.length() != StringLength)
+ {
+ return Default;
+ }
+
+ Oid Id;
+
+ if (ParseHexBytes(String.data(), String.size(), reinterpret_cast<uint8_t*>(Id.OidBits)))
+ {
+ return Id;
+ }
+ else
+ {
+ return Default;
+ }
+}
+
+Oid
Oid::FromMemory(const void* Ptr)
{
Oid Id;
@@ -97,6 +117,14 @@ Oid::ToString(char OutString[StringLength]) const
OutString[StringLength] = '\0';
}
+std::string
+Oid::ToString() const
+{
+ char OutString[StringLength + 1];
+ ToString(OutString);
+ return std::string(OutString, StringLength);
+}
+
StringBuilderBase&
Oid::ToString(StringBuilderBase& OutString) const
{