コード例 #1
0
ファイル: IDCNHelpers.cs プロジェクト: Brondahl/MDMUtils
 internal static void VerifyNodeIsNotNull(IDirectedConnectedNode <T> node)
 {
     if (node == null)
     {
         throw new ArgumentNullException("node", "Operation is not valid on a null node.");
     }
 }
コード例 #2
0
 internal override void GetValuesForNewNode(out Double input, out IDirectedConnectedNode <Double> output)
 {
     input  = 5.0;
     output = new ArrayDCN <Double> {
         Value = 5.0
     };
 }
コード例 #3
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)
     };
 }
コード例 #4
0
ファイル: IDCNHelpers.cs プロジェクト: Brondahl/MDMUtils
 internal static void VerifyNodeIsInSomeCollection(IDirectedConnectedNode <T> node)
 {
     if (NodeIsNotInAnyCollection(node))
     {
         throw new InvalidOperationException("Operation is not valid when node is not in a collection.");
     }
 }
コード例 #5
0
ファイル: IDCNHelpers.cs プロジェクト: Brondahl/MDMUtils
 internal static void VerifyNodesAreNotTheSameNode(IDirectedConnectedNode <T> firstNode, IDirectedConnectedNode <T> secondNode)
 {
     if (firstNode == secondNode)
     {
         throw new InvalidOperationException("Self Connections are not permitted.");
     }
 }
コード例 #6
0
ファイル: IDCNHelpers.cs プロジェクト: Brondahl/MDMUtils
 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.");
     }
 }
コード例 #7
0
ファイル: IDCNHelpers.cs プロジェクト: Brondahl/MDMUtils
 internal static void VerifyNodeIsNotInAnyCollection(IDirectedConnectedNode <T> node)
 {
     if (!NodeIsNotInAnyCollection(node))
     {
         throw new InvalidOperationException("Node already has a parent Collection");
     }
 }
コード例 #8
0
ファイル: IDCNHelpers.cs プロジェクト: Brondahl/MDMUtils
 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.");
     }
 }
コード例 #9
0
 internal override void GetValuesForNewNode(out string input, out IDirectedConnectedNode <string> output)
 {
     input  = "5";
     output = new ArrayDCN <string> {
         Value = "5"
     };
 }
コード例 #10
0
 internal override void GetValuesForNewNode(out int input, out IDirectedConnectedNode <int> output)
 {
     input  = 5;
     output = new ArrayDCN <int> {
         Value = 5
     };
 }
コード例 #11
0
ファイル: IDCNHelpers.cs プロジェクト: Brondahl/MDMUtils
 internal static void Verify_AddConnectionWith_ConditionsAreSatisfied(IDirectedConnectedNode <T> firstNode, IDirectedConnectedNode <T> secondNode)
 {
     VerifyNodeIsNotNull(firstNode);
     VerifyNodeIsInSomeCollection(firstNode);
     VerifyNodesAreInSameCollection(firstNode, secondNode);
     VerifyNodesAreNotTheSameNode(firstNode, secondNode);
 }
コード例 #12
0
ファイル: PointerDCNC.cs プロジェクト: Brondahl/MDMUtils
        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
            }
        }
コード例 #13
0
ファイル: IDCNHelpers.cs プロジェクト: Brondahl/MDMUtils
 internal static bool Check_IsConnectedWith_PreConditions(IDirectedConnectedNode <T> firstNode, IDirectedConnectedNode <T> secondNode)
 {
     return(firstNode == null ||
            secondNode == null ||
            NodeIsNotInAnyCollection(firstNode) ||
            NodeIsNotInAnyCollection(secondNode) ||
            NodesAreNotInSameCollection(firstNode, secondNode));
 }
コード例 #14
0
        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));
        }
コード例 #15
0
ファイル: PointerDCNC.cs プロジェクト: Brondahl/MDMUtils
        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));
        }
コード例 #16
0
        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
            };
        }
コード例 #17
0
        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);
        }
コード例 #18
0
ファイル: PointerDCNC.cs プロジェクト: Brondahl/MDMUtils
        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);
        }
コード例 #19
0
ファイル: IDCNHelpers.cs プロジェクト: Brondahl/MDMUtils
        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);
        }
コード例 #20
0
ファイル: PointerDCNC.cs プロジェクト: Brondahl/MDMUtils
        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());
        }
コード例 #21
0
ファイル: IDCNHelpers.cs プロジェクト: Brondahl/MDMUtils
 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.");
     }
 }
コード例 #22
0
        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));
        }
コード例 #23
0
        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);
        }
コード例 #24
0
            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));
            }
コード例 #25
0
        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();
        }
コード例 #26
0
ファイル: PointerDCNC.cs プロジェクト: Brondahl/MDMUtils
        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());
        }
コード例 #27
0
        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
            };
        }
コード例 #28
0
            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>);
            }
コード例 #29
0
ファイル: IDCNHelpers.cs プロジェクト: Brondahl/MDMUtils
        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);
        }
コード例 #30
0
ファイル: PointerDCNC.cs プロジェクト: Brondahl/MDMUtils
        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();
        }