in fix/core/src/main/java/deltix/connector/fix/mapper/OrderIdCache.java [305:362]
public boolean put(final AsciiStringBuilder key, final long value) {
int hidx = hashIndex(key);
int idx = find(hidx, key);
if (idx != NULL) {
evict(idx);
values[idx] = value;
if (idx != insertLast) { // is not last inserted
final int prevIndex = insertList[2 * idx]; // curr.prev
final int nextIndex = insertList[2 * idx + 1]; // curr.next
if (prevIndex == NULL) {
insertFirst = nextIndex; // first = curr.next
} else {
insertList[2 * prevIndex + 1] = nextIndex; // prev.next = curr.next
}
insertList[2 * nextIndex] = prevIndex; // next.prev = curr.prev
insertList[2 * insertLast + 1] = idx; // last.next = curr
insertList[2 * idx] = insertLast; // curr.prev = last
insertList[2 * idx + 1] = NULL; // curr.next = null
insertLast = idx; // last = curr
}
return (false);
}
if (freeHead == NULL) {
final int index = insertFirst; // curr
final int nextIndex = insertList[2 * index + 1]; // next
insertList[2 * nextIndex] = NULL; // next.prev = null
insertFirst = nextIndex; // first = next
free(index);
}
idx = allocEntry(hidx); // curr
if (insertLast == NULL) {
insertFirst = idx; // first = curr
} else {
insertList[2 * insertLast + 1] = idx; // last.next = curr
}
insertList[2 * idx] = insertLast; // curr.prev = last
insertList[2 * idx + 1] = NULL; // curr.next = null
insertLast = idx; // last = curr
values[idx] = value;
putKey(idx, key);
return (true);
}