Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- enum
- {
- MULTIPLY = 1103515245,
- INCREMENT = 12345,
- MODULE = (1ll << 31)
- };
- typedef struct RandomGenerator
- {
- struct RandomOperations *ops;
- unsigned res;
- } RandomGenerator;
- void
- destroy(RandomGenerator *rr)
- {
- free(rr->ops);
- free(rr);
- }
- unsigned
- next(RandomGenerator *rr)
- {
- return (rr->res * MULTIPLY + INCREMENT) & (MODULE - 1);
- }
- struct RandomOperations
- {
- unsigned (*next)(RandomGenerator *rr);
- void (*destroy)(RandomGenerator *rr);
- };
- RandomGenerator *
- random_create(int seed)
- {
- RandomGenerator *gen = malloc(sizeof(*gen));
- if (gen == NULL) {
- exit(1);
- }
- gen->ops = malloc(sizeof(*(gen->ops)));
- if (gen->ops == NULL) {
- exit(1);
- }
- gen->ops->next = &next;
- gen->ops->destroy = &destroy;
- gen->res = seed;
- return gen;
- }
Advertisement
Add Comment
Please, Sign In to add comment