From f631e697b58b4dba4f51bef9528ee689c3da5b7e Mon Sep 17 00:00:00 2001 From: Sh1ney Date: Sun, 30 Nov 2025 22:25:16 +0500 Subject: [PATCH 1/3] first attempt --- stack.cpp | 118 +++++++++++++++++++++++++++++++++++++----------------- 1 file changed, 82 insertions(+), 36 deletions(-) diff --git a/stack.cpp b/stack.cpp index 954a5a5..b144c8f 100644 --- a/stack.cpp +++ b/stack.cpp @@ -1,48 +1,94 @@ #include "stack.hpp" - +#include #include - -// TODO: remove me -#define UNUSED(VAR) (void)(VAR) +#include +#include namespace stack { + struct Element + { + void* data; + Element* next; -Handle create() -{ - return -1; -} + Element(const void* const data, const std::size_t size, Element* next) + { + this->data = malloc(size); + memcpy(this->data, data, size); + this->next = next; + } -void destroy(const Handle handle) -{ - UNUSED(handle); -} + ~Element() + { + free(data); + } + }; -bool valid(const Handle handle) -{ - UNUSED(handle); - return false; -} + struct Stack + { + Element* top; + std::size_t size; -std::size_t count(const Handle handle) -{ - UNUSED(handle); - return 0u; -} + Stack() + { + this->top = nullptr; + this->size = 0; + } -void push(const Handle handle, const void* const data, const std::size_t size) -{ - UNUSED(handle); - UNUSED(data); - UNUSED(size); -} + ~Stack() + { + while (this->size > 0) + { + Element* toDelete = this->top; + this->top = toDelete->next; + delete toDelete; + this->size--; + } + } + }; -std::size_t pop(const Handle handle, void* const data, const std::size_t size) -{ - UNUSED(handle); - UNUSED(data); - UNUSED(size); - return 0u; -} + int stackCount = 0; + std::map handleMap; + + Handle create() + { + Stack* stack = new Stack(); + handleMap[stackCount] = stack; + return stackCount++; + } -} // namespace stack + void destroy(const Handle handle) + { + if (valid(handle)) + { + delete handleMap[handle]; + } + } + + bool valid(const Handle handle) + { + return handleMap.find(handle) != handleMap.end(); + } + + std::size_t count(const Handle handle) + { + return handleMap[handle]->size; + } + + void push(const Handle handle, const void* const data, const std::size_t size) + { + Stack* stack = handleMap[handle]; + Element* element = new Element(data, size, stack->top); + stack->top = element; + stack->size++; + } + + std::size_t pop(const Handle handle, void* const data, const std::size_t size) + { + Stack* stack = handleMap[handle]; + memcpy(data, stack->top->data, size); + stack->top = stack->top->next; + stack->size--; + return size; + } +} From 64146ecc57eb0341e1b5f45c095ba9d3bbe48770 Mon Sep 17 00:00:00 2001 From: Sh1ney Date: Sun, 30 Nov 2025 22:41:11 +0500 Subject: [PATCH 2/3] second attempt --- stack.cpp | 31 +++++++++++++++++++++---------- 1 file changed, 21 insertions(+), 10 deletions(-) diff --git a/stack.cpp b/stack.cpp index b144c8f..a9efecd 100644 --- a/stack.cpp +++ b/stack.cpp @@ -72,23 +72,34 @@ namespace stack std::size_t count(const Handle handle) { - return handleMap[handle]->size; + if (valid(handle)) + { + return handleMap[handle]->size; + } + return 0u; } void push(const Handle handle, const void* const data, const std::size_t size) { - Stack* stack = handleMap[handle]; - Element* element = new Element(data, size, stack->top); - stack->top = element; - stack->size++; + if (valid(handle)) + { + Stack* stack = handleMap[handle]; + Element* element = new Element(data, size, stack->top); + stack->top = element; + stack->size++; + } } std::size_t pop(const Handle handle, void* const data, const std::size_t size) { - Stack* stack = handleMap[handle]; - memcpy(data, stack->top->data, size); - stack->top = stack->top->next; - stack->size--; - return size; + if (valid(handle)) + { + Stack* stack = handleMap[handle]; + memcpy(data, stack->top->data, size); + stack->top = stack->top->next; + stack->size--; + return size; + } + return 0; } } From f3176e983a658ba0ac1505500ce1d70e3fb5acec Mon Sep 17 00:00:00 2001 From: Sh1ney Date: Sun, 30 Nov 2025 22:47:44 +0500 Subject: [PATCH 3/3] third attempt --- stack.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/stack.cpp b/stack.cpp index a9efecd..1268423 100644 --- a/stack.cpp +++ b/stack.cpp @@ -61,6 +61,7 @@ namespace stack { if (valid(handle)) { + handleMap.erase(handle); delete handleMap[handle]; } }