1 38 39 40 package com.sun.xml.fastinfoset.util; 41 42 import java.util.HashMap ; 43 import java.util.Map ; 44 import com.sun.xml.fastinfoset.CommonResourceBundle; 45 46 public class FixedEntryStringIntMap extends StringIntMap { 47 48 private Entry _fixedEntry; 49 50 public FixedEntryStringIntMap(String fixedEntry, int initialCapacity, float loadFactor) { 51 super(initialCapacity, loadFactor); 52 53 final int hash = hashHash(fixedEntry.hashCode()); 55 final int tableIndex = indexFor(hash, _table.length); 56 _table[tableIndex] = _fixedEntry = new Entry(fixedEntry, hash, 0, null); 57 if (_size++ >= _threshold) { 58 resize(2 * _table.length); 59 } 60 } 61 62 public FixedEntryStringIntMap(String fixedEntry, int initialCapacity) { 63 this(fixedEntry, initialCapacity, DEFAULT_LOAD_FACTOR); 64 } 65 66 public FixedEntryStringIntMap(String fixedEntry) { 67 this(fixedEntry, DEFAULT_INITIAL_CAPACITY, DEFAULT_LOAD_FACTOR); 68 } 69 70 public final void clear() { 71 for (int i = 0; i < _table.length; i++) { 72 _table[i] = null; 73 } 74 if (_fixedEntry != null) { 75 final int tableIndex = indexFor(_fixedEntry._hash, _table.length); 76 _table[tableIndex] = _fixedEntry; 77 _fixedEntry._next = null; 78 _size = 1; 79 } 80 } 81 82 public final void setReadOnlyMap(KeyIntMap readOnlyMap, boolean clear) { 83 if (!(readOnlyMap instanceof FixedEntryStringIntMap)) { 84 throw new IllegalArgumentException (CommonResourceBundle.getInstance(). 85 getString("message.illegalClass", new Object []{readOnlyMap})); 86 } 87 88 setReadOnlyMap((FixedEntryStringIntMap)readOnlyMap, clear); 89 } 90 91 public final void setReadOnlyMap(FixedEntryStringIntMap readOnlyMap, boolean clear) { 92 _readOnlyMap = readOnlyMap; 93 if (_readOnlyMap != null) { 94 readOnlyMap.removeFixedEntry(); 95 _readOnlyMapSize = readOnlyMap.size(); 96 if (clear) { 97 clear(); 98 } 99 } else { 100 _readOnlyMapSize = 0; 101 } 102 } 103 104 private final void removeFixedEntry() { 105 if (_fixedEntry != null) { 106 final int tableIndex = indexFor(_fixedEntry._hash, _table.length); 107 final Entry firstEntry = _table[tableIndex]; 108 if (firstEntry == _fixedEntry) { 109 _table[tableIndex] = _fixedEntry._next; 110 } else { 111 Entry previousEntry = firstEntry; 112 while (previousEntry._next != _fixedEntry) { 113 previousEntry = previousEntry._next; 114 } 115 previousEntry._next = _fixedEntry._next; 116 } 117 118 _fixedEntry = null; 119 _size--; 120 } 121 } 122 } 123 | Popular Tags |