Skip to content

Commit

Permalink
change visibility.
Browse files Browse the repository at this point in the history
  • Loading branch information
piaodazhu committed May 2, 2023
1 parent 65181d6 commit 573f184
Show file tree
Hide file tree
Showing 5 changed files with 112 additions and 119 deletions.
14 changes: 5 additions & 9 deletions dependency.go
Original file line number Diff line number Diff line change
@@ -1,21 +1,17 @@
package gotcc

type DependencyExpression func() bool

func DefaultTrueExpr() bool {
return true
}

func DefaultFalseExpr() bool {
return false
}

func newDependencyExpr(valMap map[uint32]bool, key uint32) DependencyExpression {
return func() bool {
return valMap[key]
}
}


func DefaultTrueExpr() bool { return true }
func DefaultFalseExpr() bool { return false }


func MakeNotExpr(Expr DependencyExpression) DependencyExpression {
return func() bool {
return !Expr()
Expand Down
90 changes: 46 additions & 44 deletions dependency_test.go
Original file line number Diff line number Diff line change
@@ -1,26 +1,16 @@
package gotcc

import (
"fmt"
"testing"
)

func PrintTask(args map[string]interface{}) (interface{}, error) {
for name := range args {
fmt.Println("args: ", name)
}
str := args["BIND"].(string)
fmt.Println(str)
return nil, nil
}

func TestDependency(t *testing.T) {
A := newExecutor("A", PrintTask, "A")
B := newExecutor("B", PrintTask, "B")
C := newExecutor("C", PrintTask, "C")
D := newExecutor("D", PrintTask, "D")
E := newExecutor("E", PrintTask, "E")
F := newExecutor("F", PrintTask, "F")
A := newExecutor("A", nil, "A")
B := newExecutor("B", nil, "B")
C := newExecutor("C", nil, "C")
D := newExecutor("D", nil, "D")
E := newExecutor("E", nil, "E")
F := newExecutor("F", nil, "F")

// C <- A && B
C.SetDependency(MakeAndExpr(C.NewDependencyExpr(A), C.NewDependencyExpr(B)))
Expand All @@ -45,13 +35,16 @@ func TestDependency(t *testing.T) {
A.SetDependency(DefaultFalseExpr)
B.SetDependency(DefaultFalseExpr)

C.Dependency[A.Id] = A.CalcDependency()
C.Dependency[B.Id] = B.CalcDependency()
D.Dependency[A.Id] = A.CalcDependency()
D.Dependency[B.Id] = B.CalcDependency()
E.Dependency[D.Id] = D.CalcDependency()
F.Dependency[B.Id] = B.CalcDependency()
F.Dependency[D.Id] = D.CalcDependency()
C.MarkDependency(A.Id, A.CalcDependency())
C.MarkDependency(B.Id, B.CalcDependency())

D.MarkDependency(A.Id, A.CalcDependency())
D.MarkDependency(B.Id, B.CalcDependency())

E.MarkDependency(D.Id, D.CalcDependency())

F.MarkDependency(B.Id, B.CalcDependency())
F.MarkDependency(D.Id, D.CalcDependency())

if A.CalcDependency() != false || B.CalcDependency() != false || C.CalcDependency() != false || D.CalcDependency() != false || E.CalcDependency() != true || F.CalcDependency() != false {
t.Errorf("Error: A=%v, B=%v, C=%v, D=%v, E=%v, F=%v\n", A.CalcDependency(), B.CalcDependency(), C.CalcDependency(), D.CalcDependency(), E.CalcDependency(), F.CalcDependency())
Expand All @@ -61,13 +54,16 @@ func TestDependency(t *testing.T) {
A.SetDependency(DefaultTrueExpr)
B.SetDependency(DefaultFalseExpr)

C.Dependency[A.Id] = A.CalcDependency()
C.Dependency[B.Id] = B.CalcDependency()
D.Dependency[A.Id] = A.CalcDependency()
D.Dependency[B.Id] = B.CalcDependency()
E.Dependency[D.Id] = D.CalcDependency()
F.Dependency[B.Id] = B.CalcDependency()
F.Dependency[D.Id] = D.CalcDependency()
C.MarkDependency(A.Id, A.CalcDependency())
C.MarkDependency(B.Id, B.CalcDependency())

D.MarkDependency(A.Id, A.CalcDependency())
D.MarkDependency(B.Id, B.CalcDependency())

E.MarkDependency(D.Id, D.CalcDependency())

F.MarkDependency(B.Id, B.CalcDependency())
F.MarkDependency(D.Id, D.CalcDependency())

if A.CalcDependency() != true || B.CalcDependency() != false || C.CalcDependency() != false || D.CalcDependency() != true || E.CalcDependency() != false || F.CalcDependency() != true {
t.Errorf("Error: A=%v, B=%v, C=%v, D=%v, E=%v, F=%v\n", A.CalcDependency(), B.CalcDependency(), C.CalcDependency(), D.CalcDependency(), E.CalcDependency(), F.CalcDependency())
Expand All @@ -77,13 +73,16 @@ func TestDependency(t *testing.T) {
A.SetDependency(DefaultFalseExpr)
B.SetDependency(DefaultTrueExpr)

C.Dependency[A.Id] = A.CalcDependency()
C.Dependency[B.Id] = B.CalcDependency()
D.Dependency[A.Id] = A.CalcDependency()
D.Dependency[B.Id] = B.CalcDependency()
E.Dependency[D.Id] = D.CalcDependency()
F.Dependency[B.Id] = B.CalcDependency()
F.Dependency[D.Id] = D.CalcDependency()
C.MarkDependency(A.Id, A.CalcDependency())
C.MarkDependency(B.Id, B.CalcDependency())

D.MarkDependency(A.Id, A.CalcDependency())
D.MarkDependency(B.Id, B.CalcDependency())

E.MarkDependency(D.Id, D.CalcDependency())

F.MarkDependency(B.Id, B.CalcDependency())
F.MarkDependency(D.Id, D.CalcDependency())

if A.CalcDependency() != false || B.CalcDependency() != true || C.CalcDependency() != false || D.CalcDependency() != true || E.CalcDependency() != false || F.CalcDependency() != false {
t.Errorf("Error: A=%v, B=%v, C=%v, D=%v, E=%v, F=%v\n", A.CalcDependency(), B.CalcDependency(), C.CalcDependency(), D.CalcDependency(), E.CalcDependency(), F.CalcDependency())
Expand All @@ -93,13 +92,16 @@ func TestDependency(t *testing.T) {
A.SetDependency(DefaultTrueExpr)
B.SetDependency(DefaultTrueExpr)

C.Dependency[A.Id] = A.CalcDependency()
C.Dependency[B.Id] = B.CalcDependency()
D.Dependency[A.Id] = A.CalcDependency()
D.Dependency[B.Id] = B.CalcDependency()
E.Dependency[D.Id] = D.CalcDependency()
F.Dependency[B.Id] = B.CalcDependency()
F.Dependency[D.Id] = D.CalcDependency()
C.MarkDependency(A.Id, A.CalcDependency())
C.MarkDependency(B.Id, B.CalcDependency())

D.MarkDependency(A.Id, A.CalcDependency())
D.MarkDependency(B.Id, B.CalcDependency())

E.MarkDependency(D.Id, D.CalcDependency())

F.MarkDependency(B.Id, B.CalcDependency())
F.MarkDependency(D.Id, D.CalcDependency())

if A.CalcDependency() != true || B.CalcDependency() != true || C.CalcDependency() != true || D.CalcDependency() != true || E.CalcDependency() != false || F.CalcDependency() != false {
t.Errorf("Error: A=%v, B=%v, C=%v, D=%v, E=%v, F=%v\n", A.CalcDependency(), B.CalcDependency(), C.CalcDependency(), D.CalcDependency(), E.CalcDependency(), F.CalcDependency())
Expand Down
42 changes: 20 additions & 22 deletions executor.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,57 +8,55 @@ type Executor struct {
Id uint32
Name string

Dependency map[uint32]bool
DependencyExpr DependencyExpression

MessageBuffer chan Message
Subscribers []*chan Message

BindArgs interface{}
Task func(args map[string]interface{}) (interface{}, error)
Undo func(args map[string]interface{}) error
UndoSkipError bool

TCController *TCController
dependency map[uint32]bool
dependencyExpr DependencyExpression

messageBuffer chan Message
subscribers []*chan Message
}

func newExecutor(name string, f func(args map[string]interface{}) (interface{}, error), args interface{}) *Executor {
return &Executor{
Id: uuid.New().ID(),
Name: name,

Dependency: map[uint32]bool{},
DependencyExpr: DefaultTrueExpr,
dependency: map[uint32]bool{},
dependencyExpr: DefaultTrueExpr,

MessageBuffer: make(chan Message),
Subscribers: []*chan Message{},
messageBuffer: make(chan Message),
subscribers: []*chan Message{},

BindArgs: args,
Task: f,
Undo: EmptyUndoFunc,

TCController: nil,
}
}

func (e *Executor) NewDependencyExpr(d *Executor) DependencyExpression {
if _, exists := e.Dependency[d.Id]; !exists {
e.Dependency[d.Id] = false
// need buffered chan?
e.MessageBuffer = make(chan Message, cap(e.MessageBuffer)+1)
d.Subscribers = append(d.Subscribers, &e.MessageBuffer)
if _, exists := e.dependency[d.Id]; !exists {
e.dependency[d.Id] = false
e.messageBuffer = make(chan Message, cap(e.messageBuffer)+1)
d.subscribers = append(d.subscribers, &e.messageBuffer)
}
return newDependencyExpr(e.Dependency, d.Id)
return newDependencyExpr(e.dependency, d.Id)
}

func (e *Executor) SetDependency(Expr DependencyExpression) *Executor {
// delete(e.TCController.StartSet, e.Id)
e.DependencyExpr = Expr
e.dependencyExpr = Expr
return e
}

func (e *Executor) MarkDependency(id uint32, finished bool) {
e.dependency[id] = finished
}

func (e *Executor) CalcDependency() bool {
return e.DependencyExpr()
return e.dependencyExpr()
}

func (e *Executor) SetUndoFunc(undo func(args map[string]interface{}) error, SkipError bool) *Executor {
Expand Down
4 changes: 2 additions & 2 deletions go.mod
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
module gotcc
module github.com/piaodazhu/gotcc

go 1.18
go 1.12

require github.com/google/uuid v1.3.0
Loading

0 comments on commit 573f184

Please sign in to comment.