From 45de1f5c7ac946599960590ded6e6783758eb224 Mon Sep 17 00:00:00 2001 From: lash Date: Sun, 9 Apr 2023 10:16:41 +0100 Subject: [PATCH] Fully rehabilitate all modules after cache, page refactor --- go/engine/default.go | 6 ++++-- go/engine/engine.go | 45 ++++++++++++++++++++++++++++------------ go/engine/engine_test.go | 17 ++++++++------- go/render/menu.go | 1 + go/render/page.go | 4 ++-- 5 files changed, 48 insertions(+), 25 deletions(-) diff --git a/go/engine/default.go b/go/engine/default.go index a2753cc..94af301 100644 --- a/go/engine/default.go +++ b/go/engine/default.go @@ -1,12 +1,14 @@ package engine import ( - "git.defalsify.org/festive/state" + "git.defalsify.org/festive/cache" "git.defalsify.org/festive/resource" + "git.defalsify.org/festive/state" ) func NewDefaultEngine(dir string) Engine { st := state.NewState(0) rs := resource.NewFsResource(dir) - return NewEngine(&st, &rs) + ca := cache.NewCache() + return NewEngine(&st, &rs, ca) } diff --git a/go/engine/engine.go b/go/engine/engine.go index 8c7864a..a12a826 100644 --- a/go/engine/engine.go +++ b/go/engine/engine.go @@ -6,6 +6,8 @@ import ( "io" "log" + "git.defalsify.org/festive/cache" + "git.defalsify.org/festive/render" "git.defalsify.org/festive/resource" "git.defalsify.org/festive/state" "git.defalsify.org/festive/vm" @@ -20,11 +22,17 @@ import ( type Engine struct { st *state.State rs resource.Resource + ca cache.Memory + pg render.Renderer } // NewEngine creates a new Engine -func NewEngine(st *state.State, rs resource.Resource) Engine { - engine := Engine{st, rs} +func NewEngine(st *state.State, rs resource.Resource, ca cache.Memory) Engine { + engine := Engine{ + st: st, + rs: rs, + ca: ca, + } return engine } @@ -32,12 +40,15 @@ func NewEngine(st *state.State, rs resource.Resource) Engine { // // It loads and executes code for the start node. func(en *Engine) Init(sym string, ctx context.Context) error { + mn := render.NewMenu() + en.pg = render.NewPage(en.ca, en.rs).WithMenu(mn) + vmi := vm.NewVm(en.st, en.rs, en.ca, mn, nil) err := en.st.SetInput([]byte{}) if err != nil { return err } b := vm.NewLine(nil, vm.MOVE, []string{sym}, nil, nil) - b, err = vm.Run(b, en.st, en.rs, ctx) + b, err = vmi.Run(b, ctx) if err != nil { return err } @@ -64,6 +75,9 @@ func (en *Engine) Exec(input []byte, ctx context.Context) (bool, error) { if err != nil { return false, err } + mn := render.NewMenu() + en.pg = render.NewPage(en.ca, en.rs).WithMenu(mn) + vmi := vm.NewVm(en.st, en.rs, en.ca, mn, en.pg) log.Printf("new execution with input '%s' (0x%x)", input, input) code, err := en.st.GetCode() @@ -73,7 +87,7 @@ func (en *Engine) Exec(input []byte, ctx context.Context) (bool, error) { if len(code) == 0 { return false, fmt.Errorf("no code to execute") } - code, err = vm.Run(code, en.st, en.rs, ctx) + code, err = vmi.Run(code, ctx) if err != nil { return false, err } @@ -106,22 +120,27 @@ func (en *Engine) Exec(input []byte, ctx context.Context) (bool, error) { // - the supplied writer fails to process the writes. func(en *Engine) WriteResult(w io.Writer) error { location, idx := en.st.Where() - v, err := en.st.Get() + v, err := en.ca.Get() if err != nil { return err } - r, err := en.rs.RenderTemplate(location, v, idx, nil) +// r, err := en.rs.RenderTemplate(location, v, idx, nil) +// if err != nil { +// return err +// } +// m, err := en.rs.RenderMenu(idx) +// if err != nil { +// return err +// } +// if len(m) > 0 { +// r += "\n" + m +// } + r, err := en.pg.Render(location, v, idx) if err != nil { return err } - m, err := en.rs.RenderMenu(idx) - if err != nil { - return err - } - if len(m) > 0 { - r += "\n" + m - } c, err := io.WriteString(w, r) log.Printf("%v bytes written as result for %v", c, location) + en.pg = nil return err } diff --git a/go/engine/engine_test.go b/go/engine/engine_test.go index 3c9b830..c625db1 100644 --- a/go/engine/engine_test.go +++ b/go/engine/engine_test.go @@ -8,6 +8,7 @@ import ( "path" "testing" + "git.defalsify.org/festive/cache" "git.defalsify.org/festive/resource" "git.defalsify.org/festive/state" "git.defalsify.org/festive/testdata" @@ -31,10 +32,6 @@ func NewFsWrapper(path string, st *state.State) FsWrapper { } } -func (r FsWrapper) RenderTemplate(sym string, values map[string]string, idx uint16, sizer *resource.Sizer) (string, error) { - return resource.DefaultRenderTemplate(r, sym, values, idx, sizer) -} - func(fs FsWrapper) one(ctx context.Context) (string, error) { return "one", nil } @@ -72,11 +69,13 @@ func generateTestData(t *testing.T) { } func TestEngineInit(t *testing.T) { - st := state.NewState(17).WithCacheSize(1024) generateTestData(t) ctx := context.TODO() + st := state.NewState(17) rs := NewFsWrapper(dataDir, &st) - en := NewEngine(&st, &rs) + ca := cache.NewCache().WithCacheSize(1024) + + en := NewEngine(&st, &rs, ca) err := en.Init("root", ctx) if err != nil { t.Fatal(err) @@ -122,11 +121,13 @@ it has more lines } func TestEngineExecInvalidInput(t *testing.T) { - st := state.NewState(17).WithCacheSize(1024) generateTestData(t) ctx := context.TODO() + st := state.NewState(17) rs := NewFsWrapper(dataDir, &st) - en := NewEngine(&st, &rs) + ca := cache.NewCache().WithCacheSize(1024) + + en := NewEngine(&st, &rs, ca) err := en.Init("root", ctx) if err != nil { t.Fatal(err) diff --git a/go/render/menu.go b/go/render/menu.go index 644a63c..d1d5a68 100644 --- a/go/render/menu.go +++ b/go/render/menu.go @@ -154,6 +154,7 @@ func(m *Menu) reset() { } } + func(m *Menu) ReservedSize() uint16 { return m.outputSize } diff --git a/go/render/page.go b/go/render/page.go index fd392a2..d98d56a 100644 --- a/go/render/page.go +++ b/go/render/page.go @@ -13,7 +13,7 @@ import ( type Page struct { cacheMap map[string]string // Mapped - cache *cache.Cache + cache cache.Memory resource resource.Resource menu *Menu sink *string @@ -22,7 +22,7 @@ type Page struct { sinkProcessed bool } -func NewPage(cache *cache.Cache, rs resource.Resource) *Page { +func NewPage(cache cache.Memory, rs resource.Resource) *Page { return &Page{ cache: cache, cacheMap: make(map[string]string),