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

basic_alut_api.hpp
Go to the documentation of this file.
1 #ifndef OALPLUS_BASIC_ALUT_API_HPP
9 #define OALPLUS_BASIC_ALUT_API_HPP
10 
11 #include "alut_api/api.hpp"
12 #include "alut_api/api_traits.hpp"
13 #include "alut_api/constants.hpp"
14 
15 namespace eagine::oalp {
16 //------------------------------------------------------------------------------
17 template <typename ApiTraits>
18 class basic_alut_api
19  : protected ApiTraits
20  , public basic_alut_operations<ApiTraits>
21  , public basic_alut_constants<ApiTraits> {
22 public:
23  basic_alut_api(ApiTraits traits)
24  : ApiTraits{std::move(traits)}
25  , basic_alut_operations<ApiTraits>{*static_cast<ApiTraits*>(this)}
26  , basic_alut_constants<ApiTraits>{
27  *static_cast<ApiTraits*>(this),
28  *static_cast<basic_alut_operations<ApiTraits>*>(this)} {}
29 
30  basic_alut_api()
31  : basic_alut_api{ApiTraits{}} {}
32 };
33 
34 template <std::size_t I, typename ApiTraits>
35 auto get(basic_alut_api<ApiTraits>& x) noexcept ->
36  typename std::tuple_element<I, basic_alut_api<ApiTraits>>::type& {
37  return x;
38 }
39 
40 template <std::size_t I, typename ApiTraits>
41 auto get(const basic_alut_api<ApiTraits>& x) noexcept -> const
42  typename std::tuple_element<I, basic_alut_api<ApiTraits>>::type& {
43  return x;
44 }
45 //------------------------------------------------------------------------------
46 } // namespace eagine::oalp
47 
48 // NOLINTNEXTLINE(cert-dcl58-cpp)
49 namespace std {
50 //------------------------------------------------------------------------------
51 template <typename ApiTraits>
52 struct tuple_size<eagine::oalp::basic_alut_api<ApiTraits>>
53  : public std::integral_constant<std::size_t, 2> {};
54 
55 template <typename ApiTraits>
56 struct tuple_element<0, eagine::oalp::basic_alut_api<ApiTraits>> {
58 };
59 
60 template <typename ApiTraits>
61 struct tuple_element<1, eagine::oalp::basic_alut_api<ApiTraits>> {
63 };
64 //------------------------------------------------------------------------------
65 } // namespace std
66 
67 #endif // OALPLUS_BASIC_ALUT_API_HPP
Common code is placed in this namespace.
Definition: eagine.hpp:21
Class wrapping the constants from the ALUT API.
Definition: constants.hpp:21
AL-related code is placed in this namespace.
Definition: oalplus.hpp:11
Class wrapping the functions from the ALUT API.
Definition: api.hpp:26

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