smn_analysis

package
v1.0.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Nov 23, 2022 License: MIT Imports: 3 Imported by: 1

Documentation

Index

Constants

View Source
const (
	ErrNoMatchStateNode     = "ErrNoMatchStateNode: err list: [%s]"                               //没有满足的
	ErrTooMuchStateNodeLive = "ErrTooMuchStateNodeLive, input[%v] live nodes [%s], end nodes[%s]" //太多满足条件的
)
View Source
const (
	//ResultEnd product by end.
	ResultEnd = -1
	//ResultPFromDft product from default node.
	ResultPFromDft = -2
	//ResultError end with error.
	ResultError = -3
)

Variables

This section is empty.

Functions

This section is empty.

Types

type DftStateNodeReader

type DftStateNodeReader struct {
	SNodeList []*StateNode
	LiveMap   map[*StateNode]byte
	// contains filtered or unexported fields
}

DftStateNodeReader choice node.

func NewDftStateNodeReader

func NewDftStateNodeReader(machine *StateMachine) *DftStateNodeReader

NewDftStateNodeReader .

func (*DftStateNodeReader) Clean

func (dsn *DftStateNodeReader) Clean()

Clean .

func (*DftStateNodeReader) End

func (dsn *DftStateNodeReader) End(stateNode *StateNode) (isEnd bool, err error)

func (*DftStateNodeReader) GetProduct

func (dsn *DftStateNodeReader) GetProduct() ProductItf

GetProduct .

func (*DftStateNodeReader) Name

func (dsn *DftStateNodeReader) Name() string

Name reader's name.

func (*DftStateNodeReader) PreRead

func (dsn *DftStateNodeReader) PreRead(stateNode *StateNode, input InputItf) (isEnd bool, err error)

PreRead DftStateNodeReader don't do PreRead, because it should deal all registed reader.

func (*DftStateNodeReader) Read

func (dsn *DftStateNodeReader) Read(stateNode *StateNode, input InputItf) (isEnd bool, err error)

func (*DftStateNodeReader) Register

Register .

type InputItf

type InputItf interface {
	//Copy should give copy to prevent user change it.
	Copy() InputItf
}

InputItf StateMachine's input.

type OnNodeRead

type OnNodeRead func(stateNode *StateNode, input InputItf) (isEnd bool, err error)

OnNodeRead node read. maybe no use now?

type ProductDftNode

type ProductDftNode struct {
	Reason string
}

ProductDftNode get product type from default.

func (*ProductDftNode) ProductType

func (p *ProductDftNode) ProductType() int

ProductType .

type ProductEnd

type ProductEnd struct{}

ProductEnd last result.

func (*ProductEnd) ProductType

func (*ProductEnd) ProductType() int

ProductType result's type. end's id = -1.

type ProductError

type ProductError struct {
	Err string
}

ProductError end with error.

func (*ProductError) ProductType

func (*ProductError) ProductType() int

ProductType result's type. usally should >= 0.

func (*ProductError) ToError

func (pe *ProductError) ToError() error

ToError .

type ProductItf

type ProductItf interface {
	//ProductType result's type. usually should >= 0.
	ProductType() int
}

ProductItf StateMachine's result.

type StateMachine

type StateMachine struct {
	ChanSize int

	//when a StateNode end, will let nowStateNOde = DfeStateNode.
	//StateNode's PreRead should always return (isEnd=false, err=nil)
	DftStateNode *StateNode
	// contains filtered or unexported fields
}

StateMachine state machine to formulate a state-tree and get result by input.

func (*StateMachine) End

func (sm *StateMachine) End()

End insert a end product.

func (*StateMachine) Err

func (sm *StateMachine) Err(err string)

Err insert a err product.

func (*StateMachine) ErrEnd

func (sm *StateMachine) ErrEnd(err string)

ErrEnd insert a error product.

func (*StateMachine) GetResultChan

func (sm *StateMachine) GetResultChan() <-chan ProductItf

GetResultChan .

func (*StateMachine) Init

func (sm *StateMachine) Init() *StateMachine

Init base on new(StateMachine).Init() write style.

func (*StateMachine) IsEndHappened

func (sm *StateMachine) IsEndHappened() bool

IsEndHappened if have end then return true.

func (*StateMachine) IsPreadEnd

func (sm *StateMachine) IsPreadEnd() bool

IsPreadEnd return the last read status.

func (*StateMachine) IsReadEnd

func (sm *StateMachine) IsReadEnd() bool

IsReadEnd is read end.

func (*StateMachine) Read

func (sm *StateMachine) Read(input InputItf) error

type StateNode

