コード例 #1
0
ファイル: GraphMap.cs プロジェクト: khooversoft/Toolbox.Core
        /// <summary>
        /// Get connected nodes for node specified (directed)
        /// </summary>
        /// <param name="node">node to search for</param>
        /// <returns>list of connected nodes</returns>
        public IReadOnlyList <TNode> GetConnectedNodes(TNode node)
        {
            var list = _edges.Values
                       .Where(x => KeyCompare.Equals(x.FromNodeKey, node.Key))
                       .Join(_nodes.Values, x => x.ToNodeKey, x => x.Key, (o, i) => i)
                       .ToList();

            return(list);
        }
コード例 #2
0
ファイル: GraphMap.cs プロジェクト: khooversoft/Toolbox.Core
        /// <summary>
        /// Return list of nodes by key(s)
        /// </summary>
        /// <param name="nodeKeys">list of node keys</param>
        /// <returns>nodes matching set</returns>
        public IReadOnlyList <TNode> FindNodesByKey(IEnumerable <TKey> nodeKeys)
        {
            if (nodeKeys == null || !nodeKeys.Any())
            {
                return(new List <TNode>());
            }

            return(Nodes.Values
                   .Where(x => nodeKeys.Any(y => KeyCompare.Equals(x.Key, y)))
                   .ToList());
        }
コード例 #3
0
ファイル: GraphMap.cs プロジェクト: khooversoft/Toolbox.Core
        /// <summary>
        /// Remove node, will remove all edges associated
        /// </summary>
        /// <param name="nodeKey"></param>
        /// <returns></returns>
        public GraphMap <TKey, TNode, TEdge> RemoveNode(TKey nodeKey)
        {
            // Remove edges associated with node
            _edges.Values
            .Where(x => KeyCompare.Equals(x.FromNodeKey, nodeKey) || KeyCompare.Equals(x.ToNodeKey, nodeKey))
            .Select(x => x.Key)
            .ToList()
            .ForEach(x => _edges.Remove(x));

            _nodes.Remove(nodeKey);

            return(this);
        }
コード例 #4
0
ファイル: GraphMap.cs プロジェクト: khooversoft/Toolbox.Core
        /// <summary>
        /// Remove edge
        /// </summary>
        /// <param name="fromNodeKey">from node key</param>
        /// <param name="toNodeKey">to node key</param>
        /// <returns></returns>
        public GraphMap <TKey, TNode, TEdge> RemoveEdge(TKey fromNodeKey, TKey toNodeKey)
        {
            Guid?edgeKey = _edges.Values
                           .Where(x => KeyCompare.Equals(x.FromNodeKey, fromNodeKey) && KeyCompare.Equals(x.ToNodeKey, toNodeKey))
                           .Select(x => x.Key)
                           .FirstOrDefault();

            if (edgeKey != null)
            {
                _edges.Remove((Guid)edgeKey);
            }

            return(this);
        }
コード例 #5
0
ファイル: GraphMap.cs プロジェクト: khooversoft/Toolbox.Core
        /// <summary>
        /// Test edge and return error message
        /// </summary>
        /// <param name="edge"></param>
        /// <returns>error message</returns>
        private string TestEdge(TEdge edge)
        {
            if (!_nodes.ContainsKey(edge.FromNodeKey))
            {
                return($"Parent {edge.FromNodeKey} is not found in nodes");
            }

            if (!_nodes.ContainsKey(edge.ToNodeKey))
            {
                return($"Child {edge.ToNodeKey} is not found in nodes");
            }

            if (KeyCompare.Equals(edge.FromNodeKey, edge.ToNodeKey))
            {
                return($"From node {edge.FromNodeKey} cannot be the same as the to {edge.ToNodeKey}.");
            }

            return(null);
        }
コード例 #6
0
        /// <summary>
        /// Updates list with sorting
        /// </summary>
        public void UpdateKey()
        {
            if (master.IsFrozen == true)
            {
                return;
            }
            Clear();
            ArrayList lst = new ArrayList();

            foreach (object a in master)
            {
                lst.Add(a);
            }
            KeyCompare kc = new KeyCompare(master, KeyName);

            lst.Sort(kc);
            kc = null;
            foreach (object a in lst)
            {
                Add(a);
            }
            lst.Clear();
            lst = null;

/*			foreach (object a in master) {
 *                              bool found = false;
 *                              for (int i=0; i<Count; i++) {
 *                                      object b = this[i];
 *                                      int r = master.CompareData (KeyName, a, b);
 *                                      if (r <= 0) {
 *                                              found = true;
 *                                              Insert (i, a);
 *                                              break;
 *                                      }
 *                              }
 *                              if (found == false)
 *                                      Add (a);
 *                      }*/
        }
コード例 #7
0
		/// <summary>
		/// Updates list with sorting
		/// </summary>
		public void UpdateKey()
		{
			if (master.IsFrozen == true)
				return;
			Clear();
			ArrayList lst = new ArrayList();
			foreach (object a in master)
				lst.Add (a);
			KeyCompare kc = new KeyCompare (master, KeyName);
			lst.Sort (kc);
			kc = null;
			foreach (object a in lst)
				Add (a);
			lst.Clear();
			lst = null;
/*			foreach (object a in master) {
				bool found = false;
				for (int i=0; i<Count; i++) {
					object b = this[i];
					int r = master.CompareData (KeyName, a, b);
					if (r <= 0) {
						found = true;
						Insert (i, a);
						break;
					}
				}
				if (found == false)
					Add (a);
			}*/
		}