HikoGUI
A low latency retained GUI
Loading...
Searching...
No Matches
seed_intf.hpp
1// Copyright Take Vos 2022.
2// Distributed under the Boost Software License, Version 1.0.
3// (See accompanying file LICENSE_1_0.txt or copy at https://www.boost.org/LICENSE_1_0.txt)
4
8#pragma once
9
10#include "../utility/utility.hpp"
11#include "../macros.hpp"
12#include <hikocpu/hikocpu.hpp>
13#include <random>
14#include <concepts>
15#include <type_traits>
16#include <bit>
17#include <array>
18
19hi_export_module(hikogui.random.seed : intf);
20
21hi_export namespace hi::inline v1 {
22
29void generate_seed(void *ptr, size_t size);
30
38template<typename T>
39struct seed {
40 [[nodiscard]] T operator()() const
41 {
42 hi_not_implemented();
43 }
44
45 [[nodiscard]] T operator()() const requires(std::has_unique_object_representations_v<T> and not std::is_pointer_v<T>)
46 {
47 auto buffer = std::array<uint8_t, sizeof(T)>{};
48 generate_seed(buffer.data(), buffer.size());
49 return std::bit_cast<T>(buffer);
50 }
51};
52
53} // namespace hi::inline v1
DOXYGEN BUG.
Definition algorithm_misc.hpp:20
void generate_seed(void *ptr, size_t size)
Load a random seed.
Definition seed_win32_impl.hpp:18
Randomly generate an object.
Definition seed_intf.hpp:39