diff --git a/include/pocketpy/obj.h b/include/pocketpy/obj.h index 5f809245..db2f21ed 100644 --- a/include/pocketpy/obj.h +++ b/include/pocketpy/obj.h @@ -47,66 +47,45 @@ struct StarWrapper{ }; struct Bytes{ - const char* _data; - int _size; + std::vector _v; + bool valid; - int size() const noexcept { return _size; } - int operator[](int i) const noexcept { return (int)(uint8_t)_data[i]; } - const char* data() const noexcept { return _data; } + int size() const noexcept { return (int)_v.size(); } + int operator[](int i) const noexcept { return (int)(uint8_t)_v[i]; } + const char* data() const noexcept { return _v.data(); } - bool operator==(const Bytes& rhs) const noexcept { - return _size == rhs._size && memcmp(_data, rhs._data, _size) == 0; - } + bool operator==(const Bytes& rhs) const{ return _v == rhs._v && valid == rhs.valid; } + bool operator!=(const Bytes& rhs) const{ return _v != rhs._v || valid != rhs.valid; } - bool operator!=(const Bytes& rhs) const noexcept { - return _size != rhs._size || memcmp(_data, rhs._data, _size) != 0; - } + Str str() const noexcept { return Str(_v.data(), _v.size()); } + std::string_view sv() const noexcept { return std::string_view(_v.data(), _v.size()); } - Str str() const noexcept { return Str(_data, _size); } - std::string_view sv() const noexcept { return std::string_view(_data, _size); } - - Bytes() : _data(nullptr), _size(0) {} - Bytes(std::vector&& v){ - char a[sizeof(std::vector)]; - new (a) std::vector(std::move(v)); - std::vector* p = reinterpret_cast*>(a); - _data = p->data(); - _size = p->size(); - } - Bytes(std::string_view sv){ - _data = new char[sv.size()]; - memcpy((void*)_data, sv.data(), sv.size()); - _size = sv.size(); + Bytes() : valid(false) {} + Bytes(std::vector&& v): _v(std::move(v)), valid(true) {} + Bytes(std::string_view sv): valid(true) { + _v.resize(sv.size()); + for(int i=0; i;