internal static void VerifyNodeIsNotNull(IDirectedConnectedNode <T> node) { if (node == null) { throw new ArgumentNullException("node", "Operation is not valid on a null node."); } }
internal override void GetValuesForNewNode(out Double input, out IDirectedConnectedNode <Double> output) { input = 5.0; output = new ArrayDCN <Double> { Value = 5.0 }; }
internal override void GetValuesForNewNode(out DateTime input, out IDirectedConnectedNode <DateTime> output) { input = DateTime.Today.AddHours(5); output = new ArrayDCN <DateTime> { Value = DateTime.Today.AddHours(5) }; }
internal static void VerifyNodeIsInSomeCollection(IDirectedConnectedNode <T> node) { if (NodeIsNotInAnyCollection(node)) { throw new InvalidOperationException("Operation is not valid when node is not in a collection."); } }
internal static void VerifyNodesAreNotTheSameNode(IDirectedConnectedNode <T> firstNode, IDirectedConnectedNode <T> secondNode) { if (firstNode == secondNode) { throw new InvalidOperationException("Self Connections are not permitted."); } }
internal static void VerifyNodeIsInCollection(IDirectedConnectedNode <T> node, IDirectedConnectedNodeCollection <T> collection) { if (NodeIsNotInCollection(node, collection)) { throw new InvalidOperationException("Operation is not valid on a node in a different Collection."); } }
internal static void VerifyNodeIsNotInAnyCollection(IDirectedConnectedNode <T> node) { if (!NodeIsNotInAnyCollection(node)) { throw new InvalidOperationException("Node already has a parent Collection"); } }
internal static void VerifyNodesAreInSameCollection(IDirectedConnectedNode <T> firstNode, IDirectedConnectedNode <T> secondNode) { if (NodesAreNotInSameCollection(firstNode, secondNode)) { throw new InvalidOperationException("Operation is not valid on a node in a different Collection."); } }
internal override void GetValuesForNewNode(out string input, out IDirectedConnectedNode <string> output) { input = "5"; output = new ArrayDCN <string> { Value = "5" }; }
internal override void GetValuesForNewNode(out int input, out IDirectedConnectedNode <int> output) { input = 5; output = new ArrayDCN <int> { Value = 5 }; }
internal static void Verify_AddConnectionWith_ConditionsAreSatisfied(IDirectedConnectedNode <T> firstNode, IDirectedConnectedNode <T> secondNode) { VerifyNodeIsNotNull(firstNode); VerifyNodeIsInSomeCollection(firstNode); VerifyNodesAreInSameCollection(firstNode, secondNode); VerifyNodesAreNotTheSameNode(firstNode, secondNode); }
bool IDirectedConnectedNode <T> .IsConnectedWith(IDirectedConnectedNode <T> secondNode, ConnectionDirection direction) { if (Helpers <T> .Check_IsConnectedWith_PreConditions(secondNode, this)) { return(false); } var typedNode = TypedHelpers.GetNodeAsValidType <PointerDCN <T>, T>(secondNode); switch (direction) { case ConnectionDirection.To: return(connectedToNodesList.Contains(typedNode)); case ConnectionDirection.From: return(connectedFromNodesList.Contains(typedNode)); case ConnectionDirection.Both: return(connectedToNodesList.Contains(typedNode) && connectedFromNodesList.Contains(typedNode)); case ConnectionDirection.Any: return(connectedToNodesList.Contains(typedNode) || connectedFromNodesList.Contains(typedNode)); default: throw new NonExistentEnumCaseException <ConnectionDirection>(); //ncrunch: no coverage } }
internal static bool Check_IsConnectedWith_PreConditions(IDirectedConnectedNode <T> firstNode, IDirectedConnectedNode <T> secondNode) { return(firstNode == null || secondNode == null || NodeIsNotInAnyCollection(firstNode) || NodeIsNotInAnyCollection(secondNode) || NodesAreNotInSameCollection(firstNode, secondNode)); }
bool IDirectedConnectedNode <T> .IsConnectedWith(IDirectedConnectedNode <T> secondNode, ConnectionDirection direction) { if (Helpers <T> .Check_IsConnectedWith_PreConditions(secondNode, this)) { return(false); } return(ParentCollection.NodesHaveConnection(this, secondNode, direction)); }
bool IDirectedConnectedNodeCollection <T> .NodesHaveConnection(IDirectedConnectedNode <T> firstNode, IDirectedConnectedNode <T> secondNode, ConnectionDirection direction) { if (Helpers <T> .CheckNodesHaveConnectionConditions(firstNode, secondNode, this)) { return(false); } return(firstNode.IsConnectedWith(secondNode, direction)); }
internal override void GetValuesForNewNode(out CustomComplexObject input, out IDirectedConnectedNode <CustomComplexObject> output) { input = new CustomComplexObject(5, "5"); var outputStructure = new CustomComplexObject(5, "5"); output = new ArrayDCN <CustomComplexObject> { Value = outputStructure }; }
void IDirectedConnectedNodeCollection <T> .ConnectNodes(IDirectedConnectedNode <T> firstNode, IDirectedConnectedNode <T> secondNode, ConnectionDirection direction) { Helpers <T> .Verify_ConnectNodes_ConditionsAreSatisfied(firstNode, secondNode, this); var typedFirstNode = TypedHelpers.GetNodeAsValidType <ArrayDCN <T>, T>(firstNode); var typedSecondNode = TypedHelpers.GetNodeAsValidType <ArrayDCN <T>, T>(secondNode); this.InternalSetNodeConnectRequest(GetNodeIndex(typedFirstNode), GetNodeIndex(typedSecondNode), direction, true); }
void IDirectedConnectedNodeCollection <T> .AddNode(IDirectedConnectedNode <T> newNode) { Helpers <T> .Verify_AddNode_ConditionsAreSatisfied(newNode); var typedNode = TypedHelpers.GetNodeAsValidType <PointerDCN <T>, T>(newNode); this.InternalAddNodeRequest(typedNode); typedNode.InternalSetParentCollectionRequest(this); }
internal static void Verify_ConnectNodes_ConditionsAreSatisfied(IDirectedConnectedNode <T> firstNode, IDirectedConnectedNode <T> secondNode, IDirectedConnectedNodeCollection <T> collection) { VerifyNodeIsNotNull(firstNode); VerifyNodeIsNotNull(secondNode); VerifyNodeIsInCollection(firstNode, collection); VerifyNodeIsInCollection(secondNode, collection); VerifyNodesAreNotTheSameNode(firstNode, secondNode); }
void IDirectedConnectedNodeCollection <T> .ConnectNodes(IDirectedConnectedNode <T> firstNode, IDirectedConnectedNode <T> secondNode, ConnectionDirection direction) { Helpers <T> .Verify_ConnectNodes_ConditionsAreSatisfied(firstNode, secondNode, this); var typedFirstNode = TypedHelpers.GetNodeAsValidType <PointerDCN <T>, T>(firstNode); var typedSecondNode = TypedHelpers.GetNodeAsValidType <PointerDCN <T>, T>(secondNode); typedFirstNode.InternalAddNodeConnectionRequest(typedSecondNode, direction); typedSecondNode.InternalAddNodeConnectionRequest(typedFirstNode, direction.Invert()); }
internal static void VerifyAtLeastOneNodeIsInCollection( IDirectedConnectedNode <T> firstNode, IDirectedConnectedNode <T> secondNode, IDirectedConnectedNodeCollection <T> collection) { if (NodeIsNotInCollection(firstNode, collection) && NodeIsNotInCollection(secondNode, collection)) { throw new InvalidOperationException("Cannot report on connection between two nodes not in collection."); } }
bool IDirectedConnectedNodeCollection <T> .NodesHaveConnection(IDirectedConnectedNode <T> firstNode, IDirectedConnectedNode <T> secondNode, ConnectionDirection direction) { if (Helpers <T> .CheckNodesHaveConnectionConditions(firstNode, secondNode, this)) { return(false); } var typedFirstNode = TypedHelpers.GetNodeAsValidType <ArrayDCN <T>, T>(firstNode); var typedSecondNode = TypedHelpers.GetNodeAsValidType <ArrayDCN <T>, T>(secondNode); return(this.InternalCheckNodeConnectRequest(GetNodeIndex(typedFirstNode), GetNodeIndex(typedSecondNode), direction)); }
void IDirectedConnectedNodeCollection <T> .DisconnectNodes(IDirectedConnectedNode <T> firstNode, IDirectedConnectedNode <T> secondNode, ConnectionDirection direction) { if (Helpers <T> .CheckDisconnectNodesConditions(firstNode, secondNode, this)) { return; } var typedFirstNode = TypedHelpers.GetNodeAsValidType <ArrayDCN <T>, T>(firstNode); var typedSecondNode = TypedHelpers.GetNodeAsValidType <ArrayDCN <T>, T>(secondNode); this.InternalSetNodeConnectRequest(GetNodeIndex(typedFirstNode), GetNodeIndex(typedSecondNode), direction, false); }
public void InputOfWrongTypeThrows() { var arrayNode = IDCNCFactory.NewArrayCollection <int>().NewNode(); IDirectedConnectedNode <int> deTypedArrayNode = arrayNode; Assert.Throws <InvalidCastException>(() => TypedHelpers.GetNodeAsValidType <PointerDCN <int>, int>(deTypedArrayNode)); var pointerNode = IDCNCFactory.NewPointerCollection <int>().NewNode(); IDirectedConnectedNode <int> deTypedPointerNode = pointerNode; Assert.Throws <InvalidCastException>(() => TypedHelpers.GetNodeAsValidType <ArrayDCN <int>, int>(deTypedPointerNode)); }
void IDirectedConnectedNodeCollection <T> .RemoveNode(IDirectedConnectedNode <T> targetNode) { if (Helpers <T> .CheckWhether_RemoveNode_IsNeeded(targetNode, this)) { return; } var typedNode = TypedHelpers.GetNodeAsValidType <ArrayDCN <T>, T>(targetNode); this.InternalRemoveNodeRequest(typedNode); typedNode.InternalDeleteParentCollectionRequest(); }
void IDirectedConnectedNodeCollection <T> .DisconnectNodes(IDirectedConnectedNode <T> firstNode, IDirectedConnectedNode <T> secondNode, ConnectionDirection direction) { if (Helpers <T> .CheckDisconnectNodesConditions(firstNode, secondNode, this)) { return; } var typedFirstNode = TypedHelpers.GetNodeAsValidType <PointerDCN <T>, T>(firstNode); var typedSecondNode = TypedHelpers.GetNodeAsValidType <PointerDCN <T>, T>(secondNode); typedFirstNode.InternalRemoveNodeConnectionRequest(typedSecondNode, direction); typedSecondNode.InternalRemoveNodeConnectionRequest(typedFirstNode, direction.Invert()); }
internal override void GetValuesForNewNode(out CustomDataStructure input, out IDirectedConnectedNode <CustomDataStructure> output) { input = new CustomDataStructure { Mem1 = 5, Mem2 = "5", Mem3 = DateTime.Today.AddHours(5) }; var outputStructure = new CustomDataStructure { Mem1 = 5, Mem2 = "5", Mem3 = DateTime.Today.AddHours(5) }; output = new ArrayDCN <CustomDataStructure> { Value = outputStructure }; }
public void OutputIsOfExpectedType() { var arrayNode = IDCNCFactory.NewArrayCollection <int>().NewNode(); IDirectedConnectedNode <int> deTypedArrayNode = arrayNode; var hopefullyArrayOutput = TypedHelpers.GetNodeAsValidType <ArrayDCN <int>, int>(deTypedArrayNode); Assert.IsTrue(hopefullyArrayOutput is ArrayDCN <int>); var pointerNode = IDCNCFactory.NewPointerCollection <DateTime>().NewNode(); IDirectedConnectedNode <DateTime> deTypedPointerNode = pointerNode; var hopefullyPointerOutput = TypedHelpers.GetNodeAsValidType <PointerDCN <DateTime>, DateTime>(deTypedPointerNode); Assert.IsTrue(hopefullyPointerOutput is PointerDCN <DateTime>); }
internal static S GetNodeAsValidType <S, T>(IDirectedConnectedNode <T> node) where S : class, IDirectedConnectedNode <T> { if (node == null) { return(null); } var typedNode = node as S; if (typedNode == null) { throw new InvalidCastException($"Given node is not a '{typeof(S)}' node. Node Type is actually: '{node.GetType()}'"); } return(typedNode); }
void IDirectedConnectedNodeCollection <T> .RemoveNode(IDirectedConnectedNode <T> targetNode) { if (Helpers <T> .CheckWhether_RemoveNode_IsNeeded(targetNode, this)) { return; } var typedNode = TypedHelpers.GetNodeAsValidType <PointerDCN <T>, T>(targetNode); foreach (var typedConnectedToNode in targetNode.GetNodesConnected(ConnectionDirection.Any).Select(node => TypedHelpers.GetNodeAsValidType <PointerDCN <T>, T>(node))) { typedConnectedToNode.InternalRemoveNodeConnectionRequest(typedNode, ConnectionDirection.Any); } this.InternalRemoveNodeRequest(typedNode); typedNode.InternalDeleteParentCollectionRequest(); }