// Load the sequence point information.
private void LoadSequencePoints()
{
SymInfoEnumerator e;
String filename;
ISymbolDocument document;
int line, column, offset;
// Bail out if we have already loaded the sequence points.
if (sequencePoints != null)
{
return;
}
// Create the sequence point list.
sequencePoints = new ArrayList();
// Load the sequence point information.
e = new SymInfoEnumerator(reader, token);
while (e.MoveNext())
{
if (e.Type == SymReader.DataType_LineColumn)
{
// Block contains line and column values only.
filename = reader.ReadString(e.GetNextInt());
document = reader.GetDocument(filename);
while ((line = e.GetNextInt()) != -1)
{
column = e.GetNextInt();
sequencePoints.Add
(new SequencePoint(0, document, line, column));
}
}
else if (e.Type == SymReader.DataType_LineOffsets)
{
// Block contains line and offset values only.
filename = reader.ReadString(e.GetNextInt());
document = reader.GetDocument(filename);
while ((line = e.GetNextInt()) != -1)
{
offset = e.GetNextInt();
sequencePoints.Add
(new SequencePoint(offset, document, line, 0));
}
}
else if (e.Type == SymReader.DataType_LineColumnOffsets)
{
// Block contains line, column, and offset values.
filename = reader.ReadString(e.GetNextInt());
document = reader.GetDocument(filename);
while ((line = e.GetNextInt()) != -1)
{
column = e.GetNextInt();
offset = e.GetNextInt();
sequencePoints.Add
(new SequencePoint
(offset, document, line, column));
}
}
}
// Sort the sequence points on ascending offset.
sequencePoints.Sort(new SequencePointComparer());
}