MCPcopy Create free account
hub / github.com/Snapchat/KeyDB / init_by_array

Function init_by_array

deps/memkind/src/jemalloc/test/src/SFMT.c:638–712  ·  view source on GitHub ↗

* This function initializes the internal state array, * with an array of 32-bit integers used as the seeds * @param init_key the array of 32-bit integers, used as a seed. * @param key_length the length of init_key. */

Source from the content-addressed store, hash-verified

636 * @param key_length the length of init_key.
637 */
638sfmt_t *init_by_array(uint32_t *init_key, int key_length) {
639 void *p;
640 sfmt_t *ctx;
641 int i, j, count;
642 uint32_t r;
643 int lag;
644 int mid;
645 int size = N * 4;
646 uint32_t *psfmt32;
647
648 if (posix_memalign(&p, sizeof(w128_t), sizeof(sfmt_t)) != 0) {
649 return NULL;
650 }
651 ctx = (sfmt_t *)p;
652 psfmt32 = &ctx->sfmt[0].u[0];
653
654 if (size >= 623) {
655 lag = 11;
656 } else if (size >= 68) {
657 lag = 7;
658 } else if (size >= 39) {
659 lag = 5;
660 } else {
661 lag = 3;
662 }
663 mid = (size - lag) / 2;
664
665 memset(ctx->sfmt, 0x8b, sizeof(ctx->sfmt));
666 if (key_length + 1 > N32) {
667 count = key_length + 1;
668 } else {
669 count = N32;
670 }
671 r = func1(psfmt32[idxof(0)] ^ psfmt32[idxof(mid)]
672 ^ psfmt32[idxof(N32 - 1)]);
673 psfmt32[idxof(mid)] += r;
674 r += key_length;
675 psfmt32[idxof(mid + lag)] += r;
676 psfmt32[idxof(0)] = r;
677
678 count--;
679 for (i = 1, j = 0; (j < count) && (j < key_length); j++) {
680 r = func1(psfmt32[idxof(i)] ^ psfmt32[idxof((i + mid) % N32)]
681 ^ psfmt32[idxof((i + N32 - 1) % N32)]);
682 psfmt32[idxof((i + mid) % N32)] += r;
683 r += init_key[j] + i;
684 psfmt32[idxof((i + mid + lag) % N32)] += r;
685 psfmt32[idxof(i)] = r;
686 i = (i + 1) % N32;
687 }
688 for (; j < count; j++) {
689 r = func1(psfmt32[idxof(i)] ^ psfmt32[idxof((i + mid) % N32)]
690 ^ psfmt32[idxof((i + N32 - 1) % N32)]);
691 psfmt32[idxof((i + mid) % N32)] += r;
692 r += i;
693 psfmt32[idxof((i + mid + lag) % N32)] += r;
694 psfmt32[idxof(i)] = r;
695 i = (i + 1) % N32;

Callers 1

TEST_BEGINFunction · 0.50

Calls 5

posix_memalignFunction · 0.85
func1Function · 0.70
idxofFunction · 0.70
func2Function · 0.70
period_certificationFunction · 0.70

Tested by

no test coverage detected