int index = indexOf(entry.getHash()); BasicEList<Entry<K, V>> eList = entryData[index]; if (eList == null)
/** * @since 2.7 */ protected class DelegateEObjectContainmentWithInverseEList<E extends Object & Entry<K, V>> extends DelegateEObjectContainmentEList<E> { private static final long serialVersionUID = 1L; protected final int inverseFeatureID; public DelegateEObjectContainmentWithInverseEList(Class<?> entryClass, InternalEObject owner, int featureID, int inverseFeatureID) { super(entryClass, owner, featureID); this.inverseFeatureID = inverseFeatureID; } @Override protected boolean hasNavigableInverse() { return true; } @Override public int getInverseFeatureID() { return inverseFeatureID; } @Override public Class<?> getInverseFeatureClass() { return dataClass; } }
/** * @since 2.7 */ protected class DelegateEObjectContainmentWithInverseEList<E extends Object & Entry<K, V>> extends DelegateEObjectContainmentEList<E> { private static final long serialVersionUID = 1L; protected final int inverseFeatureID; public DelegateEObjectContainmentWithInverseEList(Class<?> entryClass, InternalEObject owner, int featureID, int inverseFeatureID) { super(entryClass, owner, featureID); this.inverseFeatureID = inverseFeatureID; } @Override protected boolean hasNavigableInverse() { return true; } @Override public int getInverseFeatureID() { return inverseFeatureID; } @Override public Class<?> getInverseFeatureClass() { return dataClass; } }
public int indexOfKey(Object key) { if (useEqualsForKey() && key != null) { for (int i = 0, size = delegateEList.size(); i < size; ++i) { Entry<K, V> entry = delegateEList.get(i); if (key.equals(entry.getKey())) { return i; } } } else { for (int i = 0, size = delegateEList.size(); i < size; ++i) { Entry<K, V> entry = delegateEList.get(i); if (key == entry.getKey()) { return i; } } } return -1; }
@Override protected void ensureEntryDataExists() { if (entryData == null) { // Ensure that this race condition is thread safe; it doesn't matter who wins the race. // BasicEList<Entry<String, String>> [] result = newEntryData(2 * size + 1); for (Entry<String, String> entry : delegateEList) { int hash = entry.getHash(); int index = (hash & 0x7FFFFFFF) % result.length; BasicEList<Entry<String, String>> eList = result[index]; if (eList == null) { eList = result[index] = newList(); } eList.add(entry); } entryData = result; } } };
/** * Adds the new entry to the map. * @param entry the new entry. */ protected void doPut(Entry<K, V> entry) { if (entryData == null) { ++modCount; ++size; } else { int hash = entry.getHash(); grow(size + 1); int index = indexOf(hash); BasicEList<Entry<K, V>> eList = entryData[index]; if (eList == null) { eList = entryData[index] = newList(); } eList.add(entry); ++size; didAdd(entry); } }
@Override protected void ensureEntryDataExists() { if (entryData == null) { // Ensure that this race condition is thread safe; it doesn't matter who wins the race. // BasicEList<Entry<String, String>> [] result = newEntryData(2 * size + 1); for (Entry<String, String> entry : delegateEList) { int hash = entry.getHash(); int index = (hash & 0x7FFFFFFF) % result.length; BasicEList<Entry<String, String>> eList = result[index]; if (eList == null) { eList = result[index] = newList(); } eList.add(entry); } entryData = result; } } };
/** * Checks for folder mappings to populate the {@link #prefixMaps prefix maps}. */ @Override protected void didAdd(Entry<URI, URI> entry) { if (((MappingEntryImpl)entry).isPrefixMapEntry) { int length = entry.getKey().segmentCount(); if (prefixMaps == null) { prefixMaps = new BasicEList<List<Entry<URI, URI>>>(); } for (int i = prefixMaps.size() - 1; i <= length; ++i) { prefixMaps.add(new BasicEList<Entry<URI, URI>>()); } prefixMaps.get(length).add(entry); } }
/** * Checks for folder mappings to populate the {@link #prefixMaps prefix maps}. */ @Override protected void didAdd(Entry<URI, URI> entry) { if (((MappingEntryImpl)entry).isPrefixMapEntry) { int length = entry.getKey().segmentCount(); if (prefixMaps == null) { prefixMaps = new BasicEList<List<Entry<URI, URI>>>(); } for (int i = prefixMaps.size() - 1; i <= length; ++i) { prefixMaps.add(new BasicEList<Entry<URI, URI>>()); } prefixMaps.get(length).add(entry); } }
/** * Removes the entry from the map. * @param entry an entry in the map. */ protected void doRemove(Entry<K, V> entry) { if (entryData == null) { ++modCount; --size; } else { Object key = entry.getKey(); int hash = entry.getHash(); int index = indexOf(hash); removeEntry(index, entryIndexForKey(index, hash, key)); didRemove(entry); } }
public V removeKey(Object key) { ensureEntryDataExists(); int hash = hashOf(key); int index = indexOf(hash); Entry<K, V> entry = entryForKey(index, hash, key); if (entry != null) { remove(entry); return entry.getValue(); } else { return null; } }
public V get(Object key) { if (size > 0) { ensureEntryDataExists(); int hash = hashOf(key); int index = indexOf(hash); Entry<K, V> entry = entryForKey(index, hash, key); if (entry != null) { @SuppressWarnings("unchecked") K object = (K)key; return resolve(object, entry.getValue()); } } return null; }
/** * Sets the value of the entry, and returns the former value. * The value is {@link #validateValue validated}. * @param entry the entry. * @param value the value. * @return the former value, or <code>null</code>. */ protected V putEntry(Entry<K, V> entry, V value) { return entry.setValue(value); }