author | timkelly |
Thu, 30 Jul 2009 11:56:23 -0500 | |
changeset 40 | eb3c938c7fef |
permissions | -rw-r--r-- |
40
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
1 |
/******************************************************************************* |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
2 |
* Copyright (c) 2000, 2005 IBM Corporation and others. |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
3 |
* All rights reserved. This program and the accompanying materials |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
4 |
* are made available under the terms of the Eclipse Public License v1.0 |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
5 |
* which accompanies this distribution, and is available at |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
6 |
* http://www.eclipse.org/legal/epl-v10.html |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
7 |
* |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
8 |
* Contributors: |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
9 |
* IBM Corporation - initial API and implementation |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
10 |
*******************************************************************************/ |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
11 |
package org.eclipse.core.internal.events; |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
12 |
|
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
13 |
import org.eclipse.core.runtime.IPath; |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
14 |
|
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
15 |
/** |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
16 |
* A specialized map that maps Node IDs to their old and new paths. |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
17 |
* Used for calculating moves during resource change notification. |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
18 |
*/ |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
19 |
public class NodeIDMap { |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
20 |
//using prime table sizes improves our hash function |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
21 |
private static final int[] SIZES = new int[] {13, 29, 71, 173, 349, 733, 1511, 3079, 6133, 16381, 32653, 65543, 131111, 262139, 524287, 1051601}; |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
22 |
private static final double LOAD_FACTOR = 0.75; |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
23 |
//2^32 * golden ratio |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
24 |
private static final long LARGE_NUMBER = 2654435761L; |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
25 |
|
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
26 |
int sizeOffset = 0; |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
27 |
protected int elementCount = 0; |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
28 |
protected long[] ids; |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
29 |
protected IPath[] oldPaths; |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
30 |
protected IPath[] newPaths; |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
31 |
|
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
32 |
/** |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
33 |
* Creates a new node ID map of default capacity. |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
34 |
*/ |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
35 |
public NodeIDMap() { |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
36 |
this.sizeOffset = 0; |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
37 |
this.ids = new long[SIZES[sizeOffset]]; |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
38 |
this.oldPaths = new IPath[SIZES[sizeOffset]]; |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
39 |
this.newPaths = new IPath[SIZES[sizeOffset]]; |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
40 |
} |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
41 |
|
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
42 |
/** |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
43 |
* The array isn't large enough so double its size and rehash |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
44 |
* all its current values. |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
45 |
*/ |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
46 |
protected void expand() { |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
47 |
int newLength; |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
48 |
try { |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
49 |
newLength = SIZES[++sizeOffset]; |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
50 |
} catch (ArrayIndexOutOfBoundsException e) { |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
51 |
//will only occur if there are > 1 million elements in delta |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
52 |
newLength = ids.length * 2; |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
53 |
} |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
54 |
long[] grownIds = new long[newLength]; |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
55 |
IPath[] grownOldPaths = new IPath[newLength]; |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
56 |
IPath[] grownNewPaths = new IPath[newLength]; |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
57 |
int maxArrayIndex = newLength - 1; |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
58 |
for (int i = 0; i < ids.length; i++) { |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
59 |
long id = ids[i]; |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
60 |
if (id != 0) { |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
61 |
int hash = hashFor(id, newLength); |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
62 |
while (grownIds[hash] != 0) { |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
63 |
hash++; |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
64 |
if (hash > maxArrayIndex) |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
65 |
hash = 0; |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
66 |
} |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
67 |
grownIds[hash] = id; |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
68 |
grownOldPaths[hash] = oldPaths[i]; |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
69 |
grownNewPaths[hash] = newPaths[i]; |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
70 |
} |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
71 |
} |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
72 |
ids = grownIds; |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
73 |
oldPaths = grownOldPaths; |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
74 |
newPaths = grownNewPaths; |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
75 |
} |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
76 |
|
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
77 |
/** |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
78 |
* Returns the index of the given element in the map. If not |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
79 |
* found, returns -1. |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
80 |
*/ |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
81 |
private int getIndex(long searchID) { |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
82 |
final int len = ids.length; |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
83 |
int hash = hashFor(searchID, len); |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
84 |
|
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
85 |
// search the last half of the array |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
86 |
for (int i = hash; i < len; i++) { |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
87 |
if (ids[i] == searchID) |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
88 |
return i; |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
89 |
// marker info not found so return -1 |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
90 |
if (ids[i] == 0) |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
91 |
return -1; |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
92 |
} |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
93 |
|
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
94 |
// search the beginning of the array |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
95 |
for (int i = 0; i < hash - 1; i++) { |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
96 |
if (ids[i] == searchID) |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
97 |
return i; |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
98 |
// marker info not found so return -1 |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
99 |
if (ids[i] == 0) |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
100 |
return -1; |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
101 |
} |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
102 |
// marker info not found so return -1 |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
103 |
return -1; |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
104 |
} |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
105 |
|
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
106 |
/** |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
107 |
* Returns the new path location for the given ID, or null |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
108 |
* if no new path is available. |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
109 |
*/ |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
110 |
public IPath getNewPath(long nodeID) { |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
111 |
int index = getIndex(nodeID); |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
112 |
if (index == -1) |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
113 |
return null; |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
114 |
return newPaths[index]; |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
115 |
} |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
116 |
|
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
117 |
/** |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
118 |
* Returns the old path location for the given ID, or null |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
119 |
* if no old path is available. |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
120 |
*/ |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
121 |
public IPath getOldPath(long nodeID) { |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
122 |
int index = getIndex(nodeID); |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
123 |
if (index == -1) |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
124 |
return null; |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
125 |
return oldPaths[index]; |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
126 |
} |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
127 |
|
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
128 |
private int hashFor(long id, int size) { |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
129 |
//Knuth's hash function from Art of Computer Programming section 6.4 |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
130 |
return (int) Math.abs((id * LARGE_NUMBER) % size); |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
131 |
} |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
132 |
|
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
133 |
/** |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
134 |
* Returns true if there are no elements in the map, and |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
135 |
* false otherwise. |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
136 |
*/ |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
137 |
public boolean isEmpty() { |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
138 |
return elementCount == 0; |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
139 |
} |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
140 |
|
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
141 |
/** |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
142 |
* Adds the given path mappings to the map. If either oldPath |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
143 |
* or newPath is null, they are ignored (old map values are not overwritten). |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
144 |
*/ |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
145 |
private void put(long id, IPath oldPath, IPath newPath) { |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
146 |
if (oldPath == null && newPath == null) |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
147 |
return; |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
148 |
int hash = hashFor(id, ids.length); |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
149 |
|
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
150 |
// search for an empty slot at the end of the array |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
151 |
for (int i = hash; i < ids.length; i++) { |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
152 |
if (ids[i] == id) { |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
153 |
//replace value for existing entry |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
154 |
if (oldPath != null) |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
155 |
oldPaths[i] = oldPath; |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
156 |
if (newPath != null) |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
157 |
newPaths[i] = newPath; |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
158 |
return; |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
159 |
} |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
160 |
if (ids[i] == 0) { |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
161 |
//add a new entry to the map |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
162 |
ids[i] = id; |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
163 |
if (oldPath != null) |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
164 |
oldPaths[i] = oldPath; |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
165 |
if (newPath != null) |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
166 |
newPaths[i] = newPath; |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
167 |
elementCount++; |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
168 |
// grow if necessary |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
169 |
if (shouldGrow()) |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
170 |
expand(); |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
171 |
return; |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
172 |
} |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
173 |
} |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
174 |
|
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
175 |
// search for an empty slot at the beginning of the array |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
176 |
for (int i = 0; i < hash - 1; i++) { |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
177 |
if (ids[i] == id) { |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
178 |
//replace value for existing entry |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
179 |
if (oldPath != null) |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
180 |
oldPaths[i] = oldPath; |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
181 |
if (newPath != null) |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
182 |
newPaths[i] = newPath; |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
183 |
return; |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
184 |
} |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
185 |
if (ids[i] == 0) { |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
186 |
//add a new entry to the map |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
187 |
ids[i] = id; |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
188 |
if (oldPath != null) |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
189 |
oldPaths[i] = oldPath; |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
190 |
if (newPath != null) |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
191 |
newPaths[i] = newPath; |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
192 |
elementCount++; |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
193 |
// grow if necessary |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
194 |
if (shouldGrow()) |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
195 |
expand(); |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
196 |
return; |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
197 |
} |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
198 |
} |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
199 |
// if we didn't find a free slot, then try again with the expanded set |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
200 |
expand(); |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
201 |
put(id, oldPath, newPath); |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
202 |
} |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
203 |
|
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
204 |
/** |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
205 |
* Adds an entry for a node's old path |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
206 |
*/ |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
207 |
public void putOldPath(long id, IPath path) { |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
208 |
put(id, path, null); |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
209 |
} |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
210 |
|
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
211 |
/** |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
212 |
* Adds an entry for a node's old path |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
213 |
*/ |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
214 |
public void putNewPath(long id, IPath path) { |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
215 |
put(id, null, path); |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
216 |
} |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
217 |
|
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
218 |
private boolean shouldGrow() { |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
219 |
return elementCount > ids.length * LOAD_FACTOR; |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
220 |
} |
eb3c938c7fef
set up for custom build for logging. merged from carbide 2.1.x builds. this state is as it comes from platform. Next changelog will add the updates.
timkelly
parents:
diff
changeset
|
221 |
} |