LeviLamina
Loading...
Searching...
No Matches
Blob.h
1#pragma once
2
3#include "mc/_HeaderOutputPredefine.h"
4
5namespace mce {
6
7class Blob {
8public:
9 using value_type = std::uint8_t;
10 using delete_function = void (*)(value_type*);
11 using size_type = std::size_t;
12 using pointer = value_type*;
13 using const_pointer = const value_type*;
14 using iterator = value_type*;
15 using const_iterator = const value_type*;
16
17 struct Deleter {
18 delete_function m_func;
19
20 LLAPI Deleter() noexcept;
21 LLAPI explicit Deleter(delete_function f) noexcept;
22 LLAPI void operator()(value_type* p) const noexcept;
23 };
24
25 using pointer_type = std::unique_ptr<value_type[], Deleter>;
26
27private:
28 pointer_type mBlob;
29 size_type mSize{0};
30
31private:
32 static void defaultDeleter(value_type* p) noexcept;
33
34public:
35 LLNDAPI Blob() noexcept;
36 LLNDAPI explicit Blob(size_type size);
37 LLNDAPI Blob(const value_type* ptr, size_type size);
38 LLNDAPI Blob(const Blob&);
39 LLNDAPI Blob(Blob&&) noexcept;
40 LLNDAPI Blob(pointer_type&& ptr, size_type size) noexcept;
41 LLAPI ~Blob();
42 LLAPI Blob& operator=(const Blob&);
43 LLAPI Blob& operator=(Blob&& rhs) noexcept;
44
45 LLNDAPI iterator begin() noexcept;
46 LLNDAPI iterator end() noexcept;
47 LLNDAPI const_iterator cbegin() const noexcept;
48 LLNDAPI const_iterator cend() const noexcept;
49
50 LLNDAPI bool empty() const noexcept;
51 LLNDAPI size_type size() const noexcept;
52 LLNDAPI size_type max_size() const noexcept;
53 LLNDAPI pointer data() noexcept;
54 LLNDAPI const_pointer data() const noexcept;
55 LLNDAPI pointer get() noexcept;
56 LLNDAPI const_pointer get() const noexcept;
57 LLNDAPI pointer_type release() noexcept;
58
59 LLNDAPI gsl::span<unsigned char> getSpan();
60 LLNDAPI gsl::span<const unsigned char> getSpan() const;
61
62 LLAPI void fillBlob(std::uint8_t val);
63 LLAPI void swap(Blob& other) noexcept;
64};
65
66} // namespace mce
Definition Blob.h:7
STL namespace.