@Override public Class<? extends FSTStruct> getElementType(Field arrayRef, FSTStructFactory fac) { if (keyTemplate != null && "keys".equals(arrayRef.getName())) { return keyTemplate.getClass(); } if (valueTemplate != null && "vals".equals(arrayRef.getName())) { return valueTemplate.getClass(); } return null; }
protected int locateIndex(Object key) { if (size >= getCapacity() - 1) { throw new RuntimeException("Map is full"); } if (pointer != null /*?? special for instantiation ?*/ || isOffHeap()) { long arrbase = ___offset + keysStructIndex(); int kvlen = ___bytes.getInt(arrbase + 4); int kelemsiz = ___bytes.getInt(arrbase + 8); if (pointer == null) { pointer = ___fac.createStructPointer(___bytes, 0, ___bytes.getInt(arrbase + 12)); } int pos = ((key.hashCode() & 0x7FFFFFFF) % kvlen); pointer.___offset = ___offset + ___bytes.getInt(arrbase) + pos * kelemsiz; while (pointer.getInt() > 0) { if (key.equals(pointer)) break; pos++; pointer.next(kelemsiz); if (pos >= kvlen) { pos = 0; pointer.___offset = ___offset + ___bytes.getInt(arrbase); } } return pos; } else { int kvlen = keysLen(); int pos = ((key.hashCode() & 0x7FFFFFFF) % kvlen); Object o = keys(pos); while (o != null) { if (key.equals(o)) break; pos++; if (pos >= kvlen) pos = 0; o = keys(pos); } return pos; } }