+ public boolean hasMoreTokens() {
+ return currentIndex < source.length();
+ }
+
+ /**
+ * Attempts to cache terminator search result.
+ */
+ public Terminator getOrFindTokenTerminator() {
+ if (currentIndex == cachedTerminatorIndex)
+ return cachedTerminator;
+
+ cachedTerminatorIndex = currentIndex;
+ cachedTerminator = findTokenTerminator();
+ return cachedTerminator;
+ }
+
+ private Terminator findTokenTerminator() {