protected ImmutableBorrowNode() { var immutableReferenceType = NITypes.Void.CreateImmutableReference(); FixedTerminals.Add(new NodeTerminal(Direction.Input, immutableReferenceType, "value in")); FixedTerminals.Add(new NodeTerminal(Direction.Output, immutableReferenceType, "reference out")); }
protected override void SetIconViewGeometry() { Bounds = new SMRect(Left, Top, StockDiagramGeometries.GridSize * 4, StockDiagramGeometries.GridSize * 4); var terminals = FixedTerminals.OfType <NodeTerminal>().ToArray(); terminals[0].Hotspot = new SMPoint(0, StockDiagramGeometries.GridSize * 1); }
protected FunctionalNode(NIType signature) { Signature = signature; foreach (NodeTerminal terminal in CreateNodeTerminalsFromSignature(signature)) { FixedTerminals.Add(terminal); } Width = StockDiagramGeometries.GridSize * 4; }
protected TerminateLifetime() { var immutableReferenceType = NITypes.Void.CreateImmutableReference(); var inputTerminal = new NodeTerminal(Direction.Input, immutableReferenceType, "inner lifetime 0"); FixedTerminals.Add(inputTerminal); var outputTerminal = new NodeTerminal(Direction.Output, immutableReferenceType, "outer lifetime"); FixedTerminals.Add(outputTerminal); }
private void SetListViewGeometry() { var terminals = FixedTerminals.OfType <NodeTerminal>().ToArray(); terminals[0].Hotspot = TerminalHotspots.CreateOutputTerminalHotspot(TerminalSize.Small, Width, 0u); uint index = 0u; foreach (Terminal terminal in terminals.Skip(1)) { terminal.Hotspot = TerminalHotspots.CreateListViewInputTerminalHotspot(ListViewHeaderHeight, index); ++index; } Height = ListViewHeaderHeight + index * StockDiagramGeometries.LargeTerminalHeight + ListViewFooterHeight; }
private void SetIconViewGeometry() { int inputTerminalCount = FixedTerminals.Count - 1, height = StockDiagramGeometries.GridSize * 2 * Math.Max(2, inputTerminalCount); Bounds = new SMRect(Left, Top, StockDiagramGeometries.GridSize * 4, height); var terminals = FixedTerminals.OfType <NodeTerminal>().ToArray(); terminals[0].Hotspot = new SMPoint(StockDiagramGeometries.GridSize * 4, StockDiagramGeometries.GridSize * 1); int index = 0; foreach (Terminal terminal in FixedTerminals.Skip(1)) { terminal.Hotspot = new SMPoint(0, StockDiagramGeometries.GridSize * (2 * index + 1)); ++index; } }
private void UpdateTerminalsFromDataType(NIType type) { bool isStruct = type.IsValueClass(); bool isUnion = type.IsUnion(); if (isStruct || isUnion) { NIType[] fields = type.GetFields().ToArray(); int inputTerminalCount = isStruct ? fields.Length : 1; if (!InputTerminals.HasExactly(inputTerminalCount)) { while (inputTerminalCount < InputTerminals.Count()) { FixedTerminals.Remove(FixedTerminals.Last()); } while (inputTerminalCount > InputTerminals.Count()) { int index = InputTerminals.Count(); FixedTerminals.Add(new ConstructorTerminal(NITypes.Void, $"element{index}")); } if (isStruct) { foreach (var pair in FixedTerminals.Skip(1).Cast <ConstructorTerminal>().Zip(fields)) { pair.Key.FieldName = pair.Value.GetName(); } } else { // TODO: attempt to recover the same variant element index ((ConstructorTerminal)FixedTerminals[1]).FieldName = fields[0].GetName(); } } SetGeometry(); } }
protected DropNode() { FixedTerminals.Add(new NodeTerminal(Direction.Input, PFTypes.Void, "value")); }
/// <inheritdoc /> protected override void SetIconViewGeometry() { SetIconNodeGeometry(this, FixedTerminals.Cast <NodeTerminal>()); }
protected TypePassthrough() { FixedTerminals.Add(new NodeTerminal(Direction.Input, NITypes.Void, "ref in")); FixedTerminals.Add(new NodeTerminal(Direction.Output, NITypes.Void, "ref out")); }
private PrimitiveType() { FixedTerminals.Add(new NodeTerminal(Direction.Output, NITypes.Void, "type")); }