type StateNode struct {
	Result ProductItf

	Datas map[string]interface{}
	// contains filtered or unexported fields
}

StateNode StateMachine's node.

func (*StateNode) ChangeStateNode

func (sn *StateNode) ChangeStateNode(nextNode *StateNode)

ChangeStateNode .

func (*StateNode) CleanReader

func (sn *StateNode) CleanReader()

CleanReader run clean for reader.

func (*StateNode) End

func (sn *StateNode) End() (isEnd bool, err error)

End .

func (*StateNode) GetProduct

func (sn *StateNode) GetProduct()

GetProduct get result.

func (*StateNode) Init

func (sn *StateNode) Init(sm *StateMachine, SNReader StateNodeReader) *StateNode

Init .

func (*StateNode) PreRead

func (sn *StateNode) PreRead(input InputItf) (isEnd bool, err error)

PreRead !!!Warning!!! should not deal the input in this function. only check if end.

func (*StateNode) Read

func (sn *StateNode) Read(input InputItf) (isEnd bool, err error)

func (*StateNode) SendProduct

func (sn *StateNode) SendProduct(result ProductItf)

SendProduct send product to StateMachine.

type StateNodeListReader

type StateNodeListReader struct {
	// contains filtered or unexported fields
}

StateNodeListReader .

func (*StateNodeListReader) Clean

func (s *StateNodeListReader) Clean()

Clean let the Reader like new. it will be call before first Read.

func (*StateNodeListReader) Current

func (s *StateNodeListReader) Current() StateNodeReader

Current get current StateNodeReader .

func (*StateNodeListReader) End

func (s *StateNodeListReader) End(stateNode *StateNode) (isEnd bool, err error)

func (*StateNodeListReader) GetProduct

func (s *StateNodeListReader) GetProduct() ProductItf

GetProduct return result.

func (*StateNodeListReader) Name

func (s *StateNodeListReader) Name() string

Name reader's name.

func (*StateNodeListReader) PreRead

func (s *StateNodeListReader) PreRead(stateNode *StateNode, input InputItf) (isEnd bool, err error)

PreRead only see if should stop read.

func (*StateNodeListReader) Ptr

func (s *StateNodeListReader) Ptr() int

Ptr get pointer num.

func (*StateNodeListReader) Read

func (s *StateNodeListReader) Read(stateNode *StateNode, input InputItf) (isEnd bool, err error)

Read real read. even isEnd == true the input be readed.

func (*StateNodeListReader) Size

func (s *StateNodeListReader) Size() int

Size get size.

type StateNodeReader

type StateNodeReader interface {
	//Name reader's name.
	Name() string
	//Clean let the Reader like new.  it will be call before first Read.
	Clean()
	//PreRead only see if should stop read.
	PreRead(stateNode *StateNode, input InputItf) (isEnd bool, err error)
	//Read real read. even isEnd == true the input be readed.
	Read(stateNode *StateNode, input InputItf) (isEnd bool, err error)
	//End when end read.
	End(stateNode *StateNode) (isEnd bool, err error)
	//GetProduct return result.
	GetProduct() ProductItf
}

StateNodeReader state node reader.

func NewStateNodeListReader

func NewStateNodeListReader(readers ...StateNodeReader) StateNodeReader

NewStateNodeListReader .

type StateNodeSelectReader

type StateNodeSelectReader struct {
	ReaderList []StateNodeReader
	LiveMap    map[StateNodeReader]bool
	Result     ProductItf
}

StateNodeSelectReader .

func NewStateNodeSelectReader

func NewStateNodeSelectReader(list ...StateNodeReader) *StateNodeSelectReader

NewStateNodeSelectReader .

func (*StateNodeSelectReader) Clean

func (s *StateNodeSelectReader) Clean()

Clean let the Reader like new. it will be call before first Read.

func (*StateNodeSelectReader) End

func (s *StateNodeSelectReader) End(stateNode *StateNode) (isEnd bool, err error)

End .

func (*StateNodeSelectReader) GetProduct

func (s *StateNodeSelectReader) GetProduct() ProductItf

GetProduct return result.

func (*StateNodeSelectReader) Name

func (s *StateNodeSelectReader) Name() string

Name reader's name.

func (*StateNodeSelectReader) PreRead

func (s *StateNodeSelectReader) PreRead(stateNode *StateNode, input InputItf) (isEnd bool, err error)

PreRead only see if should stop read.

func (*StateNodeSelectReader) Read

func (s *StateNodeSelectReader) Read(stateNode *StateNode, input InputItf) (isEnd bool, err error)

Read real read. even isEnd == true the input be readed.

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL