summaryrefslogtreecommitdiff
path: root/src/memory-type-defs.hpp
diff options
context:
space:
mode:
authorJonathan Bradley <jcb@pikum.xyz>2023-12-22 19:33:26 -0500
committerJonathan Bradley <jcb@pikum.xyz>2023-12-23 11:43:15 -0500
commitb911c5b6c37ab13be6188cf039cd4246414fc7b5 (patch)
treeda4743a719e8134abb35f87f5097541e09c8f581 /src/memory-type-defs.hpp
parenta3937e7eef97cb0badcd65c390b9dd39d4cfd094 (diff)
first pass background asset loading - buggy
Diffstat (limited to 'src/memory-type-defs.hpp')
-rw-r--r--src/memory-type-defs.hpp18
1 files changed, 18 insertions, 0 deletions
diff --git a/src/memory-type-defs.hpp b/src/memory-type-defs.hpp
index d9d6f5e..181b89b 100644
--- a/src/memory-type-defs.hpp
+++ b/src/memory-type-defs.hpp
@@ -6,6 +6,11 @@
using PkeHandleBucketIndex_T = uint32_t;
using PkeHandleItemIndex_T = uint32_t;
+const uint8_t PKE_HANDLE_VALIDATION_VALID = 0;
+const uint8_t PKE_HANDLE_VALIDATION_BUCKET_INDEX_TOO_HIGH = 1;
+const uint8_t PKE_HANDLE_VALIDATION_ITEM_INDEX_TOO_HIGH = 2;
+const uint8_t PKE_HANDLE_VALIDATION_VALUE_MAX = 3;
+
struct PkeHandle {
union {
struct {
@@ -15,11 +20,24 @@ struct PkeHandle {
uint64_t hash = 0xFFFFFFFFFFFFFFFF;
};
};
+constexpr PkeHandle PkeHandle_MAX = PkeHandle{};
constexpr bool operator==(const PkeHandle &a, const PkeHandle &b) {
return a.hash == b.hash;
}
+constexpr uint8_t ValidateHandle(PkeHandle handle, PkeHandle bucketHandle, uint64_t maxItems) {
+ if (handle == PkeHandle_MAX)
+ return PKE_HANDLE_VALIDATION_VALUE_MAX;
+ if (handle.bucketIndex > bucketHandle.bucketIndex)
+ return PKE_HANDLE_VALIDATION_BUCKET_INDEX_TOO_HIGH;
+ if (handle.itemIndex > maxItems)
+ return PKE_HANDLE_VALIDATION_ITEM_INDEX_TOO_HIGH;
+ if (handle.bucketIndex == bucketHandle.bucketIndex && handle.itemIndex > bucketHandle.itemIndex)
+ return PKE_HANDLE_VALIDATION_ITEM_INDEX_TOO_HIGH;
+ return PKE_HANDLE_VALIDATION_VALID;
+}
+
struct MemBucket;
#endif /* PKE_MEMORY_TYPE_DEFS_HPP */