// FILE: test.kt // @TestKt.class: // 0 valueOf // 0 Value\s\(\) val mask = 127 val entries = IntArray(128) val flags = BooleanArray(128) fun distance(index: Int, hash: Int): Int = (128 + index - (hash and mask)) and mask fun insertSad(x: Int): Boolean { return insertWithBoxing( x, hash = { it }, equals = { a, b -> a == b }, isEmpty = { !flags[it] }, fetch = { entries[it] }, store = { i, x -> entries[i] = x; flags[i] = true; } ) } // FILE: inline.kt inline fun insertWithBoxing(entry: T, hash: (T) -> Int, equals: (T, T) -> Boolean, isEmpty: (Int) -> Boolean, fetch: (Int) -> T, store: (Int, T) -> Unit): Boolean { var currentEntry = entry var index = hash(entry) and mask var dist = 0 do { if (isEmpty(index)) { store(index, currentEntry) return true } val existingEntry = fetch(index) if (equals(existingEntry, currentEntry)) { return false } val existingHash = hash(existingEntry) val existingDistance = distance(index, existingHash) if (existingDistance < dist) { store(index, currentEntry) currentEntry = existingEntry dist = existingDistance } dist += 1 index = (index + 1) and mask } while (true) }