cdt/cdt_5_0_x/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/MacroEntry.java
author dadubrow
Tue, 09 Jun 2009 15:42:55 -0500
changeset 26 8717e2008e00
parent 0 0e6d23e2b466
permissions -rw-r--r--
optimize slow loop checking for path entry duplicates
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
0e6d23e2b466 DP tools release version Revision: 200912
Deepak Modgil <Deepak.Modgil@Nokia.com>
parents:
diff changeset
     1
/*******************************************************************************
0e6d23e2b466 DP tools release version Revision: 200912
Deepak Modgil <Deepak.Modgil@Nokia.com>
parents:
diff changeset
     2
 * Copyright (c) 2000, 2006 QNX Software Systems and others.
0e6d23e2b466 DP tools release version Revision: 200912
Deepak Modgil <Deepak.Modgil@Nokia.com>
parents:
diff changeset
     3
 * All rights reserved. This program and the accompanying materials
0e6d23e2b466 DP tools release version Revision: 200912
Deepak Modgil <Deepak.Modgil@Nokia.com>
parents:
diff changeset
     4
 * are made available under the terms of the Eclipse Public License v1.0
0e6d23e2b466 DP tools release version Revision: 200912
Deepak Modgil <Deepak.Modgil@Nokia.com>
parents:
diff changeset
     5
 * which accompanies this distribution, and is available at
0e6d23e2b466 DP tools release version Revision: 200912
Deepak Modgil <Deepak.Modgil@Nokia.com>
parents:
diff changeset
     6
 * http://www.eclipse.org/legal/epl-v10.html
0e6d23e2b466 DP tools release version Revision: 200912
Deepak Modgil <Deepak.Modgil@Nokia.com>
parents:
diff changeset
     7
 *
0e6d23e2b466 DP tools release version Revision: 200912
Deepak Modgil <Deepak.Modgil@Nokia.com>
parents:
diff changeset
     8
 * Contributors:
0e6d23e2b466 DP tools release version Revision: 200912
Deepak Modgil <Deepak.Modgil@Nokia.com>
parents:
diff changeset
     9
 *     QNX Software Systems - Initial API and implementation
0e6d23e2b466 DP tools release version Revision: 200912
Deepak Modgil <Deepak.Modgil@Nokia.com>
parents:
diff changeset
    10
 *******************************************************************************/
0e6d23e2b466 DP tools release version Revision: 200912
Deepak Modgil <Deepak.Modgil@Nokia.com>
parents:
diff changeset
    11
package org.eclipse.cdt.internal.core.model;
0e6d23e2b466 DP tools release version Revision: 200912
Deepak Modgil <Deepak.Modgil@Nokia.com>
parents:
diff changeset
    12
0e6d23e2b466 DP tools release version Revision: 200912
Deepak Modgil <Deepak.Modgil@Nokia.com>
parents:
diff changeset
    13
import org.eclipse.cdt.core.model.IMacroEntry;
0e6d23e2b466 DP tools release version Revision: 200912
Deepak Modgil <Deepak.Modgil@Nokia.com>
parents:
diff changeset
    14
import org.eclipse.cdt.core.model.IPathEntry;
0e6d23e2b466 DP tools release version Revision: 200912
Deepak Modgil <Deepak.Modgil@Nokia.com>
parents:
diff changeset
    15
import org.eclipse.core.runtime.IPath;
0e6d23e2b466 DP tools release version Revision: 200912
Deepak Modgil <Deepak.Modgil@Nokia.com>
parents:
diff changeset
    16
0e6d23e2b466 DP tools release version Revision: 200912
Deepak Modgil <Deepak.Modgil@Nokia.com>
parents:
diff changeset
    17
