barretenberg
Loading...
Searching...
No Matches
engine.hpp
1#pragma once
2#include "../uint128/uint128.hpp"
3#include "../uint256/uint256.hpp"
4#include "../uintx/uintx.hpp"
5#include "unistd.h"
6#include <cstdint>
7
8namespace numeric::random {
9
10class Engine {
11 public:
12 virtual uint8_t get_random_uint8() = 0;
13
14 virtual uint16_t get_random_uint16() = 0;
15
16 virtual uint32_t get_random_uint32() = 0;
17
18 virtual uint64_t get_random_uint64() = 0;
19
20 virtual uint128_t get_random_uint128() = 0;
21
22 virtual uint256_t get_random_uint256() = 0;
23
24 virtual ~Engine() = default;
25 Engine() noexcept = default;
26 Engine(const Engine& other) = default;
27 Engine(Engine&& other) = default;
28 Engine& operator=(const Engine& other) = default;
29 Engine& operator=(Engine&& other) = default;
30
31 uint512_t get_random_uint512()
32 {
33 // Do not inline in constructor call. Evaluation order is important for cross-compiler consistency.
34 auto lo = get_random_uint256();
35 auto hi = get_random_uint256();
36 return { lo, hi };
37 }
38
39 uint1024_t get_random_uint1024()
40 {
41 // Do not inline in constructor call. Evaluation order is important for cross-compiler consistency.
42 auto lo = get_random_uint512();
43 auto hi = get_random_uint512();
44 return { lo, hi };
45 }
46};
47
48Engine& get_debug_engine(bool reset = false);
49Engine& get_engine();
50
51} // namespace numeric::random
Definition: engine.hpp:10
Definition: uint256.hpp:25
Definition: uintx.hpp:23