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 *rr = malloc(sizeof(*rr));
- if (rr == NULL) {
- exit(1);
- }
- rr->ops = malloc(sizeof(*(rr->ops)));
- if (rr->ops == NULL) {
- exit(1);
- }
- rr->ops->next = &next;
- rr->ops->destroy = &destroy;
- rr->res = seed;
- return rr;
- }
Advertisement
Add Comment
Please, Sign In to add comment