diff --git a/sourceCode/Systems/Random.cpp b/sourceCode/Systems/Random.cpp new file mode 100644 index 0000000..fa26252 --- /dev/null +++ b/sourceCode/Systems/Random.cpp @@ -0,0 +1,27 @@ +/* + * SPDX-FileCopyrightText: Dora "cat" + * SPDX-License-Identifier: MPL-2.0 + * + * This Source Code Form is subject to the terms of the Mozilla Public License, + * v. 2.0. If a copy of the MPL was not distributed with this file, You can + * obtain one at http://mozilla.org/MPL/2.0/. + */ +#include "Random.hpp" +#include +#include +#include +#include + +using namespace Tourmaline::Systems; + +Xoshiro::Xoshiro256PP Random::generator(static_cast(time(NULL))); +Tourmaline::Type::UUID Random::GenerateUUID() { + uint64_t random_ab = generator(), random_c = generator(), hold = 0; + hold = std::rotr(random_ab, 12); + hold = hold >> 4; + hold = (hold << 4) + 0b0100; + random_ab = std::rotl(hold, 12); + random_c = ((random_c >> 2) << 2) + 2; + + return std::format("{:X}{:X}", random_ab, random_c); +} diff --git a/sourceCode/Systems/Random.hpp b/sourceCode/Systems/Random.hpp new file mode 100644 index 0000000..af8da7b --- /dev/null +++ b/sourceCode/Systems/Random.hpp @@ -0,0 +1,30 @@ +/* + * SPDX-FileCopyrightText: Dora "cat" + * SPDX-License-Identifier: MPL-2.0 + * + * This Source Code Form is subject to the terms of the Mozilla Public License, + * v. 2.0. If a copy of the MPL was not distributed with this file, You can + * obtain one at http://mozilla.org/MPL/2.0/. + */ + +#ifndef GUARD_TOURMALINE_RANDOM_H +#define GUARD_TOURMALINE_RANDOM_H +#include "../../libraries/random/xoshiro.h" +#include "../Types.hpp" +#include + +namespace Tourmaline::Systems { +class Random { +public: + template + requires std::is_integral_v + static T Generate(T max, T min = 0) { + return (generator() % (max - min + 1)) + min; + } + static Tourmaline::Type::UUID GenerateUUID(); + +private: + static Xoshiro::Xoshiro256PP generator; +}; +} // namespace Tourmaline::Systems +#endif diff --git a/sourceCode/Types.hpp b/sourceCode/Types.hpp new file mode 100644 index 0000000..44360c1 --- /dev/null +++ b/sourceCode/Types.hpp @@ -0,0 +1,15 @@ +/* + * SPDX-FileCopyrightText: Dora "cat" + * SPDX-License-Identifier: MPL-2.0 + * + * This Source Code Form is subject to the terms of the Mozilla Public License, + * v. 2.0. If a copy of the MPL was not distributed with this file, You can + * obtain one at http://mozilla.org/MPL/2.0/. + */ +#ifndef GUARD_TOURMALINE_TYPES_H +#define GUARD_TOURMALINE_TYPES_H +#include +namespace Tourmaline::Type { +using UUID = std::string; +} +#endif