Package Torello.HTML.NodeSearch
Class HNLIInclusive
- java.lang.Object
-
- Torello.HTML.NodeSearch.AbstractHNLI<TagNode,java.util.Vector<HTMLNode>>
-
- Torello.HTML.NodeSearch.HNLIInclusive
-
- All Implemented Interfaces:
java.util.Iterator<java.util.Vector<HTMLNode>>,java.util.ListIterator<java.util.Vector<HTMLNode>>
public class HNLIInclusive extends AbstractHNLI<TagNode,java.util.Vector<HTMLNode>>
HNLIInclusive: HTMLNode ListIterator Inclusive
This is anIteratorclass that has been heavily improved to allow for all types of updates, additions, removals, etc... to a vectorized-html web-page. The methods that are provided allow a user to request anIteratorfrom the Inclusive Iterator retrieval classes in this Node-Search Package.
The concept of'Inclusive', as explained quite thoroughly in the classes that contain this word,'Inclusive'means that in this hereIterator, sub-lists of (Vectors) of'HTMLNode'will be returned from thenextElement()methods in this class. EachVectoror sublist ofHTMLNodewill begin with an opening HTML Element, for example'<DIV ...>', and the last element in theVectorthat's returned, will be a Matching, Closing, Element - for example'</DIV>'
HNLIInclusive Generator Class:- Class:
InnerTagInclusiveIterator - Class:
TagNodeInclusiveIterator
Iterates 'Inclusive'TagNodesublist-matches, which would be similar to iterating the'.innerHTML'fields of elements in a JavaScript DOM-Tree.
This interface builds on Java's 'ListIterator<E>' interface.Iterator<E>
public interfacejava.util.Iterator<E>exports these methods:boolean hasNext()default void forEachRemaining(Consumer<? super E> action)E next()default void remove()
ListIterator<E>
public interfacejava.util.ListIterator<E>extends the previousIteratorwith these methods:void add(E e)boolean hasNext()boolean hasPrevious()E next()int nextIndex()E previous()int previousIndex()void remove()void set(E e)
ThisIteratorclass further extends Java'sListIterator<E>to add severalHTMLNodeandVector<HTMLNode>specific insertion, deletion, and replacement operations. These methods are all properly-listed below in the Method-Summary Section of this class' Java-Doc Documentation-Page.
Easy to Use:
Generally, it is sometimes apparent that Java's introduction of the concept of generics - and particularly theIterator<E>andListIterator<E>has been somewhat down-played in some circles. The value of anIteratoris sometimes over-looked when applied to data-modification. 4 out of 6 of thestaticmethod-based class-types in this package:Find, Get, Peek, CountandCountprovide only "data-observation" of the underlying Vectorized-HTML. The other twoPollandRemove, however, modify the underlyingVector.
All of these work fine without an using anIterator, however, there may be cases where node-replacement and node-removal on a case-by-case basis will be necessary. And that can lead to problems caused by stale data pointers.
Stale Data-Pointers Helper:
If an array of index pointers is requested:
int[] posArr = TagNodeFind.all(...)
When the user begins replacing and removing nodes using this array... if at any point the size of theVectoris changed, the entire pointer-array will immediately contain stale-data!
This can be overcome by maintaining a'Vector-size delta'value, and offsetting each value in the pointer-array. Other tricks include modifying the data inside theVectorin reverse-order. Working with the last index-pointers first means that when or if the size of a HTML-Vectorchanges, the earlier pointers will not become stale. Remember, after an insert or remove operation is done on a list, only the nodes that lay after the insert-index or remove-index are shifted!
Indeed, however, this is exactly what theHNLIandHNLIInclusiveiterators do internally! If a programmer employs theset(...), add(...)andremove(...)methods provided by theIterator-classes both in this package, and the java-interfaces they inherit, internally a size-delta and acursorare maintained by theIteratorwhen & if elements are added, updated and removed.
As long long as the underlyingVectoris not modified by code outside of theIteratormethods, stale and invalid data-pointers will never be returned by the getter methods of this class. Index-Pointer Arrays are often useful, but less-so when the user plans on changing or adding sections ofHTMLNodethat change how many nodes are in the underlyingVector.
Iterator Efficiency:
If large numbers of changes are going to be made to big Vectorized-HTML web-pages, it is much more efficient to use theReplaceableinterface than anIterator! However, in cases where several quick change or retrieval operations are needed (and to smaller pages), and where efficiency is not imperative, writing HTML-Retrieval or Update Code using anHNLIwill usually be code that is world's easier to understand, read and write.
Hi-Lited Source-Code:- View Here: Torello/HTML/NodeSearch/HNLIInclusive.java
- Open New Browser-Tab: Torello/HTML/NodeSearch/HNLIInclusive.java
File Size: 19,865 Bytes Line Count: 464 '\n' Characters Found
-
-
Field Summary
-
Fields inherited from class Torello.HTML.NodeSearch.AbstractHNLI
c, cursor, expectedSize, maxCursor, minCursor, modifiedSince, p, v
-
-
Method Summary
Method: Next & Previous Modifier and Type Method booleanhasNext()booleanhasPrevious()Retrieve Vector-Indices (Pointers) Modifier and Type Method DotPairfirstDotPair()DotPairlastDotPair()DotPairnextDotPair()intnextIndex()DotPairpreviousDotPair()intpreviousIndex()Retrieve HTMLNode's Modifier and Type Method Vector<HTMLNode>first()Vector<HTMLNode>last()Vector<HTMLNode>next()Vector<HTMLNode>previous()-
Methods inherited from class Torello.HTML.NodeSearch.AbstractHNLI
add, add, add, addHTMLNode, CHECK_CME, CHECK_EXCEPTIONS, CHECK_EXCEPTIONS, CHECK_EXCEPTIONS, CHECK_EXCEPTIONS, clearCursorBounds, cursorLocation, insertAt, insertAt, insertAt, MODIFIED, moveCursor, moveCursorToEnd, moveCursorToStart, remove, removeElementAt, removeElements, removeRange, removeRange, replaceRange, replaceRange, restrictCursor, restrictCursor, restrictCursor, set, set, set, setHTMLNode
-
-
-
-
Method Detail
-
hasPrevious
public boolean hasPrevious()
Use this method to find out whether the underlyingVectorand currentcursorposition would retrieve another match if'previous'or'previousIndex'were called.- Returns:
- This shall return
TRUEif calling theprevious(), orpreviousIndex()methods would return another inclusive / sub-list node-match. This method shall returnFALSEif callingprevious()would generate / throw a'NoSuchElementException'- because there are no more sub-list matches in the underlyingVector, given the currentcursorposition. - Throws:
java.util.ConcurrentModificationException- Internal to thisIterator'sstate is a privateint-field named'expectedSize'that is consistently maintained to know the current size of the underlying HTML-Vector. Whenever modifications are made to that HTML with this class' Add, Set & Remove methods - this class code will also, simultaenously, update the'expectedSize'field.
If changes to the HTML-Vectorare made outside of this class' Add, Set, Remove or Update interface-methods, then the value of this internal integer-field ('expectedSize') will stop being consistent with the actual size of the HTML-Vector.
When the size of the internal HTML-Vectordoes not equal the value stored inside field'expectedSize', this class' code will throw aConcurrentModificationException.Changes to the underlyingVectorthat do not modify theVector'ssize simply won't be detected. This is (somewhat) due to 'a bug' in the JDK implementation ofAbstractListwhere the integer-field named'modCount'is assigned'protected'visibility, rendering it somewhat useless.RESET NOTE: Any call made to a variant of the providedfirst(...)orlast(...)methods will force a reset of this the internal integer-field'expected-size'(to the <Vector'sactual size). When this field is reset, it will actually prevent theConcurrentModificationExceptionfrom throwing - even if code from outside this class has changed the size of the HTML-Vector- because it becomes impossible to detect that change.- See Also:
Util.Inclusive.subSectionOPT(Vector, int, int),TagNode.isClosing,SubSection- Code:
- Exact Method Body:
CHECK_CME(); if (hasPrevDP != null) return true; int LOOP_BOUNDARY = (minCursor == -1) ? 0 : minCursor; if (cursor == -1) cursor = LOOP_BOUNDARY; // will return false while (--cursor >= LOOP_BOUNDARY) if ((hasPrevDP = TEST_CURSOR_INCLUSIVE()) != null) return true; return false;
-
previous
public java.util.Vector<HTMLNode> previous()
Returns the nearest sub-list match in the underlyingVector, given the currentcursorposition - when searching in the left-direction, or in the direction of decreasingVector-indices.- Returns:
- This shall return the sub-list match that is directly previous to the current
cursorposition. - Throws:
java.util.ConcurrentModificationException- Internal to thisIterator'sstate is a privateint-field named'expectedSize'that is consistently maintained to know the current size of the underlying HTML-Vector. Whenever modifications are made to that HTML with this class' Add, Set & Remove methods - this class code will also, simultaenously, update the'expectedSize'field.
If changes to the HTML-Vectorare made outside of this class' Add, Set, Remove or Update interface-methods, then the value of this internal integer-field ('expectedSize') will stop being consistent with the actual size of the HTML-Vector.
When the size of the internal HTML-Vectordoes not equal the value stored inside field'expectedSize', this class' code will throw aConcurrentModificationException.Changes to the underlyingVectorthat do not modify theVector'ssize simply won't be detected. This is (somewhat) due to 'a bug' in the JDK implementation ofAbstractListwhere the integer-field named'modCount'is assigned'protected'visibility, rendering it somewhat useless.RESET NOTE: Any call made to a variant of the providedfirst(...)orlast(...)methods will force a reset of this the internal integer-field'expected-size'(to the <Vector'sactual size). When this field is reset, it will actually prevent theConcurrentModificationExceptionfrom throwing - even if code from outside this class has changed the size of the HTML-Vector- because it becomes impossible to detect that change.java.util.NoSuchElementException- If there are not more matches, this exception shall throw. Avoid having to catch this exception by always calling method'hasPrevious', and only invoking'previous'if that method returned TRUE.- Code:
- Exact Method Body:
return Util.cloneRange(v, previousDotPair());
-
previousDotPair
public DotPair previousDotPair()
This method, in-some-ways (but-not-others), "overrides" the originalListIterator<E>method namedpreviousIndex(). Since classHNLIInclusiveis anIteratorover "sub-lists" - not individual nodes - whenever aVector-index position is expected, the programmer should be expecting thisIteratorto return two values: both a sub-list start-position, and also a sublist ending-Vector-position.
Returning a complete Sub-List in a single Java-Reference is the entire rationale behind classDotPair. ClassDotPairallows pointer-indices to paired together and returned, and eliminates the need to return actual copies of list-nodes themslves.
ImplementingListIterator.previousIndex()
Java'sListIteratorclass has anabstract-method that must be implemented - namelypreviousIndex(). Java requires this method to exist in order for this class to properly implement the interface.
This method (previousDotPair()), however, is provided as a "far better solution" than the original'previousIndex()'method.ListIterator'spreviousIndex()method can still be used. However, the actual intention of an "HNLI Inclusive" Iterator is to find entire Sublist-Matches in a Vectorized-HTML Web-Page, and thusly, returning a single integer-index is not actually acheiving that purpose.
The methodpreviousIndex(), which again is mandatory, will return an integer that points to the Begin-Index of the previous sub-list match, but will (obviously) leave off the Ending-Index of that very match! Remember that the concept behind the key-word "Inclusive" is such that a completeVector-Sublist shall be searched, found, and returned - rather than just the first HTMLTagNodeof that Sub-List.DotPairReturn-Type Summary:
This method,previousDotPair, returns a value that is more closely in line with the concepts behind an HTML Node List-Iterator than that returned by methodint previousIndex(). The latter will return an integer index-pointer (into the underlying vectorized-HTML page-Vector) that identifies the first element of the previous-match.
But if only the opening sub-listVector-index is returned (and the closingVector-index is omitted), this will very-often (but not always) be completely useless information! A "Sub-List Match" is comprised of both Opening & Closing Indices, and therefore necessitates a completeDotPairreturn, rather than an integer.- Returns:
- The previous integer-pointer pair to the starting-index and ending-index of the previous "inclusive-sublist match" found on the vectorized-html webpage.
- Throws:
java.util.ConcurrentModificationException- Internal to thisIterator'sstate is a privateint-field named'expectedSize'that is consistently maintained to know the current size of the underlying HTML-Vector. Whenever modifications are made to that HTML with this class' Add, Set & Remove methods - this class code will also, simultaenously, update the'expectedSize'field.
If changes to the HTML-Vectorare made outside of this class' Add, Set, Remove or Update interface-methods, then the value of this internal integer-field ('expectedSize') will stop being consistent with the actual size of the HTML-Vector.
When the size of the internal HTML-Vectordoes not equal the value stored inside field'expectedSize', this class' code will throw aConcurrentModificationException.Changes to the underlyingVectorthat do not modify theVector'ssize simply won't be detected. This is (somewhat) due to 'a bug' in the JDK implementation ofAbstractListwhere the integer-field named'modCount'is assigned'protected'visibility, rendering it somewhat useless.RESET NOTE: Any call made to a variant of the providedfirst(...)orlast(...)methods will force a reset of this the internal integer-field'expected-size'(to the <Vector'sactual size). When this field is reset, it will actually prevent theConcurrentModificationExceptionfrom throwing - even if code from outside this class has changed the size of the HTML-Vector- because it becomes impossible to detect that change.- See Also:
Util.Inclusive.subSectionOPT(Vector, int, int),TagNode.isClosing- Code:
- Exact Method Body:
CHECK_CME(); lastReturned = hasPrevDP; hasNextDP = hasPrevDP = null; modifiedSince = false; if (lastReturned != null) return lastReturned; int LOOP_BOUNDARY = (minCursor == -1) ? 0 : minCursor; if (cursor == -1) cursor = LOOP_BOUNDARY; // Will throw exception while (--cursor >= LOOP_BOUNDARY) if ((lastReturned = TEST_CURSOR_INCLUSIVE()) != null) return lastReturned; throw new NoSuchElementException("There are no more previous elements available.");
-
hasNext
public boolean hasNext()
Use this method to find out whether the underlyingVectorand currentcursorposition would retrieve another match if'next'or'nextIndex'were called.- Returns:
- This shall return
TRUEif calling thenext(), ornextIndex()methods would return another inclusive / sub-list match. This method shall returnFALSEif calling'next'would generate / throw a'NoSuchElementException'- because there are no more sub-list matches in the underlyingVector, given the currentcursorposition. - Throws:
java.util.ConcurrentModificationException- Internal to thisIterator'sstate is a privateint-field named'expectedSize'that is consistently maintained to know the current size of the underlying HTML-Vector. Whenever modifications are made to that HTML with this class' Add, Set & Remove methods - this class code will also, simultaenously, update the'expectedSize'field.
If changes to the HTML-Vectorare made outside of this class' Add, Set, Remove or Update interface-methods, then the value of this internal integer-field ('expectedSize') will stop being consistent with the actual size of the HTML-Vector.
When the size of the internal HTML-Vectordoes not equal the value stored inside field'expectedSize', this class' code will throw aConcurrentModificationException.Changes to the underlyingVectorthat do not modify theVector'ssize simply won't be detected. This is (somewhat) due to 'a bug' in the JDK implementation ofAbstractListwhere the integer-field named'modCount'is assigned'protected'visibility, rendering it somewhat useless.RESET NOTE: Any call made to a variant of the providedfirst(...)orlast(...)methods will force a reset of this the internal integer-field'expected-size'(to the <Vector'sactual size). When this field is reset, it will actually prevent theConcurrentModificationExceptionfrom throwing - even if code from outside this class has changed the size of the HTML-Vector- because it becomes impossible to detect that change.- See Also:
AbstractHNLI.CHECK_CME(),Util.Inclusive.subSectionOPT(Vector, int, int),TagNode.isClosing,SubSection- Code:
- Exact Method Body:
CHECK_CME(); if (hasNextDP != null) return true; int LOOP_BOUNDARY = (maxCursor == -1) ? (v.size() - 1) : maxCursor; if (cursor == -1) cursor = (minCursor == -1) ? -1 : (minCursor-1); while (++cursor <= LOOP_BOUNDARY) if ((hasNextDP = TEST_CURSOR_INCLUSIVE()) != null) return true; return false;
-
next
public java.util.Vector<HTMLNode> next()
Returns the nearest node-match in the underlyingVector, given the currentcursorposition - when searching in the right-direction, or in the direction of increasingVector-indices.- Returns:
- This shall return the sub-list match that is directly next to the current
cursorposition. - Throws:
java.util.ConcurrentModificationException- Internal to thisIterator'sstate is a privateint-field named'expectedSize'that is consistently maintained to know the current size of the underlying HTML-Vector. Whenever modifications are made to that HTML with this class' Add, Set & Remove methods - this class code will also, simultaenously, update the'expectedSize'field.
If changes to the HTML-Vectorare made outside of this class' Add, Set, Remove or Update interface-methods, then the value of this internal integer-field ('expectedSize') will stop being consistent with the actual size of the HTML-Vector.
When the size of the internal HTML-Vectordoes not equal the value stored inside field'expectedSize', this class' code will throw aConcurrentModificationException.Changes to the underlyingVectorthat do not modify theVector'ssize simply won't be detected. This is (somewhat) due to 'a bug' in the JDK implementation ofAbstractListwhere the integer-field named'modCount'is assigned'protected'visibility, rendering it somewhat useless.RESET NOTE: Any call made to a variant of the providedfirst(...)orlast(...)methods will force a reset of this the internal integer-field'expected-size'(to the <Vector'sactual size). When this field is reset, it will actually prevent theConcurrentModificationExceptionfrom throwing - even if code from outside this class has changed the size of the HTML-Vector- because it becomes impossible to detect that change.java.util.NoSuchElementException- If there are not more matches, this exception shall throw. Avoid having to catch this exception by always calling method'hasNext', and only invoking'next'if that method returned TRUE.- See Also:
AbstractHNLI.CHECK_CME(),Util.Inclusive.subSectionOPT(Vector, int, int),TagNode.isClosing,SubSection- Code:
- Exact Method Body:
return Util.cloneRange(v, nextDotPair());
-
nextDotPair
public DotPair nextDotPair()
This method, in-some-ways (but-not-others), "overrides" the originalListIterator<E>method namednextIndex(). Since classHNLIInclusiveis anIteratorover "sub-lists" - not individual nodes - whenever aVector-index position is expected, the programmer should be expecting thisIteratorto return two values: both a sub-list start-position, and also a sublist ending-Vector-position.
Returning a complete Sub-List in a single Java-Reference is the entire rationale behind classDotPair. ClassDotPairallows pointer-indices to paired together and returned, and eliminates the need to return actual copies of list-nodes themslves.
ImplementingListIterator.nextIndex()
Java'sListIteratorclass has anabstract-method that must be implemented - namelynextIndex(). Java requires this method to exist in order for this class to properly implement the interface.
This method (nextDotPair()), however, is provided as a "far better solution" than the original'nextIndex()'method.ListIterator'snextIndex()method can still be used. However, the actual intention of an "HNLI Inclusive" Iterator is to find entire Sublist-Matches in a Vectorized-HTML Web-Page, and thusly, returning a single integer-index is not actually acheiving that purpose.
The methodnextIndex(), which again is mandatory, will return an integer that points to the Begin-Index of the next sub-list match, but will (obviously) leave off the Ending-Index of that very match! Remember that the concept behind the key-word "Inclusive" is such that a completeVector-Sublist shall be searched, found, and returned - rather than just the first HTMLTagNodeof that Sub-List.DotPairReturn-Type Summary:
This method,nextDotPair, returns a value that is more closely in line with the concepts behind an HTML Node List-Iterator than that returned by methodint nextIndex(). The latter will return an integer index-pointer (into the underlying vectorized-HTML page-Vector) that identifies the first element of the next-match.
But if only the opening sub-listVector-index is returned (and the closingVector-index is omitted), this will very-often (but not always) be completely useless information! A "Sub-List Match" is comprised of both Opening & Closing Indices, and therefore necessitates a completeDotPairreturn, rather than an integer.- Returns:
- The next integer-pointer pair to the starting-index and ending-index of the next "inclusive-sublist match" found on the vectorized-html webpage.
- Throws:
java.util.ConcurrentModificationException- Internal to thisIterator'sstate is a privateint-field named'expectedSize'that is consistently maintained to know the current size of the underlying HTML-Vector. Whenever modifications are made to that HTML with this class' Add, Set & Remove methods - this class code will also, simultaenously, update the'expectedSize'field.
If changes to the HTML-Vectorare made outside of this class' Add, Set, Remove or Update interface-methods, then the value of this internal integer-field ('expectedSize') will stop being consistent with the actual size of the HTML-Vector.
When the size of the internal HTML-Vectordoes not equal the value stored inside field'expectedSize', this class' code will throw aConcurrentModificationException.Changes to the underlyingVectorthat do not modify theVector'ssize simply won't be detected. This is (somewhat) due to 'a bug' in the JDK implementation ofAbstractListwhere the integer-field named'modCount'is assigned'protected'visibility, rendering it somewhat useless.RESET NOTE: Any call made to a variant of the providedfirst(...)orlast(...)methods will force a reset of this the internal integer-field'expected-size'(to the <Vector'sactual size). When this field is reset, it will actually prevent theConcurrentModificationExceptionfrom throwing - even if code from outside this class has changed the size of the HTML-Vector- because it becomes impossible to detect that change.- See Also:
AbstractHNLI.CHECK_CME(),Util.Inclusive.subSectionOPT(Vector, int, int),TagNode.isClosing,SubSection- Code:
- Exact Method Body:
CHECK_CME(); lastReturned = hasNextDP; hasNextDP = hasPrevDP = null; modifiedSince = false; if (lastReturned != null) return lastReturned; int LOOP_BOUNDARY = (maxCursor == -1) ? (v.size() - 1) : maxCursor; if (cursor == -1) cursor = (minCursor == -1) ? -1 : (minCursor-1); while (++cursor <= LOOP_BOUNDARY) if ((lastReturned = TEST_CURSOR_INCLUSIVE()) != null) return lastReturned; throw new NoSuchElementException("There are no more next elements available.");
-
firstDotPair
public DotPair firstDotPair()
This adds methodpublic DotPair firstIDotPair()to the javapublic interface ListIterator<E>.This, actually, returns an instance ofDotPair. Because thisIteratoriteratesVector-sublists, not individual HTML nodes, the first-index of the first match will be aDotPair, not an integer. This (hopefully-obvious) is because thepublic class DotPairencapsulates two needed numbers (aVector-position start-index, and an ending-index) into a single-data-class.
Cursor Reset Method:
This method is (somewhat / sort-of) of a Reset-Method - because the internal-cursoris moved to the beginning of the underlying-Vector. Whenever the cursor is moved (or restricted), this class' code will check for the possibility of aConcurrentModificationException.
In normal situations, when statements or method's from outside the update methods in this class, modify the underlying html-VectoraConcurrentModificationExceptionshall throw. However, whenever anHTML Node List Iteratormethod moves the cursor, the logic for checking Concurrent-Modification will reset (by setting the internal'expectedSize'field tov.size()).
This 'resetting' of the internal'expectedSize'field is precisely how to prevent an exception throw due to outside modification of the underlyingVector.- Returns:
- Out of the entire vectorized-html webpage, this method resets the internal
cursor, and returns the first'DotPair'match - the starting-index and ending-index - of the first "inclusive-sublist match" - See Also:
nextDotPair(),lastDotPair()- Code:
- Exact Method Body:
cursor = 0; hasNextDP = hasPrevDP = null; // Calls to first, last, firstIndex, or lastIndex "reset" the CME Monitor-Logic expectedSize = v.size(); return nextDotPair();
-
lastDotPair
public DotPair lastDotPair()
This does the same asfirstIDotPair()but returns the last list match index-pair found within the inputVector.
This adds methodpublic DotPair lastIDotPair()to the javapublic interface ListIterator<E>.This, actually, returns an instance ofDotPair. Because thisIteratoriteratesVector-sublists, not individual HTML nodes, the last-index of the last match will be a'DotPair'not an integer. This (hopefully obviously) is because thepublic class DotPairencapsulates two needed numbers (aVector-position start-index, and an ending-index) into a single-data-class.
Cursor Reset Method:
This method is (somewhat / sort-of) of a Reset-Method - because the internal-cursoris moved to the beginning of the underlying-Vector. Whenever the cursor is moved (or restricted), this class' code will check for the possibility of aConcurrentModificationException.
In normal situations, when statements or method's from outside the update methods in this class, modify the underlying html-VectoraConcurrentModificationExceptionshall throw. However, whenever anHTML Node List Iteratormethod moves the cursor, the logic for checking Concurrent-Modification will reset (by setting the internal'expectedSize'field tov.size()).
This 'resetting' of the internal'expectedSize'field is precisely how to prevent an exception throw due to outside modification of the underlyingVector.- Returns:
- Out of the entire vectorized-html webpage, this method resets the internal pointer,
and returns the last
'DotPair'match - the starting-index and ending-index - of the last "inclusive-sublist match" - See Also:
previousDotPair(),firstDotPair()- Code:
- Exact Method Body:
cursor = v.size() - 1; hasNextDP = hasPrevDP = null; // Calls to first, last, firstIndex, or lastIndex "reset" the CME Monitor-Logic expectedSize = v.size(); return previousDotPair();
-
first
public java.util.Vector<HTMLNode> first()
This adds to theListIterator<E>class by providing afirst()method that resets thisIteratorback to the first match that is found in the underlying html-Vector. The internal-cursorwill be moved back to the beginning of theVector.
Modified Return-Value:
If the underlying web-pageVectorhas been modified, then this method shall return the updated first match. There is no "match memory." Rather, if the underlyingVectorchanges, further calls tonext(), previous(), first()andlast()would also change.
Cursor Reset Method:
This method is (somewhat / sort-of) of a Reset-Method - because the internal-cursoris moved to the beginning of the underlying-Vector. Whenever the cursor is moved (or restricted), this class' code will check for the possibility of aConcurrentModificationException.
In normal situations, when statements or method's from outside the update methods in this class, modify the underlying html-VectoraConcurrentModificationExceptionshall throw. However, whenever anHTML Node List Iteratormethod moves the cursor, the logic for checking Concurrent-Modification will reset (by setting the internal'expectedSize'field tov.size()).
This 'resetting' of the internal'expectedSize'field is precisely how to prevent an exception throw due to outside modification of the underlyingVector.- Returns:
- This returns the first "inclusive" sub-list (open-tag / start-tag up to the next close-tag) match as a vectorized-html sublist.
- See Also:
next()- Code:
- Exact Method Body:
cursor = 0; hasNextDP = hasPrevDP = null; // Calls to first, last, firstIndex, or lastIndex "reset" the CME Monitor-Logic expectedSize = v.size(); return next();
-
last
public java.util.Vector<HTMLNode> last()
This adds to theListIterator<E>class by providing alast()method that moves thisIteratorto the last match that is found in the underlying html-Vector. The internal-cursorwill be moved directly to the end of theVector.
Modified Return-Value:
If the underlying web-pageVectorhas been modified, then this method shall return the updated first match. There is no "match memory." Rather, if the underlyingVectorchanges, further calls tonext(), previous(), first()andlast()would also change.
Cursor Reset Method:
This method is (somewhat / sort-of) of a Reset-Method - because the internal-cursoris moved to the beginning of the underlying-Vector. Whenever the cursor is moved (or restricted), this class' code will check for the possibility of aConcurrentModificationException.
In normal situations, when statements or method's from outside the update methods in this class, modify the underlying html-VectoraConcurrentModificationExceptionshall throw. However, whenever anHTML Node List Iteratormethod moves the cursor, the logic for checking Concurrent-Modification will reset (by setting the internal'expectedSize'field tov.size()).
This 'resetting' of the internal'expectedSize'field is precisely how to prevent an exception throw due to outside modification of the underlyingVector.- Returns:
- This returns the last "inclusive" sub-list (open-tag / start-tag up to the next close-tag) match as an vectorized-html sublist.
- See Also:
previous()- Code:
- Exact Method Body:
cursor = v.size() - 1; hasNextDP = hasPrevDP = null; // Calls to first, last, firstIndex, or lastIndex "reset" the CME Monitor-Logic expectedSize = v.size(); return previous();
-
previousIndex
public int previousIndex()
The veracity of using this method has been eclipsed by methodpublic previoustDotPair(). Nothing problematic should happen, that is unless you forget that thisIteratoris an 'inclusive'Iterator. The word "Inclusive" is intended to indicate that a 'range' or 'sublist' (demarcated by a'start'and'end'Vector-index pair) are involved. This is usually-but-not-always expressed using an instance of class'DotPair'. The starting and ending indices are meant to point to HTML opening and closing element tags such as:<DIV>and</DIV>, or maybe<A>and</A>
Because this method only returns a single integer, and that is the index of the previous opening HTML Tag matching the iterator's constraints (but leaves off the closing-tag) this method'previousIndex()'may seem out of place.- Returns:
- Returns the index of the beginning of the previous matched sub-section.
- Code:
- Exact Method Body:
return previousDotPair().start;
-
nextIndex
public int nextIndex()
The veracity of using this method has been eclipsed by methodpublic nextDotPair()Nothing problematic should happen, that is unless you forget that thisIteratoris an 'inclusive'Iterator. The word "Inclusive" is intended to indicate that a 'range' or 'sublist' (demarcated by a'start'and'end'Vector-index pair) are involved. This is usually-but-not-always expressed using an instance of class'DotPair'. The starting and ending indices are meant to point to HTML opening and closing element tags such as:<DIV>and</DIV>, or maybe<A>and</A>
Because this method only returns a single integer, and that is the index of the next opening HTML Tag matching the iterator's constraints (but leaves off the closing-tag) this method'nextIndex()'may seem out of place.- Returns:
- Returns the index of the beginning of the next matched sub-section.
- Code:
- Exact Method Body:
return nextDotPair().start;
-
-