| org.netbeans.editor.Finder
Finder | public interface Finder (Code) | | Finders are used to find some information in document without creating copy
of the data. They are used as arguments for DocCache.find() .
During the find operation the find() method of the finder is
called with some buffer of character data and some additional information.
There are two possible search directions and therefore there are two finder
types: Forward Finders (FwdFinder) and Backward Finders (BwdFinder)
author: Miloslav Metelka version: 1.00 |
Method Summary | |
public int | find(int bufferStartPos, char buffer, int offset1, int offset2, int reqPos, int limitPos) This is the most important function in finder. | public boolean | isFound() Using this function caller determines if finder found desired string. | public void | reset() Reset method is used to initialize finder. |
find | public int find(int bufferStartPos, char buffer, int offset1, int offset2, int reqPos, int limitPos)(Code) | | This is the most important function in finder. It can be called several
times if the whole search area doesn't fit in the cache buffer. Usual
forward search should look like this: int offset = reqPos -
bufferStartPos; while (offset < offset2) { if
(buffer[offset]-meets-condition) { set-found-flag return offset +
bufferStartPos; } offset++; } return offset + bufferStartPos;
Bakward search follows: int offset = reqPos - bufferStartPos while
(offset >= offset1) { if (buffer[offset]-meets-condition) {
set-found-flag return offset + bufferStartPos; } offset--; } return
offset + bufferStartPos; Caution! Nothing can be written to the
data comming in buffer to find() method because of
performance reasons these are primary document data, not a copy. Buffer
is always guaranteed to have at least one char - it is char standing at
reqPos. However there can be calls to find() when there
will be only that one character, so find() must must be
prepared for this. Unlike calling DocCache.find() the
offset1 < offset2 even for backward searches.
Parameters: bufferStartPos - begining position of the buffer (not search area). Parameters: buffer - buffer with chars to be searched Parameters: offset1 - offset of begining of searchable area in buffer. No searchingbelow this offset can be performed. Parameters: offset2 - offset of end of searchable area in buffer. No searchingbeyond this offset can be performed. Parameters: reqPos - required position. Initially it is the begining searchposition requested by caller. In subsequent calls it is thesame value as returned from previous call to find() method. Parameters: limitPos - is filled with position beyond which search cannot go. (i.e.forward: pos < limitPos and backward: pos >= limitPos)Some finders i.e. finder that tries to find some word withwhole-words-only flag turned on can benefit from thisinformation. If the searched word is at the very end of thedocument the finder wouldn't normally find it as it wouldrequest the next buffer even when the whole word was matchedbecause the finder needs to find white space to know the wordended there. However this would be beyond the search area soEOT exception would be raised. To correctly manage thissituation finder must care for limitPos. When it sees the wordand knows this is the last text in document it signals that itfound the word. in case the string was found, find() methodreturns the position (not offset) where the string starts (andmust also set some flag resulting to that isFound() method will return true). If the string was not yet found, thefunction should return position (not offset) where the nextsearch should continue. If this position is greater or equal thanlimit position (lower than limit position for backward search),searching will stop resulting in -1 as returned position. Theposition returned will be passed as reqPos in nextcall to find() method. |
isFound | public boolean isFound()(Code) | | Using this function caller determines if finder found desired string. The
returned position of find method gives the position where
the string occurs.
|
reset | public void reset()(Code) | | Reset method is used to initialize finder. It is called once at the
begining of find. To be most effective reset() is called
after both setForward() and setLimitPos()
had been called.
|
|
|