private bool DoMultiHopTest(int hops)
{
// follow tree from each starting node.
bool success = true;
Log("Starting TranslatePath with {2} hops for {0} Nodes ({1}% Coverage)", AvailableNodes.Values.Count, Configuration.Coverage, hops+1);
// collect the available paths.
BrowsePathCollection availablePaths = new BrowsePathCollection();
int counter = 0;
foreach (Node node in AvailableNodes.Values)
{
if (!CheckCoverage(ref counter))
{
continue;
}
if (hops <= 0)
{
AddSingleHopPaths(node, availablePaths);
}
else
{
AddMultiHopPaths(node, node, null, availablePaths, hops);
}
}
// process paths in blocks.
int paths = 0;
double increment = MaxProgress/availablePaths.Count;
double position = 0;
BrowsePathCollection pathsToTranslate = new BrowsePathCollection();
for (int ii = 0; ii < availablePaths.Count; ii++)
{
paths++;
pathsToTranslate.Add(availablePaths[ii]);
// process batch.
if (pathsToTranslate.Count > 500)
{
if (!Translate(pathsToTranslate))
{
success = false;
break;
}
if (paths > availablePaths.Count/5)
{
Log("Translated {0} browse paths.", paths);
paths = 0;
}
pathsToTranslate.Clear();
}
position += increment;
ReportProgress(position);
}
// process final batch.
if (success)
{
if (pathsToTranslate.Count > 0)
{
if (!Translate(pathsToTranslate))
{
success = false;
}
else
{
Log("Translated {0} browse paths.", paths);
}
}
}
return success;
}