Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class NonCopyableType
- {
- private:
- struct NonCopyableTypeAllocator : std::allocator<NonCopyableType>
- {
- template <class U, class... Args>
- void construct(U* p, Args&&... args)
- {
- ::new ((void*)p) U(std::forward<Args>(args)...);
- }
- template <class U>
- struct rebind
- {
- typedef NonCopyableTypeAllocator other;
- };
- };
- friend class NonCopyableTypeAllocator;
- friend class NonCopyableTypeList;
- u8* myData = nullptr;
- NonCopyableType(u8* data, size_t& offset) : myData(data + offset) {}
- NonCopyableType(const NonCopyableType&) = delete;
- NonCopyableType(NonCopyableType&&) = default;
- NonCopyableType& operator=(const NonCopyableType&) = delete;
- NonCopyableType& operator=(NonCopyableType&&) = default;
- };
- class NonCopyableTypeList : private std::vector<NonCopyableType, NonCopyableType::NonCopyableTypeAllocator>
- {
- public:
- NonCopyableTypeList(std::shared_ptr<u8[]> data, size_t length); // would initialize associatedData, length, and add a bunch of NonCopyableTypes to itself
- NonCopyableTypeList(NonCopyableTypeList&& other)
- : std::vector<NonCopyableType, NonCopyableType::NonCopyableTypeAllocator>(std::forward<std::vector<NonCopyableType, NonCopyableType::NonCopyableTypeAllocator>>(other)),
- associatedData(std::move(other.associatedData)),
- length(std::move(other.length))
- {
- }
- NonCopyableTypeList& operator=(NonCopyableTypeList&& other)
- {
- std::vector<NonCopyableType, NonCopyableType::NonCopyableTypeAllocator>::operator=(std::forward<std::vector<NonCopyableType, NonCopyableType::NonCopyableTypeAllocator>>(other));
- length = std::move(other.length);
- associatedData = std::move(other.associatedData);
- return *this;
- }
- using std::vector<NonCopyableType, NonCopyableType::NonCopyableTypeAllocator>::operator[];
- private:
- NonCopyableTypeList(const NonCopyableTypeList&) = delete;
- NonCopyableTypeList& operator=(const NonCopyableTypeList&) = delete;
- std::shared_ptr<u8[]> associatedData;
- size_t length;
- };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement