<- Back to shtanton's homepage
aboutsummaryrefslogtreecommitdiff
path: root/main/filter.go
diff options
context:
space:
mode:
Diffstat (limited to 'main/filter.go')
-rw-r--r--main/filter.go34
1 files changed, 34 insertions, 0 deletions
diff --git a/main/filter.go b/main/filter.go
new file mode 100644
index 0000000..95e6d82
--- /dev/null
+++ b/main/filter.go
@@ -0,0 +1,34 @@
+package main
+
+type PathFilter struct {
+ initial PathFilterState
+}
+func (filter PathFilter) exec(state *ProgramState) bool {
+ pathFilterState := make(map[PathFilterState]struct{})
+ pathFilterState[filter.initial] = struct{}{}
+ for _, segment := range state.space.path {
+ nextPathFilterState := make(map[PathFilterState]struct{})
+ for curState := range pathFilterState {
+ for nextState := range curState.eat(segment) {
+ nextPathFilterState[nextState] = struct{}{}
+ }
+ }
+ pathFilterState = nextPathFilterState
+ }
+ for pathState := range pathFilterState {
+ if pathState.accept() {
+ return true
+ }
+ }
+ return false
+}
+
+type RangeFilter struct {
+ start Filter
+ end Filter
+ active bool
+}
+
+type Filter interface {
+ exec(*ProgramState) bool
+} \ No newline at end of file