comparison src/org/tmatesoft/hg/internal/IntMap.java @ 415:ee8264d80747

Explicit constant for regular file flags, access to flags for a given file revision
author Artem Tikhomirov <tikhomirov.artem@gmail.com>
date Thu, 22 Mar 2012 18:54:11 +0100
parents 81e9a3c9bafe
children ccd7d25e5aea
comparison
equal deleted inserted replaced
414:bb278ccf9866 415:ee8264d80747
1 /* 1 /*
2 * Copyright (c) 2011 TMate Software Ltd 2 * Copyright (c) 2011-2012 TMate Software Ltd
3 * 3 *
4 * This program is free software; you can redistribute it and/or modify 4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by 5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation; version 2 of the License. 6 * the Free Software Foundation; version 2 of the License.
7 * 7 *
14 * the terms of a license other than GNU General Public License 14 * the terms of a license other than GNU General Public License
15 * contact TMate Software at support@hg4j.com 15 * contact TMate Software at support@hg4j.com
16 */ 16 */
17 package org.tmatesoft.hg.internal; 17 package org.tmatesoft.hg.internal;
18 18
19 import java.util.Iterator;
20 import java.util.Map;
21 import java.util.Map.Entry;
19 import java.util.NoSuchElementException; 22 import java.util.NoSuchElementException;
23
24 import org.tmatesoft.hg.core.Nodeid;
20 25
21 26
22 /** 27 /**
23 * Map implementation that uses plain int keys and performs with log n effectiveness. 28 * Map implementation that uses plain int keys and performs with log n effectiveness.
24 * 29 *
138 values[i] = null; 143 values[i] = null;
139 } 144 }
140 size -= count; 145 size -= count;
141 } 146 }
142 } 147 }
143 148
144 149 // document iterator is non-modifying (neither remove() nor setValue() works)
150 // perhaps, may also implement Iterable<Map.Entry> to use nice for()
151 public Iterator<Map.Entry<Integer, V>> entryIterator() {
152 class E implements Map.Entry<Integer, V> {
153 private Integer key;
154 private V value;
155
156 public Integer getKey() {
157 return key;
158 }
159
160 public V getValue() {
161 return value;
162 }
163
164 public V setValue(V value) {
165 throw new UnsupportedOperationException();
166 }
167
168 void init(Integer k, V v) {
169 key = k;
170 value = v;
171 }
172 }
173
174 return new Iterator<Map.Entry<Integer, V>>() {
175 private int i = 0;
176 private final E entry = new E();
177 private final int _size;
178 private final int[] _keys;
179 private final Object[] _values;
180
181 {
182 _size = IntMap.this.size;
183 _keys = IntMap.this.keys;
184 _values = IntMap.this.values;
185 }
186
187 public boolean hasNext() {
188 return i < _size;
189 }
190
191 public Entry<Integer, V> next() {
192 if (i >= _size) {
193 throw new NoSuchElementException();
194 }
195 @SuppressWarnings("unchecked")
196 V val = (V) _values[i];
197 entry.init(_keys[i], val);
198 i++;
199 return entry;
200 }
201
202 public void remove() {
203 throw new UnsupportedOperationException();
204 }
205 };
206 }
207
208 public Map<Integer, ? super V> fill(Map<Integer, ? super V> map) {
209 for (Iterator<Map.Entry<Integer, V>> it = entryIterator(); it.hasNext(); ) {
210 Map.Entry<Integer, V> next = it.next();
211 map.put(next.getKey(), next.getValue());
212 }
213 return map;
214 }
145 215
146 // copy of Arrays.binarySearch, with upper search limit as argument 216 // copy of Arrays.binarySearch, with upper search limit as argument
147 private static int binarySearch(int[] a, int high, int key) { 217 private static int binarySearch(int[] a, int high, int key) {
148 int low = 0; 218 int low = 0;
149 high--; 219 high--;