diff -r ca8a1b6995f6 -r 52e343bb8f80 tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/source/SourceSearch.java --- a/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/source/SourceSearch.java Tue Aug 31 16:45:49 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,178 +0,0 @@ -/* -* Copyright (c) 2007 Nokia Corporation and/or its subsidiary(-ies). -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - initial contribution. -* -* Contributors: -* -* Description: -* -* Base class for source search classes -* -*/ -package com.nokia.tracecompiler.source; - -import java.util.List; - -/** - * Base class for source search classes. - * - */ -public abstract class SourceSearch { - - /** - * Source parser - */ - protected final SourceParser parser; - - /** - * Current index within data during search - */ - protected int searchIndex; - - /** - * End index for search - */ - protected int searchEnd; - - /** - * Index of the next excluded area during search. - */ - protected int searchExcludedIndex; - - /** - * Search flags - */ - protected int flags; - - /** - * Creates a new search - * - * @param parser - * the parser containing the source - * @param startOffset - * offset to the start of search - * @param endOffset - * offset to end of search or -1 for rest of the document - * @param flags - * search flags - */ - protected SourceSearch(SourceParser parser, int startOffset, int endOffset, - int flags) { - this.parser = parser; - this.flags = flags; - resetSearch(startOffset, endOffset); - } - - /** - * Resets the current search with a new offset - * - * @param startOffset - * the offset to the start of search - * @param endOffset - * offset to end of search or -1 for rest of the document - */ - public void resetSearch(int startOffset, int endOffset) { - searchIndex = startOffset; - searchEnd = endOffset == -1 ? parser.getDataLength() : endOffset; - // Calculates the starting position for the search based on the - // offset and excluded areas - int excluded = parser.findExcludedAreaIndex(startOffset); - if (excluded >= 0) { - SourceExcludedArea area = parser.getExcludedAreas().get(excluded); - searchIndex = area.getOffset() + area.getLength(); - if (excluded < parser.getExcludedAreas().size() - 1) { - searchExcludedIndex = excluded + 1; - } else { - searchExcludedIndex = -1; - } - } else { - // If binarySearch returns < 0, startIndex was between some - // excluded areas. - searchExcludedIndex = -1 - excluded; - if (searchExcludedIndex > parser.getExcludedAreas().size()) { - searchExcludedIndex = -1; - } - } - skipNonExcludedAreas(); - } - - /** - * Changes the index to point behind an excluded area if current index is - * within one. - */ - protected void skipExcludedArea() { - // If data index is within an excluded area, it is moved to end of - // it and the next excluded area is selected - boolean changedExcludedArea; - do { - // If the excluded area changes, the flag is set and the next - // excluded area is also checked. Otherwise the excluded area index - // gets left behind if the search index jumps past multiple excluded - // areas - changedExcludedArea = false; - if (searchExcludedIndex >= 0 - && searchExcludedIndex < parser.getExcludedAreas().size()) { - SourceExcludedArea area = parser.getExcludedAreas().get( - searchExcludedIndex); - if (area.getOffset() <= searchIndex) { - // If the search offset has skipped past an excluded area, - // the index is not changed - if (area.getOffset() + area.getLength() > searchIndex) { - searchIndex = area.getOffset() + area.getLength(); - } - searchExcludedIndex++; - skipNonExcludedAreas(); - changedExcludedArea = true; - } - } - } while (changedExcludedArea); - } - - /** - * Skips past excluded areas which are not actually excluded due to flags - */ - private void skipNonExcludedAreas() { - if (searchExcludedIndex >= 0 - && searchExcludedIndex < parser.getExcludedAreas().size()) { - boolean notExcluded = true; - do { - // If an excluded area is not excluded due to flags, - // the excluded area index is moved past that area - SourceExcludedArea area = parser.getExcludedAreas().get( - searchExcludedIndex); - if (!SourceParser.isExcluded(area.getType(), flags)) { - searchExcludedIndex++; - } else { - notExcluded = false; - } - } while (notExcluded - && searchExcludedIndex < parser.getExcludedAreas().size()); - } - } - - /** - * Returns the next occurence - * - * @return the index or -1 - */ - public abstract int findNext(); - - /** - * Finds all occurences - * - * @param list - * the list where the data is stored - * @throws SourceParserException - * if search fails - */ - public abstract void findAll(List list) - throws SourceParserException; - -} \ No newline at end of file