echodict/llama.cpp
version https://git-lfs.github.com/spec/v1 oid sha256:cfc44b7ba25614df70e6b65e3341cae0310163bd32fd31a6b928a542df433faf size 30786
0479
1#include "ngram-mod.h"2 3//4// common_ngram_mod5//6 7common_ngram_mod::common_ngram_mod(uint16_t n, size_t size) : n(n), used(0) {8 entries.resize(size);9 10 reset();11}12 13size_t common_ngram_mod::idx(const entry_t * tokens) const {14 size_t res = 0;15 16 for (size_t i = 0; i < n; ++i) {17 res = res*6364136223846793005ULL + tokens[i];18 }19 20 res = res % entries.size();21 22 return res;23}24 25void common_ngram_mod::add(const entry_t * tokens) {26 const size_t i = idx(tokens);27 28 if (entries[i] == EMPTY) {29 used++;30 }31 32 entries[i] = tokens[n];33}34 35common_ngram_mod::entry_t common_ngram_mod::get(const entry_t * tokens) const {36 const size_t i = idx(tokens);37 38 return entries[i];39}40 41void common_ngram_mod::reset() {42 std::fill(entries.begin(), entries.end(), EMPTY);43 used = 0;44}45 46size_t common_ngram_mod::get_n() const {47 return n;48}49 50size_t common_ngram_mod::get_used() const {51 return used;52}53 54size_t common_ngram_mod::size() const {55 return entries.size();56}57 58size_t common_ngram_mod::size_bytes() const {59 return entries.size() * sizeof(entries[0]);60}61 