Skip to content

Commit 10ac290

Browse files
authored
Merge pull request #37 from ridicoulous/master
get edge TEdgeCustom from node edges implementation
2 parents 294e5ab + c52cf19 commit 10ac290

File tree

3 files changed

+41
-9
lines changed

3 files changed

+41
-9
lines changed

src/Dijkstra.NET.Tests/EdgeTest.cs

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,5 +98,26 @@ public void Two_Edges_Should_Be_Diffrent_With_Diffrent_Nodes()
9898
Assert.False(act);
9999
Assert.False(act2);
100100
}
101+
102+
[Fact]
103+
public void Edges_Get_TEdgeCustom_Should_Work()
104+
{
105+
var g = new Graph<int, string>();
106+
g.AddNode(1);
107+
g.AddNode(2);
108+
g.AddNode(3);
109+
110+
g.Connect(1, 2, 1, "First");
111+
g.Connect(1, 3, 1, "Second");
112+
113+
var node = g >> 1;
114+
var first = node.GetFirstEdgeCustom(2);
115+
var second = node.GetFirstEdgeCustom(3);
116+
117+
118+
bool act = first == "First" && second == "Second";
119+
120+
Assert.True(act);
121+
}
101122
}
102123
}

src/Dijkstra.NET/Graph/INode.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,5 +10,6 @@ public interface INode
1010
public interface INode<T, TEdgeCustom> : INode where TEdgeCustom : IEquatable<TEdgeCustom>
1111
{
1212
T Item { get; }
13+
TEdgeCustom GetFirstEdgeCustom(int nodeEdgeKey);
1314
}
1415
}

src/Dijkstra.NET/Graph/Node.cs

Lines changed: 19 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,20 +2,20 @@
22
using System.Collections.Generic;
33
using Dijkstra.NET.PageRank;
44
using Dijkstra.NET.ShortestPath;
5-
5+
using System.Linq;
66
namespace Dijkstra.NET.Graph
77
{
88
public class Node<T, TEdgeCustom>: IPageRank, IDijkstra, INode<T, TEdgeCustom> where TEdgeCustom: IEquatable<TEdgeCustom>
99
{
10+
public Edge<T, TEdgeCustom>[] Edges;
1011
private readonly HashSet<Node<T,TEdgeCustom>> _parents = new HashSet<Node<T, TEdgeCustom>>();
1112
private readonly HashSet<uint> _children = new HashSet<uint>();
12-
private Edge<T, TEdgeCustom>[] _edges;
1313

1414
internal Node(uint key, T item, Graph<T, TEdgeCustom> graph)
1515
{
1616
Key = key;
1717
Item = item;
18-
_edges = new Edge<T, TEdgeCustom>[5];
18+
Edges = new Edge<T, TEdgeCustom>[5];
1919
Graph = graph;
2020
}
2121

@@ -46,17 +46,27 @@ public void EachEdge(Edge edge)
4646
{
4747
for (int i = 0; i < EdgesCount; i++)
4848
{
49-
ref Edge<T, TEdgeCustom> e = ref _edges[i];
49+
ref Edge<T, TEdgeCustom> e = ref Edges[i];
5050

5151
edge(e.Node.Key, e.Cost);
5252
}
5353
}
54-
54+
/// <summary>
55+
/// Get custom info from node edges by edge key
56+
/// </summary>
57+
/// <param name="nodeEdgeKey">edge key</param>
58+
/// <returns>TEdgeCustom</returns>
59+
public TEdgeCustom GetFirstEdgeCustom(int nodeEdgeKey)
60+
{
61+
return Edges.First(c => c.Node.Key == nodeEdgeKey).Item;
62+
}
63+
64+
5565
internal void AddEdge(in Edge<T, TEdgeCustom> edge)
5666
{
57-
if (_edges.Length == EdgesCount)
67+
if (Edges.Length == EdgesCount)
5868
{
59-
int newSize = _edges.Length;
69+
int newSize = Edges.Length;
6070

6171
if (EdgesCount < NodeConstants.MaxSize)
6272
{
@@ -69,10 +79,10 @@ internal void AddEdge(in Edge<T, TEdgeCustom> edge)
6979
newSize = bigSize < Int32.MaxValue ? (int)bigSize : Int32.MaxValue;
7080
}
7181

72-
Array.Resize(ref _edges, newSize);
82+
Array.Resize(ref Edges, newSize);
7383
}
7484

75-
_edges[EdgesCount] = edge;
85+
Edges[EdgesCount] = edge;
7686
EdgesCount++;
7787
_children.Add(edge.Node.Key);
7888
}

0 commit comments

Comments
 (0)