CVB++ 15.0
detail_block.hpp
1#pragma once
2
3#include "../../global.hpp"
4
5namespace Cvb
6{
7 CVB_BEGIN_INLINE_NS
8
13 template <class T, class ENABLE = void>
14 struct ComponentOf
15 {
16 using type = T;
17 };
18
19#ifndef CVB_DOXYGEN
20 template <template <class, size_t> class Template, class Type, size_t Size>
21 struct ComponentOf<Template<Type, Size>, void>
22 {
23 using type = Type;
24 };
25
26 template <template <class> class Template, class Type>
27 struct ComponentOf<Template<Type>, void>
28 {
29 using type = Type;
30 };
31#endif
32
37 template <class T>
38 using ComponentOfT = typename ComponentOf<T>::type;
39
44 template <class T, class ENABLE = void>
45 struct NumComponentsOf
46 {
47 static constexpr size_t value = 1;
48 };
49
50#ifndef CVB_DOXYGEN
51 template <template <class, size_t> class Template, class Type, size_t Size>
52 struct NumComponentsOf<Template<Type, Size>, void>
53 {
54 static constexpr size_t value = Size;
55 };
56#endif
57
62 template <class T>
63 constexpr size_t NumComponentsOfV = NumComponentsOf<T>::value;
64
69 template <size_t I, size_t K>
70 struct less
71 {
72 static constexpr const bool value = I < K;
73 };
74
79 template <size_t I, size_t K>
80 constexpr const bool less_v = less<I, K>::value;
81
90 template <class T>
91 bool IsAligned(const void *ptr) noexcept
92 {
93 auto iptr = reinterpret_cast<std::uintptr_t>(ptr);
94 return !(iptr % alignof(T));
95 }
96
97 CVB_END_INLINE_NS
98} // namespace Cvb
Root namespace for the Image Manager interface.
Definition c_bayer_to_rgb.h:17