in servicetalk-concurrent-api/src/main/java/io/servicetalk/concurrent/api/CopyOnWriteContextMap.java [2025:2088]
public <T> T computeIfAbsent(final Key<T> key, final Function<Key<T>, T> computeFunction,
final CopyOnWriteContextMap owner,
final AtomicReferenceFieldUpdater<CopyOnWriteContextMap, CopyContextMap> mapUpdater) {
if (key.equals(keyOne)) {
if (valueOne == null) {
final T value = computeFunction.apply(key);
return mapUpdater.compareAndSet(owner, this, new SixContextMap(key, value, keyTwo, valueTwo,
keyThree, valueThree, keyFour, valueFour, keyFive, valueFive, keySix, valueSix)) ?
value : owner.computeIfAbsent(key, computeFunction);
}
return (T) valueOne;
}
if (key.equals(keyTwo)) {
if (valueTwo == null) {
final T value = computeFunction.apply(key);
return mapUpdater.compareAndSet(owner, this, new SixContextMap(keyOne, valueOne, key, value,
keyThree, valueThree, keyFour, valueFour, keyFive, valueFive, keySix, valueSix)) ?
value : owner.computeIfAbsent(key, computeFunction);
}
return (T) valueTwo;
}
if (key.equals(keyThree)) {
if (valueThree == null) {
final T value = computeFunction.apply(key);
return mapUpdater.compareAndSet(owner, this, new SixContextMap(keyOne, valueOne,
keyTwo, valueTwo, key, value, keyFour, valueFour, keyFive, valueFive, keySix, valueSix)) ?
value : owner.computeIfAbsent(key, computeFunction);
}
return (T) valueThree;
}
if (key.equals(keyFour)) {
if (valueFour == null) {
final T value = computeFunction.apply(key);
return mapUpdater.compareAndSet(owner, this, new SixContextMap(keyOne, valueOne,
keyTwo, valueTwo, keyThree, valueThree, key, value, keyFive, valueFive, keySix, valueSix)) ?
value : owner.computeIfAbsent(key, computeFunction);
}
return (T) valueFour;
}
if (key.equals(keyFive)) {
if (valueFive == null) {
final T value = computeFunction.apply(key);
return mapUpdater.compareAndSet(owner, this, new SixContextMap(keyOne, valueOne,
keyTwo, valueTwo, keyThree, valueThree, keyFour, valueFour, key, value, keySix, valueSix)) ?
value : owner.computeIfAbsent(key, computeFunction);
}
return (T) valueFive;
}
if (key.equals(keySix)) {
if (valueSix == null) {
final T value = computeFunction.apply(key);
return mapUpdater.compareAndSet(owner, this, new SixContextMap(keyOne, valueOne,
keyTwo, valueTwo, keyThree, valueThree, keyFour, valueFour, keyFive, valueFive,
key, value)) ?
value : owner.computeIfAbsent(key, computeFunction);
}
return (T) valueSix;
}
final T value = computeFunction.apply(key);
return mapUpdater.compareAndSet(owner, this, new SevenOrMoreContextMap(keyOne, valueOne,
keyTwo, valueTwo, keyThree, valueThree, keyFour, valueFour, keyFive, valueFive, keySix, valueSix,
key, value)) ?
value : owner.computeIfAbsent(key, computeFunction);
}