From 46fad4fd2c47d5109d8bbe993867a62c90ca38d5 Mon Sep 17 00:00:00 2001 From: Avril Date: Sat, 5 Jun 2021 13:58:58 +0100 Subject: [PATCH] basic slicing reinterpretation --- include/slice.hpp | 6 ++++++ src/test/main.cpp | 8 +++++--- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/include/slice.hpp b/include/slice.hpp index 4135fad..ec52648 100644 --- a/include/slice.hpp +++ b/include/slice.hpp @@ -45,6 +45,11 @@ struct Span { inline Slice slice(size_t start, size_t len) { if(bounds_ok(start,len)) return Slice(ptr()+start, len); else throw "Out of bounds slice"; } inline Slice slice(size_t start) { return slice(start, size()-start); } + inline Slice slice() { return slice(0, size()); } + template + inline Span::Slice reinterpret() { return typename Span::Slice((U*)area(), size_bytes() / sizeof(U)); } + template + inline Span::Slice reinterpret() const { return typename Span::Slice((const U*)area(), size_bytes() / sizeof(U)); } }; /// A slice of memory with a backing pointer and size. @@ -59,6 +64,7 @@ struct Span::Slice : public Span { inline const void* area() const override { return _area; } inline void* area() override { return _area; } inline size_t size() const override { return _size; } + private: void* const _area; diff --git a/src/test/main.cpp b/src/test/main.cpp index 0e99c2a..eac5f91 100644 --- a/src/test/main.cpp +++ b/src/test/main.cpp @@ -3,9 +3,11 @@ #include #include -void print_slice(Slice memory) +template +void print_slice(Slice memory) { - printf("slice: { %p, %lu }\n", memory.area(), memory.size()); + printf("slice: { %p, %lu (%lu bytes) }\n", memory.area(), memory.size(), memory.size_bytes()); + } void write_fake(Cow& clone, const char* string) @@ -23,7 +25,7 @@ int main() Cow real(4096); printf("Created real: "); - print_slice(real); + print_slice(real); write_fake(real, "Hello world"); read_fake(real);