Mana
Math.h
Go to the documentation of this file.
1 
8 #pragma once
9 #include "Platform.h"
10 #include "Noncopyable.h"
11 #include <random>
12 
13 namespace mana
14 {
16  {
17  public:
18  static SystemRandom& GetInstance();
19 
20  std::mt19937_64& Get();
21 
22  private:
23  std::mt19937_64 mSystemRandom;
24  };
25 
27  {
28  static SystemRandom instance;
29  return instance;
30  }
31 
32  inline std::mt19937_64& SystemRandom::Get()
33  {
34  return mSystemRandom;
35  }
36 
37  inline void srand(const int_t seed)
38  {
39  SystemRandom::GetInstance().Get().seed(seed);
40  }
41 
42  inline int_t irand()
43  {
44  std::uniform_int_distribution<int_t> range;
45  return range(SystemRandom::GetInstance().Get());
46  }
47 
48  inline float_t frand()
49  {
50  std::uniform_real_distribution<float_t> range;
51  return range(SystemRandom::GetInstance().Get());
52  }
53 
54  template<typename T>
55  constexpr T Pi()
56  {
57  return static_cast<T>(3.1415926535897932384626433832795028841971693993751);
58  }
59 
60  template<typename T>
61  constexpr T ToRadian(T degree)
62  {
63  return degree * (Pi<T>() / static_cast<T>(180.0));
64  }
65 
66  template<typename T>
67  constexpr T ToDegree(T radian)
68  {
69  return radian * (static_cast<T>(180.0) / Pi<T>());
70  }
71 
72  template <typename T>
73  T AngleMod(const T x, const T div)
74  {
75  const T div2 = div * static_cast<T>(2);
76  return x - static_cast<intptr_t>(((x >= 0) ? (x + div) : (x - div)) / div2) * div2;
77  }
78 
79  template <typename T>
80  T Alignment(const T value, const T alignment)
81  {
82  return (value + alignment - 1) / alignment;
83  }
84 
85  template <typename T>
86  T AlignUp(const T value, const T alignment)
87  {
88  return Alignment(value, alignment) * alignment;
89  }
90 }
Definition: Math.h:16
std::mt19937_64 & Get()
Definition: Math.h:32
static SystemRandom & GetInstance()
Definition: Math.h:26
Definition: CodeBuffer.cpp:12
void srand(const int_t seed)
Definition: Math.h:37
constexpr T Pi()
Definition: Math.h:55
constexpr T ToRadian(T degree)
Definition: Math.h:61
T AngleMod(const T x, const T div)
Definition: Math.h:73
float_t frand()
Definition: Math.h:48
std::int32_t int_t
Definition: Type.h:29
int_t irand()
Definition: Math.h:42
constexpr T ToDegree(T radian)
Definition: Math.h:67
T Alignment(const T value, const T alignment)
Definition: Math.h:80
float float_t
Definition: Type.h:28
T AlignUp(const T value, const T alignment)
Definition: Math.h:86
Definition: Noncopyable.h:18