mod_function next_size_over()

in aios/autil/autil/FlatHashmap.h [879:1264]


    mod_function next_size_over(size_t &size) const {
        // prime numbers generated by the following method:
        // 1. start with a prime p = 2
        // 2. go to wolfram alpha and get p = NextPrime(2 * p)
        // 3. repeat 2. until you overflow 64 bits
        // you now have large gaps which you would hit if somebody called reserve() with an unlucky number.
        // 4. to fill the gaps for every prime p go to wolfram alpha and get ClosestPrime(p * 2^(1/3)) and
        // ClosestPrime(p * 2^(2/3)) and put those in the gaps
        // 5. get PrevPrime(2^64) and put it at the end
        static constexpr const size_t prime_list[] = {2llu,
                                                      3llu,
                                                      5llu,
                                                      7llu,
                                                      11llu,
                                                      13llu,
                                                      17llu,
                                                      23llu,
                                                      29llu,
                                                      37llu,
                                                      47llu,
                                                      59llu,
                                                      73llu,
                                                      97llu,
                                                      127llu,
                                                      151llu,
                                                      197llu,
                                                      251llu,
                                                      313llu,
                                                      397llu,
                                                      499llu,
                                                      631llu,
                                                      797llu,
                                                      1009llu,
                                                      1259llu,
                                                      1597llu,
                                                      2011llu,
                                                      2539llu,
                                                      3203llu,
                                                      4027llu,
                                                      5087llu,
                                                      6421llu,
                                                      8089llu,
                                                      10193llu,
                                                      12853llu,
                                                      16193llu,
                                                      20399llu,
                                                      25717llu,
                                                      32401llu,
                                                      40823llu,
                                                      51437llu,
                                                      64811llu,
                                                      81649llu,
                                                      102877llu,
                                                      129607llu,
                                                      163307llu,
                                                      205759llu,
                                                      259229llu,
                                                      326617llu,
                                                      411527llu,
                                                      518509llu,
                                                      653267llu,
                                                      823117llu,
                                                      1037059llu,
                                                      1306601llu,
                                                      1646237llu,
                                                      2074129llu,
                                                      2613229llu,
                                                      3292489llu,
                                                      4148279llu,
                                                      5226491llu,
                                                      6584983llu,
                                                      8296553llu,
                                                      10453007llu,
                                                      13169977llu,
                                                      16593127llu,
                                                      20906033llu,
                                                      26339969llu,
                                                      33186281llu,
                                                      41812097llu,
                                                      52679969llu,
                                                      66372617llu,
                                                      83624237llu,
                                                      105359939llu,
                                                      132745199llu,
                                                      167248483llu,
                                                      210719881llu,
                                                      265490441llu,
                                                      334496971llu,
                                                      421439783llu,
                                                      530980861llu,
                                                      668993977llu,
                                                      842879579llu,
                                                      1061961721llu,
                                                      1337987929llu,
                                                      1685759167llu,
                                                      2123923447llu,
                                                      2675975881llu,
                                                      3371518343llu,
                                                      4247846927llu,
                                                      5351951779llu,
                                                      6743036717llu,
                                                      8495693897llu,
                                                      10703903591llu,
                                                      13486073473llu,
                                                      16991387857llu,
                                                      21407807219llu,
                                                      26972146961llu,
                                                      33982775741llu,
                                                      42815614441llu,
                                                      53944293929llu,
                                                      67965551447llu,
                                                      85631228929llu,
                                                      107888587883llu,
                                                      135931102921llu,
                                                      171262457903llu,
                                                      215777175787llu,
                                                      271862205833llu,
                                                      342524915839llu,
                                                      431554351609llu,
                                                      543724411781llu,
                                                      685049831731llu,
                                                      863108703229llu,
                                                      1087448823553llu,
                                                      1370099663459llu,
                                                      1726217406467llu,
                                                      2174897647073llu,
                                                      2740199326961llu,
                                                      3452434812973llu,
                                                      4349795294267llu,
                                                      5480398654009llu,
                                                      6904869625999llu,
                                                      8699590588571llu,
                                                      10960797308051llu,
                                                      13809739252051llu,
                                                      17399181177241llu,
                                                      21921594616111llu,
                                                      27619478504183llu,
                                                      34798362354533llu,
                                                      43843189232363llu,
                                                      55238957008387llu,
                                                      69596724709081llu,
                                                      87686378464759llu,
                                                      110477914016779llu,
                                                      139193449418173llu,
                                                      175372756929481llu,
                                                      220955828033581llu,
                                                      278386898836457llu,
                                                      350745513859007llu,
                                                      441911656067171llu,
                                                      556773797672909llu,
                                                      701491027718027llu,
                                                      883823312134381llu,
                                                      1113547595345903llu,
                                                      1402982055436147llu,
                                                      1767646624268779llu,
                                                      2227095190691797llu,
                                                      2805964110872297llu,
                                                      3535293248537579llu,
                                                      4454190381383713llu,
                                                      5611928221744609llu,
                                                      7070586497075177llu,
                                                      8908380762767489llu,
                                                      11223856443489329llu,
                                                      14141172994150357llu,
                                                      17816761525534927llu,
                                                      22447712886978529llu,
                                                      28282345988300791llu,
                                                      35633523051069991llu,
                                                      44895425773957261llu,
                                                      56564691976601587llu,
                                                      71267046102139967llu,
                                                      89790851547914507llu,
                                                      113129383953203213llu,
                                                      142534092204280003llu,
                                                      179581703095829107llu,
                                                      226258767906406483llu,
                                                      285068184408560057llu,
                                                      359163406191658253llu,
                                                      452517535812813007llu,
                                                      570136368817120201llu,
                                                      718326812383316683llu,
                                                      905035071625626043llu,
                                                      1140272737634240411llu,
                                                      1436653624766633509llu,
                                                      1810070143251252131llu,
                                                      2280545475268481167llu,
                                                      2873307249533267101llu,
                                                      3620140286502504283llu,
                                                      4561090950536962147llu,
                                                      5746614499066534157llu,
                                                      7240280573005008577llu,
                                                      9122181901073924329llu,
                                                      11493228998133068689llu,
                                                      14480561146010017169llu,
                                                      18446744073709551557llu};
        static constexpr size_t (*const mod_functions[])(size_t) = {&mod0,
                                                                    &mod2,
                                                                    &mod3,
                                                                    &mod5,
                                                                    &mod7,
                                                                    &mod11,
                                                                    &mod13,
                                                                    &mod17,
                                                                    &mod23,
                                                                    &mod29,
                                                                    &mod37,
                                                                    &mod47,
                                                                    &mod59,
                                                                    &mod73,
                                                                    &mod97,
                                                                    &mod127,
                                                                    &mod151,
                                                                    &mod197,
                                                                    &mod251,
                                                                    &mod313,
                                                                    &mod397,
                                                                    &mod499,
                                                                    &mod631,
                                                                    &mod797,
                                                                    &mod1009,
                                                                    &mod1259,
                                                                    &mod1597,
                                                                    &mod2011,
                                                                    &mod2539,
                                                                    &mod3203,
                                                                    &mod4027,
                                                                    &mod5087,
                                                                    &mod6421,
                                                                    &mod8089,
                                                                    &mod10193,
                                                                    &mod12853,
                                                                    &mod16193,
                                                                    &mod20399,
                                                                    &mod25717,
                                                                    &mod32401,
                                                                    &mod40823,
                                                                    &mod51437,
                                                                    &mod64811,
                                                                    &mod81649,
                                                                    &mod102877,
                                                                    &mod129607,
                                                                    &mod163307,
                                                                    &mod205759,
                                                                    &mod259229,
                                                                    &mod326617,
                                                                    &mod411527,
                                                                    &mod518509,
                                                                    &mod653267,
                                                                    &mod823117,
                                                                    &mod1037059,
                                                                    &mod1306601,
                                                                    &mod1646237,
                                                                    &mod2074129,
                                                                    &mod2613229,
                                                                    &mod3292489,
                                                                    &mod4148279,
                                                                    &mod5226491,
                                                                    &mod6584983,
                                                                    &mod8296553,
                                                                    &mod10453007,
                                                                    &mod13169977,
                                                                    &mod16593127,
                                                                    &mod20906033,
                                                                    &mod26339969,
                                                                    &mod33186281,
                                                                    &mod41812097,
                                                                    &mod52679969,
                                                                    &mod66372617,
                                                                    &mod83624237,
                                                                    &mod105359939,
                                                                    &mod132745199,
                                                                    &mod167248483,
                                                                    &mod210719881,
                                                                    &mod265490441,
                                                                    &mod334496971,
                                                                    &mod421439783,
                                                                    &mod530980861,
                                                                    &mod668993977,
                                                                    &mod842879579,
                                                                    &mod1061961721,
                                                                    &mod1337987929,
                                                                    &mod1685759167,
                                                                    &mod2123923447,
                                                                    &mod2675975881,
                                                                    &mod3371518343,
                                                                    &mod4247846927,
                                                                    &mod5351951779,
                                                                    &mod6743036717,
                                                                    &mod8495693897,
                                                                    &mod10703903591,
                                                                    &mod13486073473,
                                                                    &mod16991387857,
                                                                    &mod21407807219,
                                                                    &mod26972146961,
                                                                    &mod33982775741,
                                                                    &mod42815614441,
                                                                    &mod53944293929,
                                                                    &mod67965551447,
                                                                    &mod85631228929,
                                                                    &mod107888587883,
                                                                    &mod135931102921,
                                                                    &mod171262457903,
                                                                    &mod215777175787,
                                                                    &mod271862205833,
                                                                    &mod342524915839,
                                                                    &mod431554351609,
                                                                    &mod543724411781,
                                                                    &mod685049831731,
                                                                    &mod863108703229,
                                                                    &mod1087448823553,
                                                                    &mod1370099663459,
                                                                    &mod1726217406467,
                                                                    &mod2174897647073,
                                                                    &mod2740199326961,
                                                                    &mod3452434812973,
                                                                    &mod4349795294267,
                                                                    &mod5480398654009,
                                                                    &mod6904869625999,
                                                                    &mod8699590588571,
                                                                    &mod10960797308051,
                                                                    &mod13809739252051,
                                                                    &mod17399181177241,
                                                                    &mod21921594616111,
                                                                    &mod27619478504183,
                                                                    &mod34798362354533,
                                                                    &mod43843189232363,
                                                                    &mod55238957008387,
                                                                    &mod69596724709081,
                                                                    &mod87686378464759,
                                                                    &mod110477914016779,
                                                                    &mod139193449418173,
                                                                    &mod175372756929481,
                                                                    &mod220955828033581,
                                                                    &mod278386898836457,
                                                                    &mod350745513859007,
                                                                    &mod441911656067171,
                                                                    &mod556773797672909,
                                                                    &mod701491027718027,
                                                                    &mod883823312134381,
                                                                    &mod1113547595345903,
                                                                    &mod1402982055436147,
                                                                    &mod1767646624268779,
                                                                    &mod2227095190691797,
                                                                    &mod2805964110872297,
                                                                    &mod3535293248537579,
                                                                    &mod4454190381383713,
                                                                    &mod5611928221744609,
                                                                    &mod7070586497075177,
                                                                    &mod8908380762767489,
                                                                    &mod11223856443489329,
                                                                    &mod14141172994150357,
                                                                    &mod17816761525534927,
                                                                    &mod22447712886978529,
                                                                    &mod28282345988300791,
                                                                    &mod35633523051069991,
                                                                    &mod44895425773957261,
                                                                    &mod56564691976601587,
                                                                    &mod71267046102139967,
                                                                    &mod89790851547914507,
                                                                    &mod113129383953203213,
                                                                    &mod142534092204280003,
                                                                    &mod179581703095829107,
                                                                    &mod226258767906406483,
                                                                    &mod285068184408560057,
                                                                    &mod359163406191658253,
                                                                    &mod452517535812813007,
                                                                    &mod570136368817120201,
                                                                    &mod718326812383316683,
                                                                    &mod905035071625626043,
                                                                    &mod1140272737634240411,
                                                                    &mod1436653624766633509,
                                                                    &mod1810070143251252131,
                                                                    &mod2280545475268481167,
                                                                    &mod2873307249533267101,
                                                                    &mod3620140286502504283,
                                                                    &mod4561090950536962147,
                                                                    &mod5746614499066534157,
                                                                    &mod7240280573005008577,
                                                                    &mod9122181901073924329,
                                                                    &mod11493228998133068689,
                                                                    &mod14480561146010017169,
                                                                    &mod18446744073709551557};
        const size_t *found = std::lower_bound(std::begin(prime_list), std::end(prime_list) - 1, size);
        size = *found;
        return mod_functions[1 + found - prime_list];
    }