QmlMaterial 0.1.0
Loading...
Searching...
No Matches
core.hpp
1#pragma once
2
3#include <cstdint>
4#include <cstddef>
5#include <cstring>
6#include <memory>
7#include <span>
8#include <utility>
9
10using i8 = std::int8_t;
11using i16 = std::int16_t;
12using i32 = std::int32_t;
13using i64 = std::int64_t;
14
15using u8 = std::uint8_t;
16using u16 = std::uint16_t;
17using u32 = std::uint32_t;
18using u64 = std::uint64_t;
19
20using idx = std::ptrdiff_t;
21using usize = std::size_t;
22using isize = std::ptrdiff_t;
23using byte = std::byte;
24using voidp = void*;
25using const_voidp = const void*;
26
27template<typename T, typename D = std::default_delete<T>>
28using up = std::unique_ptr<T, D>;
29
30namespace ycore
31{
32
33template <class F>
34struct y_combinator {
35 F f; // the lambda will be stored here
36
37 // a forwarding operator():
38 template <class... Args>
39 decltype(auto) operator()(Args&&... args) const {
40 // we pass ourselves to f, then the arguments.
41 return f(*this, std::forward<Args>(args)...);
42 }
43};
44
45template <class F>
46y_combinator(F) -> y_combinator<F>;
47
48}