tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/source/SourceStringSearch.java
changeset 56 aa2539c91954
parent 54 a151135b0cf9
child 60 e54443a6878c
child 62 1c2bb2fc7c87
--- a/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/source/SourceStringSearch.java	Wed Sep 29 17:45:35 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,267 +0,0 @@
-/*
-* Copyright (c) 2008 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:
-*
-* String search algorithm
-*
-*/
-package com.nokia.tracecompiler.source;
-
-import java.util.List;
-
-/**
- * String search algorithm
- * 
- */
-public class SourceStringSearch extends SourceSearch {
-
-	/**
-	 * String to be searched from the source.
-	 */
-	private String searchString;
-
-	/**
-	 * Number of different characters in source file alphabet. Assumes that
-	 * 8-bit encoding is used
-	 */
-	private final static int CHARACTER_COUNT = 256; // CodForChk_Dis_Magic
-
-	/**
-	 * Mask for bad character shifts (0xFF)
-	 */
-	private static final int BAD_CHARACTER_MASK = 0xFF; // CodForChk_Dis_Magic
-
-	/**
-	 * String search shifts.
-	 */
-	private int[] badCharacterShifts = new int[CHARACTER_COUNT];
-
-	/**
-	 * User data associated with search
-	 */
-	private Object searchData;
-
-	/**
-	 * Creates a new string search
-	 * 
-	 * @param parser
-	 *            the parser containing the source to be searched
-	 * @param searchString
-	 *            the string to be searched
-	 * @param startOffset
-	 *            offset to the start of search
-	 * @param endOffset
-	 *            offset to end of search or -1 for rest of the document
-	 * @param flags
-	 *            the search flags
-	 */
-	public SourceStringSearch(SourceParser parser, String searchString,
-			int startOffset, int endOffset, int flags) {
-		super(parser, startOffset, endOffset, flags);
-		setSearchString(searchString);
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see com.nokia.tracecompiler.source.SourceSearch#findNext()
-	 */
-	@Override
-	public int findNext() {
-		try {
-			SourceDocumentInterface source = parser.getSource();
-			int stringIndex = searchString.length() - 1;
-			boolean found = false;
-			while (!found && searchIndex + stringIndex < searchEnd) {
-				char dataChar;
-				char searchChar;
-				boolean match = false;
-				do {
-					dataChar = source.getChar(searchIndex + stringIndex);
-					searchChar = searchString.charAt(stringIndex);
-					if ((flags & SourceParser.IGNORE_CASE) != 0) {
-						searchChar = Character.toLowerCase(searchChar);
-						dataChar = Character.toLowerCase(dataChar);
-					}
-					if (searchChar == '?' || searchChar == dataChar) {
-						match = true;
-						stringIndex--;
-					} else {
-						match = false;
-					}
-				} while (match && stringIndex >= 0);
-				// If string was not found, resets index and skips according
-				// to the shift table
-				if (stringIndex < 0) {
-					found = true;
-					// Checks the previous character if match beginning is set
-					if ((flags & SourceParser.MATCH_WORD_BEGINNING) != 0) {
-						if ((searchIndex > 0)
-								&& isPartOfWord(source.getChar(searchIndex - 1))) {
-							found = false;
-						}
-					}
-					// Checks the character after data if match end is set
-					if (found && ((flags & SourceParser.MATCH_WORD_END) != 0)) {
-						if (((searchIndex + searchString.length()) < source
-								.getLength())
-								&& isPartOfWord(source.getChar(searchIndex
-										+ searchString.length()))) {
-							found = false;
-						}
-					}
-				}
-				if (!found) {
-					int diff = searchString.length() - 1 - stringIndex;
-					stringIndex = searchString.length() - 1;
-					int skip;
-
-					if (dataChar > badCharacterShifts.length - 1) {
-						skip = 1;
-					} else {
-						skip = badCharacterShifts[dataChar] - diff;
-						if (skip <= 0) {
-							skip = 1;
-						}
-					}
-
-					searchIndex += skip;
-					skipExcludedArea();
-				}
-			}
-			if (!found) {
-				searchIndex = -1;
-			}
-		} catch (SourceParserException e) {
-			searchIndex = -1;
-		}
-		int ret = searchIndex;
-		if (searchIndex != -1) {
-			searchIndex += searchString.length();
-		}
-		return ret;
-	}
-
-	/**
-	 * Checks if the character is part of a word
-	 * 
-	 * @param c
-	 *            the character to be checked
-	 * @return true if part of word
-	 */
-	private boolean isPartOfWord(char c) {
-		return Character.isLetterOrDigit(c) || c == '_';
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see com.nokia.tracecompiler.source.SourceSearch#findAll(java.util.List)
-	 */
-	@Override
-	public void findAll(List<Integer> list) throws SourceParserException {
-		resetSearch(0, -1);
-		int index;
-		do {
-			index = findNext();
-			if (index > 0) {
-				list.add(new Integer(index));
-			}
-		} while (index > 0);
-	}
-
-	/**
-	 * Changes the search string
-	 * 
-	 * @param searchString
-	 *            the string to be searched
-	 */
-	public void setSearchString(String searchString) {
-		this.searchString = searchString;
-		int length = searchString.length();
-		// Elements not found in the string get the maximum shift distance
-		for (int i = 0; i < badCharacterShifts.length; i++) {
-			badCharacterShifts[i] = searchString.length();
-		}
-		// Characters of the search string are mapped into the
-		// shift distances array. If a character is found multiple
-		// times, the smallest shitft distance is stored
-		for (int i = 0; i < searchString.length() - 1; i++) {
-			if ((flags & SourceParser.IGNORE_CASE) != 0) {
-				badCharacterShifts[Character
-						.toLowerCase(searchString.charAt(i))
-						& BAD_CHARACTER_MASK] = length - i - 1;
-
-			} else {
-				badCharacterShifts[searchString.charAt(i) & BAD_CHARACTER_MASK] = length
-						- i - 1;
-			}
-		}
-	}
-
-	/**
-	 * Returns the search string
-	 * 
-	 * @return the string
-	 */
-	public String getSearchString() {
-		return searchString;
-	}
-
-	/**
-	 * Checks if the given string matches the search string
-	 * 
-	 * @param string
-	 *            the string
-	 * @return true if they match
-	 */
-	public boolean isSearchStringMatch(String string) {
-		int index = 0;
-		boolean match = true;
-		while (index < string.length() && match) {
-			char dataChar = string.charAt(index);
-			char searchChar = searchString.charAt(index);
-			if ((flags & SourceParser.IGNORE_CASE) != 0) {
-				searchChar = Character.toLowerCase(searchChar);
-				dataChar = Character.toLowerCase(dataChar);
-			}
-			if (searchChar == '?' || searchChar == dataChar) {
-				index++;
-			} else {
-				match = false;
-			}
-		}
-		return match;
-	}
-
-	/**
-	 * Sets the user variable associated with this searcher
-	 * 
-	 * @param data
-	 *            the variable
-	 */
-	public void setSearchData(Object data) {
-		searchData = data;
-	}
-
-	/**
-	 * Gets the user variable associated with this searcher
-	 * 
-	 * @return the variable
-	 */
-	public Object getSearchData() {
-		return searchData;
-	}
-
-}
\ No newline at end of file