public class MacroEntry extends APathEntry implements IMacroEntry {
0e6d23e2b466 DP tools release version Revision: 200912
Deepak Modgil <Deepak.Modgil@Nokia.com>
parents:
diff changeset
    18
0e6d23e2b466 DP tools release version Revision: 200912
Deepak Modgil <Deepak.Modgil@Nokia.com>
parents:
diff changeset
    19
	String macroName;
0e6d23e2b466 DP tools release version Revision: 200912
Deepak Modgil <Deepak.Modgil@Nokia.com>
parents:
diff changeset
    20
	String macroValue;
0e6d23e2b466 DP tools release version Revision: 200912
Deepak Modgil <Deepak.Modgil@Nokia.com>
parents:
diff changeset
    21
0e6d23e2b466 DP tools release version Revision: 200912
Deepak Modgil <Deepak.Modgil@Nokia.com>
parents:
diff changeset
    22
	public MacroEntry (IPath path, IPath baseRef, String macroName, String macroValue, IPath[] exclusionPatterns, boolean isExported) {
0e6d23e2b466 DP tools release version Revision: 200912
Deepak Modgil <Deepak.Modgil@Nokia.com>
parents:
diff changeset
    23
		super(IPathEntry.CDT_MACRO, null, baseRef, path, exclusionPatterns, isExported);
0e6d23e2b466 DP tools release version Revision: 200912
Deepak Modgil <Deepak.Modgil@Nokia.com>
parents:
diff changeset
    24
		if ( macroName == null) {
0e6d23e2b466 DP tools release version Revision: 200912
Deepak Modgil <Deepak.Modgil@Nokia.com>
parents:
diff changeset
    25
			throw new IllegalArgumentException("Macro name cannot be null"); //$NON-NLS-1$
0e6d23e2b466 DP tools release version Revision: 200912
Deepak Modgil <Deepak.Modgil@Nokia.com>
parents:
diff changeset
    26
		}
0e6d23e2b466 DP tools release version Revision: 200912
Deepak Modgil <Deepak.Modgil@Nokia.com>
parents:
diff changeset
    27
		this.macroName = macroName;
0e6d23e2b466 DP tools release version Revision: 200912
Deepak Modgil <Deepak.Modgil@Nokia.com>
parents:
diff changeset
    28
		this.macroValue = macroValue == null ? "" : macroValue; //$NON-NLS-1$
0e6d23e2b466 DP tools release version Revision: 200912
Deepak Modgil <Deepak.Modgil@Nokia.com>
parents:
diff changeset
    29
	}
0e6d23e2b466 DP tools release version Revision: 200912
Deepak Modgil <Deepak.Modgil@Nokia.com>
parents:
diff changeset
    30
0e6d23e2b466 DP tools release version Revision: 200912
Deepak Modgil <Deepak.Modgil@Nokia.com>
parents:
diff changeset
    31
	/**
0e6d23e2b466 DP tools release version Revision: 200912
Deepak Modgil <Deepak.Modgil@Nokia.com>
parents:
diff changeset
    32
	 * Returns the macro name.
0e6d23e2b466 DP tools release version Revision: 200912
Deepak Modgil <Deepak.Modgil@Nokia.com>
parents:
diff changeset
    33
	 * @return String
0e6d23e2b466 DP tools release version Revision: 200912
Deepak Modgil <Deepak.Modgil@Nokia.com>
parents:
diff changeset
    34
	 */
0e6d23e2b466 DP tools release version Revision: 200912
Deepak Modgil <Deepak.Modgil@Nokia.com>
parents:
diff changeset
    35
	public String getMacroName() {
0e6d23e2b466 DP tools release version Revision: 200912
Deepak Modgil <Deepak.Modgil@Nokia.com>
parents:
diff changeset
    36
		return macroName;
0e6d23e2b466 DP tools release version Revision: 200912
Deepak Modgil <Deepak.Modgil@Nokia.com>
parents:
diff changeset
    37
	}
0e6d23e2b466 DP tools release version Revision: 200912
Deepak Modgil <Deepak.Modgil@Nokia.com>
parents:
diff changeset
    38
0e6d23e2b466 DP tools release version Revision: 200912
Deepak Modgil <Deepak.Modgil@Nokia.com>
parents:
diff changeset
    39
	/**
0e6d23e2b466 DP tools release version Revision: 200912
Deepak Modgil <Deepak.Modgil@Nokia.com>
parents:
diff changeset
    40
	 * Returns the macro value.
0e6d23e2b466 DP tools release version Revision: 200912
Deepak Modgil <Deepak.Modgil@Nokia.com>
parents:
diff changeset
    41
	 * @return String
0e6d23e2b466 DP tools release version Revision: 200912
Deepak Modgil <Deepak.Modgil@Nokia.com>
parents:
diff changeset
    42
	 */
0e6d23e2b466 DP tools release version Revision: 200912
Deepak Modgil <Deepak.Modgil@Nokia.com>
parents:
diff changeset
    43
	public String getMacroValue() {
0e6d23e2b466 DP tools release version Revision: 200912
Deepak Modgil <Deepak.Modgil@Nokia.com>
parents:
diff changeset
    44
		return macroValue;
0e6d23e2b466 DP tools release version Revision: 200912
Deepak Modgil <Deepak.Modgil@Nokia.com>
parents:
diff changeset
    45
	}
0e6d23e2b466 DP tools release version Revision: 200912
Deepak Modgil <Deepak.Modgil@Nokia.com>
parents:
diff changeset
    46
0e6d23e2b466 DP tools release version Revision: 200912
Deepak Modgil <Deepak.Modgil@Nokia.com>
parents:
diff changeset
    47
	@Override
26
8717e2008e00 optimize slow loop checking for path entry duplicates
dadubrow
parents: 0
diff changeset
    48
	public int hashCode() {
8717e2008e00 optimize slow loop checking for path entry duplicates
dadubrow
parents: 0
diff changeset
    49
		final int prime = 31;
8717e2008e00 optimize slow loop checking for path entry duplicates
dadubrow
parents: 0
diff changeset
    50
		int result = super.hashCode();
8717e2008e00 optimize slow loop checking for path entry duplicates
dadubrow
parents: 0
diff changeset
    51
		result = prime * result
8717e2008e00 optimize slow loop checking for path entry duplicates
dadubrow
parents: 0
diff changeset
    52
				+ ((macroName == null) ? 0 : macroName.hashCode());
8717e2008e00 optimize slow loop checking for path entry duplicates
dadubrow
parents: 0
diff changeset
    53
		result = prime * result
8717e2008e00 optimize slow loop checking for path entry duplicates
dadubrow
parents: 0
diff changeset
    54
				+ ((macroValue == null) ? 0 : macroValue.hashCode());
8717e2008e00 optimize slow loop checking for path entry duplicates
dadubrow
parents: 0
diff changeset
    55
		return result;
8717e2008e00 optimize slow loop checking for path entry duplicates
dadubrow
parents: 0
diff changeset
    56
	}
8717e2008e00 optimize slow loop checking for path entry duplicates
dadubrow
parents: 0
diff changeset
    57
8717e2008e00 optimize slow loop checking for path entry duplicates
dadubrow
parents: 0
diff changeset
    58
	@Override
0
0e6d23e2b466 DP tools release version Revision: 200912
Deepak Modgil <Deepak.Modgil@Nokia.com>
parents:
diff changeset
    59
	public boolean equals(Object obj) {
0e6d23e2b466 DP tools release version Revision: 200912
Deepak Modgil <Deepak.Modgil@Nokia.com>
parents:
diff changeset
    60
		if (obj instanceof IMacroEntry) {
0e6d23e2b466 DP tools release version Revision: 200912
Deepak Modgil <Deepak.Modgil@Nokia.com>
parents:
diff changeset
    61
			IMacroEntry otherEntry = (IMacroEntry)obj;
0e6d23e2b466 DP tools release version Revision: 200912
Deepak Modgil <Deepak.Modgil@Nokia.com>
parents:
diff changeset
    62
			if (!super.equals(otherEntry)) {
0e6d23e2b466 DP tools release version Revision: 200912
Deepak Modgil <Deepak.Modgil@Nokia.com>
parents:
diff changeset
    63
				return false;
0e6d23e2b466 DP tools release version Revision: 200912
Deepak Modgil <Deepak.Modgil@Nokia.com>
parents:
diff changeset
    64
			}
0e6d23e2b466 DP tools release version Revision: 200912
Deepak Modgil <Deepak.Modgil@Nokia.com>
parents:
diff changeset
    65
			if (macroName == null) {
0e6d23e2b466 DP tools release version Revision: 200912
Deepak Modgil <Deepak.Modgil@Nokia.com>
parents:
diff changeset
    66
				if (otherEntry.getMacroName() != null) {
0e6d23e2b466 DP tools release version Revision: 200912
Deepak Modgil <Deepak.Modgil@Nokia.com>
parents:
diff changeset
    67
					return false;
0e6d23e2b466 DP tools release version Revision: 200912
Deepak Modgil <Deepak.Modgil@Nokia.com>
parents:
diff changeset
    68
				}
0e6d23e2b466 DP tools release version Revision: 200912
Deepak Modgil <Deepak.Modgil@Nokia.com>
parents:
diff changeset
    69
			} else {
0e6d23e2b466 DP tools release version Revision: 200912
Deepak Modgil <Deepak.Modgil@Nokia.com>
parents:
diff changeset
    70
				if (!macroName.equals(otherEntry.getMacroName())) {
0e6d23e2b466 DP tools release version Revision: 200912
Deepak Modgil <Deepak.Modgil@Nokia.com>
parents:
diff changeset
    71
					return false;
0e6d23e2b466 DP tools release version Revision: 200912
Deepak Modgil <Deepak.Modgil@Nokia.com>
parents:
diff changeset
    72
				}
0e6d23e2b466 DP tools release version Revision: 200912
Deepak Modgil <Deepak.Modgil@Nokia.com>
parents:
diff changeset
    73
			}
0e6d23e2b466 DP tools release version Revision: 200912
Deepak Modgil <Deepak.Modgil@Nokia.com>
parents:
diff changeset
    74
			if (macroValue == null) {
0e6d23e2b466 DP tools release version Revision: 200912
Deepak Modgil <Deepak.Modgil@Nokia.com>
parents:
diff changeset
    75
				if (otherEntry.getMacroValue() != null) {
0e6d23e2b466 DP tools release version Revision: 200912
Deepak Modgil <Deepak.Modgil@Nokia.com>
parents:
diff changeset
    76
					return false;
0e6d23e2b466 DP tools release version Revision: 200912
Deepak Modgil <Deepak.Modgil@Nokia.com>
parents:
diff changeset
    77
				}
0e6d23e2b466 DP tools release version Revision: 200912
Deepak Modgil <Deepak.Modgil@Nokia.com>
parents:
diff changeset
    78
			} else {
0e6d23e2b466 DP tools release version Revision: 200912
Deepak Modgil <Deepak.Modgil@Nokia.com>
parents:
diff changeset
    79
				if (!macroValue.equals(otherEntry.getMacroValue())) {
0e6d23e2b466 DP tools release version Revision: 200912
Deepak Modgil <Deepak.Modgil@Nokia.com>
parents:
diff changeset
    80
					return false;
0e6d23e2b466 DP tools release version Revision: 200912
Deepak Modgil <Deepak.Modgil@Nokia.com>
parents:
diff changeset
    81
				}
0e6d23e2b466 DP tools release version Revision: 200912
Deepak Modgil <Deepak.Modgil@Nokia.com>
parents:
diff changeset
    82
			}
0e6d23e2b466 DP tools release version Revision: 200912
Deepak Modgil <Deepak.Modgil@Nokia.com>
parents:
diff changeset
    83
			return true;
0e6d23e2b466 DP tools release version Revision: 200912
Deepak Modgil <Deepak.Modgil@Nokia.com>
parents:
diff changeset
    84
		}
0e6d23e2b466 DP tools release version Revision: 200912
Deepak Modgil <Deepak.Modgil@Nokia.com>
parents:
diff changeset
    85
		return super.equals(obj);
0e6d23e2b466 DP tools release version Revision: 200912
Deepak Modgil <Deepak.Modgil@Nokia.com>
parents:
diff changeset
    86
	}
0e6d23e2b466 DP tools release version Revision: 200912
Deepak Modgil <Deepak.Modgil@Nokia.com>
parents:
diff changeset
    87
0e6d23e2b466 DP tools release version Revision: 200912
Deepak Modgil <Deepak.Modgil@Nokia.com>
parents:
diff changeset
    88
	/* (non-Javadoc)
0e6d23e2b466 DP tools release version Revision: 200912
Deepak Modgil <Deepak.Modgil@Nokia.com>
parents:
diff changeset
    89
	 * @see java.lang.Object#toString()
0e6d23e2b466 DP tools release version Revision: 200912
Deepak Modgil <Deepak.Modgil@Nokia.com>
parents:
diff changeset
    90
	 */
0e6d23e2b466 DP tools release version Revision: 200912
Deepak Modgil <Deepak.Modgil@Nokia.com>
parents:
diff changeset
    91
	@Override
0e6d23e2b466 DP tools release version Revision: 200912
Deepak Modgil <Deepak.Modgil@Nokia.com>
parents:
diff changeset
    92
	public String toString() {
0e6d23e2b466 DP tools release version Revision: 200912
Deepak Modgil <Deepak.Modgil@Nokia.com>
parents:
diff changeset
    93
		StringBuffer sb = new StringBuffer();
0e6d23e2b466 DP tools release version Revision: 200912
Deepak Modgil <Deepak.Modgil@Nokia.com>
parents:
diff changeset
    94
		sb.append(super.toString());
0e6d23e2b466 DP tools release version Revision: 200912
Deepak Modgil <Deepak.Modgil@Nokia.com>
parents:
diff changeset
    95
		if (macroName != null && macroName.length() > 0) {
0e6d23e2b466 DP tools release version Revision: 200912
Deepak Modgil <Deepak.Modgil@Nokia.com>
parents:
diff changeset
    96
			sb.append(" name:").append(macroName); //$NON-NLS-1$
0e6d23e2b466 DP tools release version Revision: 200912
Deepak Modgil <Deepak.Modgil@Nokia.com>
parents:
diff changeset
    97
		}
0e6d23e2b466 DP tools release version Revision: 200912
Deepak Modgil <Deepak.Modgil@Nokia.com>
parents:
diff changeset
    98
		if (macroValue != null && macroValue.length() > 0) {
0e6d23e2b466 DP tools release version Revision: 200912
Deepak Modgil <Deepak.Modgil@Nokia.com>
parents:
diff changeset
    99
			sb.append(" value:").append(macroValue); //$NON-NLS-1$
0e6d23e2b466 DP tools release version Revision: 200912
Deepak Modgil <Deepak.Modgil@Nokia.com>
parents:
diff changeset
   100
		}
0e6d23e2b466 DP tools release version Revision: 200912
Deepak Modgil <Deepak.Modgil@Nokia.com>
parents:
diff changeset
   101
		return sb.toString();
0e6d23e2b466 DP tools release version Revision: 200912
Deepak Modgil <Deepak.Modgil@Nokia.com>
parents:
diff changeset
   102
	}
0e6d23e2b466 DP tools release version Revision: 200912
Deepak Modgil <Deepak.Modgil@Nokia.com>
parents:
diff changeset
   103
}