public void AddGate(Gates.AbstractGate gate, GateLocation pos) { // maybe we could use extension methods // to add a method to create a UIGate for each AbstractGate? Gate uigate; if (gate is Gates.BasicGates.And) { uigate = new UIGates.And((Gates.BasicGates.And)gate); } else if (gate is Gates.BasicGates.Not) { uigate = new UIGates.Not((Gates.BasicGates.Not)gate); } else if (gate is Gates.BasicGates.Or) { uigate = new UIGates.Or((Gates.BasicGates.Or)gate); } else if (gate is Gates.BasicGates.Nand) { uigate = new UIGates.Nand((Gates.BasicGates.Nand)gate); } else if (gate is Gates.BasicGates.Nor) { uigate = new UIGates.Nor((Gates.BasicGates.Nor)gate); } else if (gate is Gates.BasicGates.Xor) { uigate = new UIGates.Xor((Gates.BasicGates.Xor)gate); } else if (gate is Gates.BasicGates.Xnor) { uigate = new UIGates.Xnor((Gates.BasicGates.Xnor)gate); } else if (gate is Gates.BasicGates.Buffer) { uigate = new UIGates.Buffer((Gates.BasicGates.Buffer)gate); } else if (gate is Gates.IOGates.UserInput) { uigate = new UIGates.UserInput((Gates.IOGates.UserInput)gate); } else if (gate is Gates.IOGates.UserOutput) { uigate = new UIGates.UserOutput((Gates.IOGates.UserOutput)gate); } else if (gate is Gates.IOGates.AbstractNumeric) { uigate = new UIGates.Numeric((Gates.IOGates.AbstractNumeric)gate); } else if (gate is Gates.IOGates.Clock) { uigate = new UIGates.Clock((Gates.IOGates.Clock)gate); } else if (gate is Gates.IOGates.Comment) { uigate = new UIGates.Comment((Gates.IOGates.Comment)gate); } else if (gate is Gates.IC) { uigate = UIGates.IC.CreateFromTemplate((Gates.IC)gate, icl.GetIC(gate.Name)); } else throw new ArgumentException("gate not of known subclass"); AddGate(uigate, pos); }
public override Gate CreateUserInstance() { Gates.IOGates.Comment cmt = _gate as Gates.IOGates.Comment; Comment c = new Comment(); ((Gates.IOGates.Comment)c.AbGate).Value = cmt.Value; return c; }