From 4432e50ebc432f96b6fd4a979bcf7ade8a610b98 Mon Sep 17 00:00:00 2001 From: Avril Date: Sat, 5 Jun 2021 13:47:39 +0100 Subject: [PATCH] fix slice copying --- include/slice.hpp | 5 +++-- src/test/main.cpp | 8 ++++++++ 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/include/slice.hpp b/include/slice.hpp index c5b63fa..4135fad 100644 --- a/include/slice.hpp +++ b/include/slice.hpp @@ -51,7 +51,7 @@ struct Span { template struct Span::Slice : public Span { inline Slice(T* ptr, size_t sz) : _area((void*)ptr), _size(sz){} - inline Slice(const Span& slice) : _area(slice.area()), _size(slice.size()){} + inline Slice(const Span& slice) : _area(const_cast(slice.area())), _size(slice.size()){} inline Slice(const Slice& copy) = default; inline Slice(Slice&& copy) : _area(copy._area), _size(copy._size){ *const_cast(©._size) = 0; } Slice() = delete; @@ -65,5 +65,6 @@ struct Span::Slice : public Span { const size_t _size; }; + template -typename Span::Slice Slice; +using Slice = Span::Slice; diff --git a/src/test/main.cpp b/src/test/main.cpp index f40771e..0e99c2a 100644 --- a/src/test/main.cpp +++ b/src/test/main.cpp @@ -3,6 +3,11 @@ #include #include +void print_slice(Slice memory) +{ + printf("slice: { %p, %lu }\n", memory.area(), memory.size()); +} + void write_fake(Cow& clone, const char* string) { strncpy(clone.area_as(), string, clone.size_as()-1); @@ -17,6 +22,9 @@ int main() { Cow real(4096); + printf("Created real: "); + print_slice(real); + write_fake(real, "Hello world"); read_fake(real);