Package org.jparsec
Class SourceLocator
java.lang.Object
org.jparsec.SourceLocator
Locates the line and column number of a 0-based index in the source.
This class internally keeps a cache of the indices of all the line break characters scanned so far, therefore repeated location lookup can be done in amortized log(n) time.
It is not multi-thread safe.
-
Field Summary
FieldsModifier and TypeFieldDescriptionprivate static final charThe line break character.(package private) final IntListThe 0-based indices of the line break characters scanned so far.(package private) intThe 0-based index of the column of the next character to be scanned.(package private) intThe 0-based index of the next character to be scanned.private final CharSequenceprivate final intThe first column number.private final intThe first line number. -
Constructor Summary
ConstructorsConstructorDescriptionSourceLocator(CharSequence source) Creates aSourceLocatorobject.SourceLocator(CharSequence source, int lineNumber, int columnNumber) Creates aSourceLocatorobject. -
Method Summary
Modifier and TypeMethodDescription(package private) static intbinarySearch(IntList ascendingInts, int value) Uses binary search to look up the index of the first element inascendingIntsthat's greater than or equal tovalue.private intgetLineBreakColumnIndex(int lineIndex) Gets the 0-based column number of the line break character for line identified bylineIndex.private LocationgetLineBreakLocation(int lineIndex) (package private) Locationlocate(int index) private Locationlocation(int l, int c) (package private) Locationlookup(int index) Looks up the location identified byindusing the cached indices of line break characters.(package private) LocationscanTo(int index) Scans fromnextIndextoindand saves all indices of line break characters intolineBreakIndicesand adjusts the current column number as it goes.
-
Field Details
-
LINE_BREAK
private static final char LINE_BREAKThe line break character.- See Also:
-
source
-
lineBreakIndices
The 0-based indices of the line break characters scanned so far. -
startLineNumber
private final int startLineNumberThe first line number. -
startColumnNumber
private final int startColumnNumberThe first column number. -
nextIndex
int nextIndexThe 0-based index of the next character to be scanned. -
nextColumnIndex
int nextColumnIndexThe 0-based index of the column of the next character to be scanned.
-
-
Constructor Details
-
SourceLocator
SourceLocator(CharSequence source) Creates aSourceLocatorobject.- Parameters:
source- the source.
-
SourceLocator
SourceLocator(CharSequence source, int lineNumber, int columnNumber) Creates aSourceLocatorobject.- Parameters:
source- the source.lineNumber- the starting line number.columnNumber- the starting column number.
-
-
Method Details
-
locate
-
lookup
Looks up the location identified byindusing the cached indices of line break characters. This assumes that all line-break characters beforeindare already scanned. -
scanTo
Scans fromnextIndextoindand saves all indices of line break characters intolineBreakIndicesand adjusts the current column number as it goes. The location of the character onindis returned.After this method returns,
nextIndexandnextColumnIndexwill point to the next character to be scanned or the EOF if the end of input is encountered. -
getLineBreakColumnIndex
private int getLineBreakColumnIndex(int lineIndex) Gets the 0-based column number of the line break character for line identified bylineIndex. -
getLineBreakLocation
-
location
-
binarySearch
Uses binary search to look up the index of the first element inascendingIntsthat's greater than or equal tovalue. If all elements are smaller thanvalue,ascendingInts.size()is returned.
-