mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-09-05 14:43:36 +02:00
[297535] Optimization to DsfServicesTracker
This commit is contained in:
parent
dde65a6ae5
commit
ceaa353fb9
1 changed files with 14 additions and 9 deletions
|
@ -57,28 +57,33 @@ public class DsfServicesTracker {
|
||||||
return ("(" + IDsfService.PROP_SESSION_ID + "=" + sessionId + ")").intern(); //$NON-NLS-1$//$NON-NLS-2$ //$NON-NLS-3$
|
return ("(" + IDsfService.PROP_SESSION_ID + "=" + sessionId + ")").intern(); //$NON-NLS-1$//$NON-NLS-2$ //$NON-NLS-3$
|
||||||
}
|
}
|
||||||
|
|
||||||
private static class ServiceKey
|
final private static class ServiceKey
|
||||||
{
|
{
|
||||||
String fClassName;
|
private final String fClassName;
|
||||||
String fFilter;
|
private final String fFilter;
|
||||||
|
private final int fHashCode;
|
||||||
|
private final String fHashString;
|
||||||
|
|
||||||
|
|
||||||
public ServiceKey(Class<?> clazz, String filter) {
|
public ServiceKey(Class<?> clazz, String filter) {
|
||||||
fClassName = clazz != null ? clazz.getName() : null;
|
fClassName = clazz != null ? clazz.getName() : null;
|
||||||
fFilter = filter;
|
fFilter = filter;
|
||||||
|
fHashString = 'C' + (fClassName == null ? "" : fClassName) + //$NON-NLS-1$
|
||||||
|
'F' + (fFilter == null ? "" : fFilter); //$NON-NLS-1$
|
||||||
|
fHashCode = fHashString.hashCode();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean equals(Object other) {
|
public boolean equals(Object other) {
|
||||||
// I guess this doesn't have to assume fFilter can be null, but oh well.
|
// hashcodes are not guaranteed to be unique, but objects that are equal must have the same hashcode
|
||||||
|
// thus we can optimize by first comparing hashcodes
|
||||||
return other instanceof ServiceKey &&
|
return other instanceof ServiceKey &&
|
||||||
((fClassName == null && ((ServiceKey)other).fClassName == null) ||
|
((((ServiceKey)other).fHashCode == this.fHashCode) && (((ServiceKey)other).fHashString.equals(this.fHashString)));
|
||||||
(fClassName != null && fClassName.equals(((ServiceKey)other).fClassName))) &&
|
|
||||||
((fFilter == null && ((ServiceKey)other).fFilter == null) ||
|
|
||||||
(fFilter != null && fFilter.equals(((ServiceKey)other).fFilter)));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int hashCode() {
|
public int hashCode() {
|
||||||
return (fClassName == null ? 0 : fClassName.hashCode()) + (fFilter == null ? 0 : fFilter.hashCode());
|
return fHashCode;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue