OGLplus  (0.59.0) a C++ wrapper for rendering APIs

buffer_data.hpp
Go to the documentation of this file.
1 #ifndef EAGINE_BUFFER_DATA_HPP
9 #define EAGINE_BUFFER_DATA_HPP
10 
11 #include "buffer_size.hpp"
12 #include "memory/block.hpp"
13 #include "types.hpp"
14 
15 namespace eagine {
16 
17 template <typename S>
18 class buffer_data_spec {
19 private:
20  buffer_size<S> _size{};
21  const void* _data{nullptr};
22 
23 public:
24  buffer_data_spec() noexcept = default;
25 
26  buffer_data_spec(const memory::block& blk) noexcept
27  : _size(S(blk.size()))
28  , _data(blk.data()) {}
29 
30  template <typename T, span_size_t N>
31  buffer_data_spec(const T (&data)[N]) noexcept
32  : _size(type_identity<T>(), N)
33  , _data(static_cast<const void*>(data)) {}
34 
35  template <typename T>
36  buffer_data_spec(const T* data, span_size_t n) noexcept
37  : _size(type_identity<T>(), n)
38  , _data(data) {}
39 
40  template <typename T>
41  buffer_data_spec(span<T> av) noexcept
42  : _size(av)
43  , _data(av.data()) {}
44 
45  auto empty() const noexcept -> bool {
46  return _size.get() == 0;
47  }
48 
49  auto size() const noexcept -> buffer_size<S> {
50  return _size;
51  }
52 
53  auto data() const noexcept -> const void* {
54  return _data;
55  }
56 
57  auto view() const noexcept -> span<const byte> {
58  return {
59  static_cast<const byte*>(_data), static_cast<std::ptrdiff_t>(_size)};
60  }
61 };
62 
63 } // namespace eagine
64 
65 #endif // EAGINE_BUFFER_DATA_HPP
std::ptrdiff_t span_size_t
Signed span size type used by eagine.
Definition: types.hpp:36
Common code is placed in this namespace.
Definition: eagine.hpp:21
static constexpr auto view(T *addr, S size) noexcept -> const_span< T >
Creates a view starting at the specified pointer and specified length.
Definition: span.hpp:458
basic_block< false > block
Alias for non-const byte memory span.
Definition: block.hpp:27
basic_span< T, T *, S > span
Default alias for basic memory spans with native pointer type.
Definition: span.hpp:415

Copyright © 2015-2021 Matúš Chochlík.
<chochlik -at -gmail.com>
Documentation generated on Tue Apr 13 2021 by Doxygen (version 1.8.17).