Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdlib.h>
- #include <stdint.h>
- typedef struct RandomOperations RandomOperations;
- typedef struct RandomGenerator
- {
- const RandomOperations* ops;
- int64_t val;
- } RandomGenerator;
- typedef void ((*void_funcptr_t)(struct RandomGenerator *gen));
- typedef int ((*int_funcptr_t)(struct RandomGenerator *gen));
- typedef struct RandomOperations {
- int_funcptr_t next;
- void_funcptr_t destroy;
- } RandomOperations;
- int next(RandomGenerator* gen) {
- int64_t a = 1103515245, c = 12345, mod = 1 << 31;
- gen->val = (gen->val * a + c) % mod;
- return gen->val;
- }
- void destroy(RandomGenerator* gen) {
- free(gen);
- }
- const RandomOperations ops = {next, destroy};
- RandomGenerator* random_create(int seed) {
- RandomGenerator *gen = (RandomGenerator*)malloc(sizeof(RandomGenerator));
- gen->val = seed;
- gen->ops = &ops;
- return gen;
- }
- int main() {
- RandomGenerator *rr = random_create(1234);
- for (int j = 0; j < 100; ++j) {
- printf("%d\n", rr->ops->next(rr));
- }
- rr->ops->destroy(rr);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement