summaryrefslogtreecommitdiff
path: root/llama.cpp/common/ngram-mod.cpp
diff options
context:
space:
mode:
authorMitja Felicijan <mitja.felicijan@gmail.com>2026-02-12 20:57:17 +0100
committerMitja Felicijan <mitja.felicijan@gmail.com>2026-02-12 20:57:17 +0100
commitb333b06772c89d96aacb5490d6a219fba7c09cc6 (patch)
tree211df60083a5946baa2ed61d33d8121b7e251b06 /llama.cpp/common/ngram-mod.cpp
downloadllmnpc-b333b06772c89d96aacb5490d6a219fba7c09cc6.tar.gz
Engage!
Diffstat (limited to 'llama.cpp/common/ngram-mod.cpp')
-rw-r--r--llama.cpp/common/ngram-mod.cpp60
1 files changed, 60 insertions, 0 deletions
diff --git a/llama.cpp/common/ngram-mod.cpp b/llama.cpp/common/ngram-mod.cpp
new file mode 100644
index 0000000..76f7257
--- /dev/null
+++ b/llama.cpp/common/ngram-mod.cpp
@@ -0,0 +1,60 @@
+#include "ngram-mod.h"
+
+//
+// common_ngram_mod
+//
+
+common_ngram_mod::common_ngram_mod(uint16_t n, size_t size) : n(n), used(0) {
+ entries.resize(size);
+
+ reset();
+}
+
+size_t common_ngram_mod::idx(const entry_t * tokens) const {
+ size_t res = 0;
+
+ for (size_t i = 0; i < n; ++i) {
+ res = res*6364136223846793005ULL + tokens[i];
+ }
+
+ res = res % entries.size();
+
+ return res;
+}
+
+void common_ngram_mod::add(const entry_t * tokens) {
+ const size_t i = idx(tokens);
+
+ if (entries[i] == EMPTY) {
+ used++;
+ }
+
+ entries[i] = tokens[n];
+}
+
+common_ngram_mod::entry_t common_ngram_mod::get(const entry_t * tokens) const {
+ const size_t i = idx(tokens);
+
+ return entries[i];
+}
+
+void common_ngram_mod::reset() {
+ std::fill(entries.begin(), entries.end(), EMPTY);
+ used = 0;
+}
+
+size_t common_ngram_mod::get_n() const {
+ return n;
+}
+
+size_t common_ngram_mod::get_used() const {
+ return used;
+}
+
+size_t common_ngram_mod::size() const {
+ return entries.size();
+}
+
+size_t common_ngram_mod::size_bytes() const {
+ return entries.size() * sizeof(entries[0]);
+}