mirror of
https://github.com/duanhf2012/origin.git
synced 2026-02-21 12:14:45 +08:00
新增结点实现
This commit is contained in:
237
util/blueprint/mathnode.go
Normal file
237
util/blueprint/mathnode.go
Normal file
@@ -0,0 +1,237 @@
|
||||
package blueprint
|
||||
|
||||
import "fmt"
|
||||
|
||||
func init() {
|
||||
RegExecNode(&AddInt{})
|
||||
RegExecNode(&SubInt{})
|
||||
RegExecNode(&MulInt{})
|
||||
RegExecNode(&DivInt{})
|
||||
RegExecNode(&ModInt{})
|
||||
}
|
||||
|
||||
type AddInt struct {
|
||||
BaseExecNode
|
||||
}
|
||||
|
||||
func (em *AddInt) GetName() string {
|
||||
return "AddInt"
|
||||
}
|
||||
|
||||
func (em *AddInt) Exec() (int, error) {
|
||||
inPortA := em.GetInPort(0)
|
||||
if inPortA == nil {
|
||||
return -1, fmt.Errorf("AddInt inParam 1 not found")
|
||||
}
|
||||
|
||||
inPortB := em.GetInPort(1)
|
||||
if inPortB == nil {
|
||||
return -1, fmt.Errorf("AddInt inParam 2 not found")
|
||||
}
|
||||
|
||||
outPortRet := em.GetOutPort(0)
|
||||
if outPortRet == nil {
|
||||
return -1, fmt.Errorf("AddInt outParam not found")
|
||||
}
|
||||
|
||||
inA, ok := inPortA.GetInt()
|
||||
if !ok {
|
||||
return -1, fmt.Errorf("AddInt inParam 1 not found")
|
||||
}
|
||||
inB, ok := inPortB.GetInt()
|
||||
if !ok {
|
||||
return -1, fmt.Errorf("AddInt inParam 2 not found")
|
||||
}
|
||||
ret := inA + inB
|
||||
outPortRet.SetInt(ret)
|
||||
|
||||
return -1, nil
|
||||
}
|
||||
|
||||
type SubInt struct {
|
||||
BaseExecNode
|
||||
}
|
||||
|
||||
func (em *SubInt) GetName() string {
|
||||
return "SubInt"
|
||||
}
|
||||
|
||||
func (em *SubInt) Exec() (int, error) {
|
||||
inPortA := em.GetInPort(0)
|
||||
if inPortA == nil {
|
||||
return -1, fmt.Errorf("AddInt inParam 1 not found")
|
||||
}
|
||||
|
||||
inPortB := em.GetInPort(1)
|
||||
if inPortB == nil {
|
||||
return -1, fmt.Errorf("AddInt inParam 2 not found")
|
||||
}
|
||||
|
||||
inPortAbs := em.GetInPort(2)
|
||||
if inPortAbs == nil {
|
||||
return -1, fmt.Errorf("AddInt inParam 2 not found")
|
||||
}
|
||||
|
||||
outPortRet := em.GetOutPort(0)
|
||||
if outPortRet == nil {
|
||||
return -1, fmt.Errorf("AddInt outParam not found")
|
||||
}
|
||||
|
||||
inA, ok := inPortA.GetInt()
|
||||
if !ok {
|
||||
return -1, fmt.Errorf("AddInt inParam 1 not found")
|
||||
}
|
||||
inB, ok := inPortB.GetInt()
|
||||
if !ok {
|
||||
return -1, fmt.Errorf("AddInt inParam 2 not found")
|
||||
}
|
||||
isAbs, ok := inPortAbs.GetBool()
|
||||
if !ok {
|
||||
return -1, fmt.Errorf("AddInt inParam 2 not found")
|
||||
}
|
||||
ret := inA - inB
|
||||
if isAbs && ret < 0 {
|
||||
ret *= -1
|
||||
}
|
||||
|
||||
outPortRet.SetInt(ret)
|
||||
|
||||
return -1, nil
|
||||
}
|
||||
|
||||
type MulInt struct {
|
||||
BaseExecNode
|
||||
}
|
||||
|
||||
func (em *MulInt) GetName() string {
|
||||
return "MulInt"
|
||||
}
|
||||
|
||||
func (em *MulInt) Exec() (int, error) {
|
||||
inPortA := em.GetInPort(0)
|
||||
if inPortA == nil {
|
||||
return -1, fmt.Errorf("AddInt inParam 1 not found")
|
||||
}
|
||||
|
||||
inPortB := em.GetInPort(1)
|
||||
if inPortB == nil {
|
||||
return -1, fmt.Errorf("AddInt inParam 2 not found")
|
||||
}
|
||||
|
||||
outPortRet := em.GetOutPort(0)
|
||||
if outPortRet == nil {
|
||||
return -1, fmt.Errorf("AddInt outParam not found")
|
||||
}
|
||||
|
||||
inA, ok := inPortA.GetInt()
|
||||
if !ok {
|
||||
return -1, fmt.Errorf("AddInt inParam 1 not found")
|
||||
}
|
||||
inB, ok := inPortB.GetInt()
|
||||
if !ok {
|
||||
return -1, fmt.Errorf("AddInt inParam 2 not found")
|
||||
}
|
||||
|
||||
outPortRet.SetInt(inA * inB)
|
||||
|
||||
return -1, nil
|
||||
}
|
||||
|
||||
type DivInt struct {
|
||||
BaseExecNode
|
||||
}
|
||||
|
||||
func (em *DivInt) GetName() string {
|
||||
return "DivInt"
|
||||
}
|
||||
|
||||
func (em *DivInt) Exec() (int, error) {
|
||||
inPortA := em.GetInPort(0)
|
||||
if inPortA == nil {
|
||||
return -1, fmt.Errorf("AddInt inParam 1 not found")
|
||||
}
|
||||
|
||||
inPortB := em.GetInPort(1)
|
||||
if inPortB == nil {
|
||||
return -1, fmt.Errorf("AddInt inParam 2 not found")
|
||||
}
|
||||
|
||||
inPortRound := em.GetInPort(2)
|
||||
if inPortRound == nil {
|
||||
return -1, fmt.Errorf("AddInt inParam 2 not found")
|
||||
}
|
||||
|
||||
outPortRet := em.GetOutPort(0)
|
||||
if outPortRet == nil {
|
||||
return -1, fmt.Errorf("AddInt outParam not found")
|
||||
}
|
||||
|
||||
inA, ok := inPortA.GetInt()
|
||||
if !ok {
|
||||
return -1, fmt.Errorf("AddInt inParam 1 not found")
|
||||
}
|
||||
inB, ok := inPortB.GetInt()
|
||||
if !ok {
|
||||
return -1, fmt.Errorf("AddInt inParam 2 not found")
|
||||
}
|
||||
isRound, ok := inPortRound.GetBool()
|
||||
if !ok {
|
||||
return -1, fmt.Errorf("AddInt inParam 2 not found")
|
||||
}
|
||||
|
||||
if inB == 0 {
|
||||
return -1, fmt.Errorf("div zero error")
|
||||
}
|
||||
|
||||
var ret int64
|
||||
if isRound {
|
||||
ret = (inA + inB/2) / inB
|
||||
} else {
|
||||
ret = inA / inB
|
||||
}
|
||||
|
||||
outPortRet.SetInt(ret)
|
||||
|
||||
return -1, nil
|
||||
}
|
||||
|
||||
type ModInt struct {
|
||||
BaseExecNode
|
||||
}
|
||||
|
||||
func (em *ModInt) GetName() string {
|
||||
return "ModInt"
|
||||
}
|
||||
|
||||
func (em *ModInt) Exec() (int, error) {
|
||||
inPortA := em.GetInPort(0)
|
||||
if inPortA == nil {
|
||||
return -1, fmt.Errorf("AddInt inParam 1 not found")
|
||||
}
|
||||
|
||||
inPortB := em.GetInPort(1)
|
||||
if inPortB == nil {
|
||||
return -1, fmt.Errorf("AddInt inParam 2 not found")
|
||||
}
|
||||
|
||||
outPortRet := em.GetOutPort(0)
|
||||
if outPortRet == nil {
|
||||
return -1, fmt.Errorf("AddInt outParam not found")
|
||||
}
|
||||
|
||||
inA, ok := inPortA.GetInt()
|
||||
if !ok {
|
||||
return -1, fmt.Errorf("AddInt inParam 1 not found")
|
||||
}
|
||||
inB, ok := inPortB.GetInt()
|
||||
if !ok {
|
||||
return -1, fmt.Errorf("AddInt inParam 2 not found")
|
||||
}
|
||||
if inB == 0 {
|
||||
return -1, fmt.Errorf("mod zero error")
|
||||
}
|
||||
|
||||
outPortRet.SetInt(inA % inB)
|
||||
|
||||
return -1, nil
|
||||
}
|
||||
Reference in New Issue
Block a user