Mercurial > hg4j
comparison src/org/tmatesoft/hg/internal/IntMap.java @ 281:81e9a3c9bafe
Utilize IntMap when caching manifest revisions
author | Artem Tikhomirov <tikhomirov.artem@gmail.com> |
---|---|
date | Fri, 02 Sep 2011 13:59:21 +0200 |
parents | 55fad5e0e98b |
children | ee8264d80747 2e402c12ebc6 |
comparison
equal
deleted
inserted
replaced
280:35125450c804 | 281:81e9a3c9bafe |
---|---|
107 if (ix >= 0) { | 107 if (ix >= 0) { |
108 return (V) values[ix]; | 108 return (V) values[ix]; |
109 } | 109 } |
110 return null; | 110 return null; |
111 } | 111 } |
112 | |
113 public void remove(int key) { | |
114 int ix = binarySearch(keys, size, key); | |
115 if (ix >= 0) { | |
116 if (ix <= size - 1) { | |
117 System.arraycopy(keys, ix+1, keys, ix, size - ix - 1); | |
118 System.arraycopy(values, ix+1, values, ix, size - ix - 1); | |
119 } // if ix points to last element, no reason to attempt a copy | |
120 size--; | |
121 keys[size] = 0; | |
122 values[size] = null; | |
123 } | |
124 } | |
125 | |
126 /** | |
127 * Forget first N entries (in natural order) in the map. | |
128 */ | |
129 @Experimental | |
130 public void removeFromStart(int count) { | |
131 if (count > 0 && count <= size) { | |
132 if (count < size) { | |
133 System.arraycopy(keys, count, keys, 0, size - count); | |
134 System.arraycopy(values, count, values, 0, size - count); | |
135 } | |
136 for (int i = size - count; i < size; i++) { | |
137 keys[i] = 0; | |
138 values[i] = null; | |
139 } | |
140 size -= count; | |
141 } | |
142 } | |
143 | |
144 | |
112 | 145 |
113 // copy of Arrays.binarySearch, with upper search limit as argument | 146 // copy of Arrays.binarySearch, with upper search limit as argument |
114 private static int binarySearch(int[] a, int high, int key) { | 147 private static int binarySearch(int[] a, int high, int key) { |
115 int low = 0; | 148 int low = 0; |
116 high--; | 149 high--; |