mirror of
https://github.com/duanhf2012/origin.git
synced 2026-02-03 22:45:13 +08:00
新增结点
This commit is contained in:
@@ -1,6 +1,9 @@
|
|||||||
package blueprint
|
package blueprint
|
||||||
|
|
||||||
import "fmt"
|
import (
|
||||||
|
"fmt"
|
||||||
|
"math/rand"
|
||||||
|
)
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
RegExecNode(&AddInt{})
|
RegExecNode(&AddInt{})
|
||||||
@@ -235,3 +238,60 @@ func (em *ModInt) Exec() (int, error) {
|
|||||||
|
|
||||||
return -1, nil
|
return -1, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type RandNumber struct {
|
||||||
|
BaseExecNode
|
||||||
|
}
|
||||||
|
|
||||||
|
func (em *RandNumber) GetName() string {
|
||||||
|
return "RandNumber"
|
||||||
|
}
|
||||||
|
|
||||||
|
func (em *RandNumber) Exec() (int, error) {
|
||||||
|
inPortSeed := em.GetInPort(0)
|
||||||
|
if inPortSeed == nil {
|
||||||
|
return -1, fmt.Errorf("AddInt inParam 1 not found")
|
||||||
|
}
|
||||||
|
|
||||||
|
inPortMin := em.GetInPort(1)
|
||||||
|
if inPortMin == nil {
|
||||||
|
return -1, fmt.Errorf("AddInt inParam 2 not found")
|
||||||
|
}
|
||||||
|
|
||||||
|
inPortMax := em.GetInPort(2)
|
||||||
|
if inPortMax == 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")
|
||||||
|
}
|
||||||
|
|
||||||
|
inSeed, ok := inPortSeed.GetInt()
|
||||||
|
if !ok {
|
||||||
|
return -1, fmt.Errorf("AddInt inParam 1 not found")
|
||||||
|
}
|
||||||
|
inMin, ok := inPortMin.GetInt()
|
||||||
|
if !ok {
|
||||||
|
return -1, fmt.Errorf("AddInt inParam 2 not found")
|
||||||
|
}
|
||||||
|
inMax, ok := inPortMax.GetInt()
|
||||||
|
if !ok {
|
||||||
|
return -1, fmt.Errorf("AddInt inParam 2 not found")
|
||||||
|
}
|
||||||
|
|
||||||
|
var ret int64
|
||||||
|
if inSeed > 0 {
|
||||||
|
r := rand.New(rand.NewSource(inSeed))
|
||||||
|
if r == nil {
|
||||||
|
return -1, fmt.Errorf("RandNumber fail")
|
||||||
|
}
|
||||||
|
ret = int64(r.Intn(int(inMax-inMin+1))) + inMin
|
||||||
|
} else {
|
||||||
|
ret = int64(rand.Intn(int(inMax-inMin+1))) + inMin
|
||||||
|
}
|
||||||
|
|
||||||
|
outPortRet.SetInt(ret)
|
||||||
|
return -1, nil
|
||||||
|
}
|
||||||
|
|||||||
@@ -48,6 +48,24 @@ func (en *execNode) GetInPortDefaultValue(index int) any {
|
|||||||
return v
|
return v
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (en *execNode) GetInPortDefaultIntArrayValue(index int) []int64 {
|
||||||
|
val := en.GetInPortDefaultValue(index)
|
||||||
|
if val == nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
return val.([]int64)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (en *execNode) GetInPortDefaultStringArrayValue(index int) []string {
|
||||||
|
val := en.GetInPortDefaultValue(index)
|
||||||
|
if val == nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
return val.([]string)
|
||||||
|
}
|
||||||
|
|
||||||
func (en *execNode) Next() *execNode {
|
func (en *execNode) Next() *execNode {
|
||||||
if en.nextIdx >= len(en.nextNode) {
|
if en.nextIdx >= len(en.nextNode) {
|
||||||
return nil
|
return nil
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ package blueprint
|
|||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"github.com/duanhf2012/origin/v2/log"
|
"github.com/duanhf2012/origin/v2/log"
|
||||||
|
"math/rand/v2"
|
||||||
)
|
)
|
||||||
|
|
||||||
// 系统入口ID定义,1000以内
|
// 系统入口ID定义,1000以内
|
||||||
@@ -173,16 +174,16 @@ func (em *GetArrayString) GetName() string {
|
|||||||
func (em *GetArrayString) Exec() (int, error) {
|
func (em *GetArrayString) Exec() (int, error) {
|
||||||
inPort := em.GetInPort(0)
|
inPort := em.GetInPort(0)
|
||||||
if inPort == nil {
|
if inPort == nil {
|
||||||
return -1, fmt.Errorf("GetArrayInt inParam not found")
|
return -1, fmt.Errorf("GetArrayInt inParam 0 not found")
|
||||||
}
|
}
|
||||||
outPort := em.GetOutPort(0)
|
outPort := em.GetOutPort(0)
|
||||||
if outPort == nil {
|
if outPort == nil {
|
||||||
return -1, fmt.Errorf("GetArrayInt outParam not found")
|
return -1, fmt.Errorf("GetArrayInt outParam 0 not found")
|
||||||
}
|
}
|
||||||
|
|
||||||
arrIndexPort := em.GetInPort(1)
|
arrIndexPort := em.GetInPort(1)
|
||||||
if arrIndexPort == nil {
|
if arrIndexPort == nil {
|
||||||
return -1, fmt.Errorf("GetArrayInt arrIndexParam not found")
|
return -1, fmt.Errorf("GetArrayInt arrIndexParam 1 not found")
|
||||||
}
|
}
|
||||||
arrIndex, ok := arrIndexPort.GetInt()
|
arrIndex, ok := arrIndexPort.GetInt()
|
||||||
if !ok {
|
if !ok {
|
||||||
@@ -214,13 +215,235 @@ func (em *GetArrayLen) GetName() string {
|
|||||||
func (em *GetArrayLen) Exec() (int, error) {
|
func (em *GetArrayLen) Exec() (int, error) {
|
||||||
inPort := em.GetInPort(0)
|
inPort := em.GetInPort(0)
|
||||||
if inPort == nil {
|
if inPort == nil {
|
||||||
return -1, fmt.Errorf("GetArrayInt inParam not found")
|
return -1, fmt.Errorf("GetArrayInt inParam 0 not found")
|
||||||
}
|
}
|
||||||
outPort := em.GetOutPort(0)
|
outPort := em.GetOutPort(0)
|
||||||
if outPort == nil {
|
if outPort == nil {
|
||||||
return -1, fmt.Errorf("GetArrayInt outParam not found")
|
return -1, fmt.Errorf("GetArrayInt outParam 0 not found")
|
||||||
}
|
}
|
||||||
|
|
||||||
outPort.SetInt(inPort.GetArrayLen())
|
outPort.SetInt(inPort.GetArrayLen())
|
||||||
return -1, nil
|
return -1, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type BoolIf struct {
|
||||||
|
BaseExecNode
|
||||||
|
}
|
||||||
|
|
||||||
|
func (em *BoolIf) GetName() string {
|
||||||
|
return "BoolIf"
|
||||||
|
}
|
||||||
|
|
||||||
|
func (em *BoolIf) Exec() (int, error) {
|
||||||
|
inPort := em.GetInPort(1)
|
||||||
|
if inPort == nil {
|
||||||
|
return -1, fmt.Errorf("GetArrayInt inParam 1 not found")
|
||||||
|
}
|
||||||
|
|
||||||
|
ret, ok := inPort.GetBool()
|
||||||
|
if !ok {
|
||||||
|
return -1, fmt.Errorf("BoolIf inParam error")
|
||||||
|
}
|
||||||
|
|
||||||
|
if ret {
|
||||||
|
return 1, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
type GreaterThanInteger struct {
|
||||||
|
BaseExecNode
|
||||||
|
}
|
||||||
|
|
||||||
|
func (em *GreaterThanInteger) GetName() string {
|
||||||
|
return "GreaterThanInteger"
|
||||||
|
}
|
||||||
|
|
||||||
|
func (em *GreaterThanInteger) Exec() (int, error) {
|
||||||
|
inPortEqual := em.GetInPort(1)
|
||||||
|
if inPortEqual == nil {
|
||||||
|
return -1, fmt.Errorf("GreaterThanInteger inParam 1 not found")
|
||||||
|
}
|
||||||
|
|
||||||
|
inPortA := em.GetInPort(2)
|
||||||
|
if inPortA == nil {
|
||||||
|
return -1, fmt.Errorf("GreaterThanInteger inParam 1 not found")
|
||||||
|
}
|
||||||
|
|
||||||
|
inPorB := em.GetInPort(3)
|
||||||
|
if inPorB == nil {
|
||||||
|
return -1, fmt.Errorf("GreaterThanInteger inParam 1 not found")
|
||||||
|
}
|
||||||
|
|
||||||
|
ret, ok := inPortEqual.GetBool()
|
||||||
|
if !ok {
|
||||||
|
return -1, fmt.Errorf("GreaterThanInteger inParam 1 error")
|
||||||
|
}
|
||||||
|
|
||||||
|
inA, ok := inPortA.GetInt()
|
||||||
|
if !ok {
|
||||||
|
return -1, fmt.Errorf("GreaterThanInteger inParam 2 error")
|
||||||
|
}
|
||||||
|
inB, ok := inPorB.GetInt()
|
||||||
|
if !ok {
|
||||||
|
return -1, fmt.Errorf("GreaterThanInteger inParam 3 error")
|
||||||
|
}
|
||||||
|
if ret {
|
||||||
|
if inA >= inB {
|
||||||
|
return 1, nil
|
||||||
|
}
|
||||||
|
return 0, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
if inA > inB {
|
||||||
|
return 1, nil
|
||||||
|
}
|
||||||
|
return 0, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
type LessThanInteger struct {
|
||||||
|
BaseExecNode
|
||||||
|
}
|
||||||
|
|
||||||
|
func (em *LessThanInteger) GetName() string {
|
||||||
|
return "LessThanInteger"
|
||||||
|
}
|
||||||
|
|
||||||
|
func (em *LessThanInteger) Exec() (int, error) {
|
||||||
|
inPortEqual := em.GetInPort(1)
|
||||||
|
if inPortEqual == nil {
|
||||||
|
return -1, fmt.Errorf("GreaterThanInteger inParam 1 not found")
|
||||||
|
}
|
||||||
|
|
||||||
|
inPortA := em.GetInPort(2)
|
||||||
|
if inPortA == nil {
|
||||||
|
return -1, fmt.Errorf("GreaterThanInteger inParam 1 not found")
|
||||||
|
}
|
||||||
|
|
||||||
|
inPorB := em.GetInPort(3)
|
||||||
|
if inPorB == nil {
|
||||||
|
return -1, fmt.Errorf("GreaterThanInteger inParam 1 not found")
|
||||||
|
}
|
||||||
|
|
||||||
|
ret, ok := inPortEqual.GetBool()
|
||||||
|
if !ok {
|
||||||
|
return -1, fmt.Errorf("GreaterThanInteger inParam 1 error")
|
||||||
|
}
|
||||||
|
|
||||||
|
inA, ok := inPortA.GetInt()
|
||||||
|
if !ok {
|
||||||
|
return -1, fmt.Errorf("GreaterThanInteger inParam 2 error")
|
||||||
|
}
|
||||||
|
inB, ok := inPorB.GetInt()
|
||||||
|
if !ok {
|
||||||
|
return -1, fmt.Errorf("GreaterThanInteger inParam 3 error")
|
||||||
|
}
|
||||||
|
if ret {
|
||||||
|
if inA <= inB {
|
||||||
|
return 1, nil
|
||||||
|
}
|
||||||
|
return 0, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
if inA < inB {
|
||||||
|
return 1, nil
|
||||||
|
}
|
||||||
|
return 0, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
type EqualInteger struct {
|
||||||
|
BaseExecNode
|
||||||
|
}
|
||||||
|
|
||||||
|
func (em *EqualInteger) GetName() string {
|
||||||
|
return "EqualInteger"
|
||||||
|
}
|
||||||
|
|
||||||
|
func (em *EqualInteger) Exec() (int, error) {
|
||||||
|
|
||||||
|
inPortA := em.GetInPort(1)
|
||||||
|
if inPortA == nil {
|
||||||
|
return -1, fmt.Errorf("GreaterThanInteger inParam 1 not found")
|
||||||
|
}
|
||||||
|
|
||||||
|
inPorB := em.GetInPort(2)
|
||||||
|
if inPorB == nil {
|
||||||
|
return -1, fmt.Errorf("GreaterThanInteger inParam 1 not found")
|
||||||
|
}
|
||||||
|
|
||||||
|
inA, ok := inPortA.GetInt()
|
||||||
|
if !ok {
|
||||||
|
return -1, fmt.Errorf("GreaterThanInteger inParam 2 error")
|
||||||
|
}
|
||||||
|
inB, ok := inPorB.GetInt()
|
||||||
|
if !ok {
|
||||||
|
return -1, fmt.Errorf("GreaterThanInteger inParam 3 error")
|
||||||
|
}
|
||||||
|
|
||||||
|
if inA == inB {
|
||||||
|
return 1, nil
|
||||||
|
}
|
||||||
|
return 0, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
type RangeCompare struct {
|
||||||
|
BaseExecNode
|
||||||
|
}
|
||||||
|
|
||||||
|
func (em *RangeCompare) GetName() string {
|
||||||
|
return "RangeCompare"
|
||||||
|
}
|
||||||
|
|
||||||
|
func (em *RangeCompare) Exec() (int, error) {
|
||||||
|
|
||||||
|
inPortA := em.GetInPort(1)
|
||||||
|
if inPortA == nil {
|
||||||
|
return -1, fmt.Errorf("GreaterThanInteger inParam 1 not found")
|
||||||
|
}
|
||||||
|
|
||||||
|
ret, ok := inPortA.GetInt()
|
||||||
|
if !ok {
|
||||||
|
return -1, fmt.Errorf("GreaterThanInteger inParam 1 error")
|
||||||
|
}
|
||||||
|
|
||||||
|
intArray := em.execNode.GetInPortDefaultIntArrayValue(2)
|
||||||
|
if intArray == nil {
|
||||||
|
return 0, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
for i := range intArray {
|
||||||
|
if intArray[i] <= ret {
|
||||||
|
return i + 2, nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
type Probability struct {
|
||||||
|
BaseExecNode
|
||||||
|
}
|
||||||
|
|
||||||
|
func (em *Probability) GetName() string {
|
||||||
|
return "Probability"
|
||||||
|
}
|
||||||
|
|
||||||
|
func (em *Probability) Exec() (int, error) {
|
||||||
|
|
||||||
|
inPortProbability := em.GetInPort(1)
|
||||||
|
if inPortProbability == nil {
|
||||||
|
return -1, fmt.Errorf("GreaterThanInteger inParam 1 not found")
|
||||||
|
}
|
||||||
|
|
||||||
|
inProbability, ok := inPortProbability.GetInt()
|
||||||
|
if !ok {
|
||||||
|
return -1, fmt.Errorf("GreaterThanInteger inParam 1 error")
|
||||||
|
}
|
||||||
|
|
||||||
|
if inProbability > rand.Int64N(10000) {
|
||||||
|
return 1, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0, nil
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user