Sha256: 507413dda289881472f931ad1d634767449e6cdaeb5339d1405584e113e102f4

Contents?: true

Size: 931 Bytes

Versions: 4

Compression:

Stored size: 931 Bytes

Contents

/* Copyright (c) 2024 Julian Benda
 *
 * This file is part of inkCPP which is released under MIT license.
 * See file LICENSE.txt or go to
 * https://github.com/JBenda/inkcpp for full license details.
 */
#pragma once

#include "system.h"

namespace ink::runtime::internal {
	/**
	 * @brief pseudo random number generator based on Linear Congruential Generator (using glibc default values).
	 */
	class prng {
		static constexpr uint64_t C = 12345;
		static constexpr uint64_t A = 1103515245;
		static constexpr uint64_t M = 1ul<<31;
	public:
		void srand(uint32_t seed) {
			_x = seed;
		}
		uint32_t rand() {
			_x = static_cast<uint32_t>((A*_x+ C) % M);
			return _x;
		}
		uint32_t rand(uint32_t max) {
			uint64_t prod = rand();
			prod *= max;
			return static_cast<int32_t>(prod / M);
		}
		uint32_t get_state() const { return _x; }
		prng(uint32_t seed) : _x{seed}{}
		prng() : prng(1337) {}
	private:
		uint32_t _x;
	};
}

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
inkcpp_rb-0.1.3 ext/inkcpp_rb/inkcpp/inkcpp/random.h
inkcpp_rb-0.1.2 ext/inkcpp_rb/inkcpp/inkcpp/random.h
inkcpp_rb-0.1.1 ext/inkcpp_rb/inkcpp/inkcpp/random.h
inkcpp_rb-0.1.0 ext/inkcpp_rb/inkcpp/inkcpp/random.h