HikoGUI
A low latency retained GUI
Loading...
Searching...
No Matches
required.hpp
1// Copyright 2019 Pokitec
2// All rights reserved.
3
4#pragma once
5
6#include "TTauri/Foundation/os_detect.hpp"
7#include "TTauri/Foundation/assert.hpp"
8#include <type_traits>
9#include <cstdint>
10
11namespace tt {
12
13
14using namespace std::literals;
15
21#ifndef ttlet
22#define ttlet auto const
23#endif
24
27using ssize_t = std::ptrdiff_t;
28
29template<typename T>
30tt_force_inline std::remove_reference_t<T> rvalue_cast(T value)
31{
32 return value;
33}
34
35
36template<typename C>
37struct nr_items {
38 constexpr static ssize_t value = static_cast<ssize_t>(C::max) + 1;
39};
40
41template<typename C>
42constexpr auto nr_items_v = nr_items<C>::value;
43
44template <class C>
45constexpr auto ssize(const C& c) -> std::common_type_t<ssize_t, std::make_signed_t<decltype(c.size())>>
46{
47 using R = std::common_type_t<ssize_t, std::make_signed_t<decltype(c.size())>>;
48 return static_cast<R>(c.size());
49}
50
51template <class T, ssize_t N>
52constexpr ssize_t ssize(const T (&array)[N]) noexcept
53{
54 return N;
55}
56
57template <class C>
58constexpr auto usize(const C& c) -> std::common_type_t<size_t, std::make_unsigned_t<decltype(c.size())>>
59{
60 using R = std::common_type_t<size_t, std::make_unsigned_t<decltype(c.size())>>;
61 return static_cast<R>(c.size());
62}
63
64
65#define ssizeof(x) (static_cast<ssize_t>(sizeof (x)))
66
67}
Definition required.hpp:37