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

buffer_size.hpp
Go to the documentation of this file.
1 #ifndef EAGINE_BUFFER_SIZE_HPP
9 #define EAGINE_BUFFER_SIZE_HPP
10 
11 #include "span.hpp"
12 #include "type_identity.hpp"
13 #include <type_traits>
14 
15 namespace eagine {
16 
17 template <typename S>
18 class buffer_size {
19 private:
20  static_assert(std::is_integral_v<S>);
21  S _v{0};
22 
23 public:
24  constexpr buffer_size() noexcept = default;
25 
26  explicit constexpr buffer_size(S v) noexcept
27  : _v(v) {}
28 
29  template <typename T>
30  constexpr buffer_size(type_identity<T>, span_size_t count) noexcept
31  : _v(S(span_size_of<T>() * count)) {}
32 
33  template <typename T, typename P, typename Z>
34  constexpr buffer_size(memory::basic_span<T, P, Z> s) noexcept
35  : _v(S(span_size_of<T>() * span_size(s.size()))) {}
36 
37  constexpr auto get() const noexcept -> S {
38  return _v;
39  }
40 
41  constexpr operator S() const noexcept {
42  return _v;
43  }
44 
45  template <typename T>
46  explicit constexpr operator T() const {
47  return T(_v);
48  }
49 
50  friend constexpr auto operator+(buffer_size a, buffer_size b) noexcept
51  -> buffer_size {
52  return {a._v + b._v};
53  }
54 };
55 
56 } // namespace eagine
57 
58 #endif // EAGINE_BUFFER_SIZE_HPP
std::ptrdiff_t span_size_t
Signed span size type used by eagine.
Definition: types.hpp:36
static constexpr auto span_size(T v) noexcept
Converts argument to span size type.
Definition: types.hpp:59
Common code is placed in this namespace.
Definition: eagine.hpp:21
static auto operator+(const fixed_size_string< N1 > &s1, const fixed_size_string< N2 > &s2) noexcept
Concatenation operator for fixed_size_string.
Definition: fixed_size_str.hpp:135

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