diff options
| author | Lukasz Kasprzak <lukas@labunix.xyz> | 2026-09-14 15:16:55 +0200 |
|---|---|---|
| committer | Lukasz Kasprzak <lukas@labunix.xyz> | 2026-09-14 15:16:55 +0200 |
| commit | 0b5d0eb92c5be2f0ddb2fa73990f31e5654e57fe (patch) | |
| tree | 358e331945b8206ed4a72703e3aedfe8ea7cdcdb /internal/cond/types.go | |
| parent | 1d3f2d1e4c59867024470d3444e12698b7ebb22e (diff) | |
| download | krino-0b5d0eb92c5be2f0ddb2fa73990f31e5654e57fe.tar.gz krino-0b5d0eb92c5be2f0ddb2fa73990f31e5654e57fe.zip | |
krino: 0.0.5 — keyword cache, t and d in reviewv0.0.5
Diffstat (limited to 'internal/cond/types.go')
| -rw-r--r-- | internal/cond/types.go | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/internal/cond/types.go b/internal/cond/types.go index 9455f63..28a4fc9 100644 --- a/internal/cond/types.go +++ b/internal/cond/types.go @@ -24,6 +24,30 @@ type Cond struct { opt Options // the case/fold settings conditions were compiled with; Task 8 needs them again at eval time UsesContent bool // some content test exists DupDirs [][]string // the raw directory arguments of each duplicate test, in order + Keywords []Keyword // every content keyword, as compiled, in order +} + +// Keyword is one content keyword as a content test compares it: normalised +// under the options it was compiled with. +type Keyword struct { + Opt Options + Norm string +} + +// Key is the keyword's identity across runs, for the keyword cache: its +// options and its normalised text. +func (k Keyword) Key() string { return KeywordKey(k.Opt, k.Norm) } + +// KeywordKey is Keyword.Key for opt and an already normalised keyword. +func KeywordKey(opt Options, norm string) string { + b := []byte("sn:") + if opt.IgnoreCase { + b[0] = 'i' + } + if opt.Fold { + b[1] = 'f' + } + return string(b) + norm } // kind is what a compiled node tests, or how it combines its children. |
