ReadEdgeTable
(
ListObject oEdgeTable,
HashSet<String> oUniqueVertexNames
)
{
Debug.Assert(oEdgeTable != null);
Debug.Assert(oUniqueVertexNames != null);
Debug.Assert(oUniqueVertexNames.Count == 0);
AssertValid();
// Get the vertex name column ranges.
Range oVertex1NameRange, oVertex2NameRange;
if (!ExcelTableUtil.TryGetTableColumnData(oEdgeTable,
EdgeTableColumnNames.Vertex1Name, out oVertex1NameRange)
||
!ExcelTableUtil.TryGetTableColumnData(oEdgeTable,
EdgeTableColumnNames.Vertex2Name, out oVertex2NameRange)
)
{
return;
}
Int32 iRows = oVertex1NameRange.Rows.Count;
Debug.Assert(oVertex2NameRange.Rows.Count == iRows);
// Read the vertex names all at once.
Object [,] aoVertex1NameValues =
ExcelUtil.GetRangeValues(oVertex1NameRange);
Object [,] aoVertex2NameValues =
ExcelUtil.GetRangeValues(oVertex2NameRange);
// Loop through the edges.
for (Int32 iRowOneBased = 1; iRowOneBased <= iRows; iRowOneBased++)
{
// Get the vertex names and add them to the HashSet.
String sVertex1Name, sVertex2Name;
if ( ExcelUtil.TryGetNonEmptyStringFromCell(aoVertex1NameValues,
iRowOneBased, 1, out sVertex1Name) )
{
oUniqueVertexNames.Add(sVertex1Name);
}
if ( ExcelUtil.TryGetNonEmptyStringFromCell(aoVertex2NameValues,
iRowOneBased, 1, out sVertex2Name) )
{
oUniqueVertexNames.Add(sVertex2Name);
}
}
}