Răsfoiți Sursa

добавил SWITCH элемент

kpmy 10 ani în urmă
părinte
comite
53e939b14e
2 a modificat fișierele cu 46 adăugiri și 0 ștergeri
  1. 45 0
      ncl/std/bn.go
  2. 1 0
      ncl/tool/x.go

+ 45 - 0
ncl/std/bn.go

@@ -6,6 +6,51 @@ import (
 	"ypk/halt"
 )
 
+type sw struct {
+	I ncl.In
+	O ncl.Out
+	A ncl.In
+}
+
+func (e *sw) Pin(c ncl.PinCode) ncl.Pin {
+	switch c {
+	case ncl.A:
+		return e.A
+	case ncl.I:
+		return e.I
+	case ncl.O:
+		return e.O
+	default:
+		halt.As(100)
+	}
+	panic(0)
+}
+
+func (e *sw) init() {
+	e.A = NewIn(e)
+	e.I = NewIn(e)
+	e.O = NewOut(e)
+}
+
+func (e *sw) Do() {
+	_a := e.A.Select()
+	var val *tri.Trit
+	if _a != nil {
+		a := *_a
+		if a == tri.TRUE {
+			val = e.I.Select()
+		}
+	}
+	e.O.Update(val)
+
+}
+
+func Sw() ncl.Element {
+	e := &sw{}
+	e.init()
+	return e
+}
+
 type mux struct {
 	T, N, F ncl.In
 	A       ncl.In

+ 1 - 0
ncl/tool/x.go

@@ -53,6 +53,7 @@ func init() {
 	imps["CL"] = Simple(std.CycleLeft)
 	imps["CR"] = Simple(std.CycleRight)
 	imps["T"] = Simple(std.Trigger)
+	imps["SW"] = Simple(std.Sw)
 }
 
 func Register(name string, i Import) {