Skip to content
Snippets Groups Projects
Commit e7f94809 authored by Paul Nitzke's avatar Paul Nitzke
Browse files

Fix: Only calculate ColorsUsed once

* This commit provides the proper fix mentioned in
  cd423d9d
* We still keep the caching implemented in
  cd423d9d
parent cd423d9d
Branches
No related tags found
1 merge request!39Fix: Cache ColorsUsed for huge performance boost
......@@ -45,6 +45,7 @@ namespace SparseTransform.DataStructures
}
}
private int _colorsUsed = 0;
/// <summary>
/// Number of colors used for coloring.
/// </summary>
......@@ -52,20 +53,24 @@ namespace SparseTransform.DataStructures
{
get
{
List<int> colors = new List<int>();
if (Colored)
if (this._colorsUsed == 0)
{
foreach (GraphNode node in _nodes)
List<int> colors = new List<int>();
if (Colored)
{
int color = node.Color;
// Do not check for != 0 since we already know everything here is colored
if (!colors.Contains(color))
foreach (GraphNode node in _nodes)
{
colors.Add(color);
int color = node.Color;
// Do not check for != 0 since we already know everything here is colored
if (!colors.Contains(color))
{
colors.Add(color);
}
}
}
this._colorsUsed = colors.Count;
}
return colors.Count;
return this._colorsUsed;
}
}
......@@ -79,7 +84,7 @@ namespace SparseTransform.DataStructures
public void AddEdge(int i, int j)
{
if(i != j)
if (i != j)
{
GraphNode iNode = AddNode(i);
GraphNode jNode = AddNode(j);
......
......@@ -88,6 +88,7 @@ namespace SparseTransform.DataStructures
}
}
private int _colorsUsed = 0;
/// <summary>
/// Number of colors used for coloring. Works if either or both sides are colored
/// </summary>
......@@ -95,32 +96,38 @@ namespace SparseTransform.DataStructures
{
get
{
List<int> colors = new List<int>();
if (LeftColored)
if (_colorsUsed == 0)
{
foreach (GraphNode node in _leftNodes)
List<int> colors = new List<int>();
if (LeftColored)
{
int color = node.Color;
// Do not check for != 0 since we already know everything here is colored
if (!colors.Contains(color))
foreach (GraphNode node in _leftNodes)
{
colors.Add(color);
int color = node.Color;
// Do not check for != 0 since we already know everything here is colored
if (!colors.Contains(color))
{
colors.Add(color);
}
}
}
}
if (RightColored)
{
foreach (GraphNode node in _rightNodes)
if (RightColored)
{
int color = node.Color;
// Do not check for != 0 since we already know everything here is colored
if (!colors.Contains(color))
foreach (GraphNode node in _rightNodes)
{
colors.Add(color);
int color = node.Color;
// Do not check for != 0 since we already know everything here is colored
if (!colors.Contains(color))
{
colors.Add(color);
}
}
}
this._colorsUsed = colors.Count;
}
return colors.Count;
return _colorsUsed;
}
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment