Skip to content

Commit b3cd39c

Browse files
committed
Use new kotlin.concurrent.atomics
1 parent 88920ef commit b3cd39c

File tree

46 files changed

+273
-464
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

46 files changed

+273
-464
lines changed

arrow-libs/core/arrow-atomic/src/androidAndJvmMain/kotlin/arrow/atomic/Atomic.kt

-7
This file was deleted.

arrow-libs/core/arrow-atomic/src/androidAndJvmMain/kotlin/arrow/atomic/AtomicInt.kt

-7
This file was deleted.

arrow-libs/core/arrow-atomic/src/androidAndJvmMain/kotlin/arrow/atomic/AtomicLong.kt

-7
This file was deleted.

arrow-libs/core/arrow-atomic/src/commonMain/kotlin/arrow/atomic/Atomic.kt

+10-6
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
1-
@file:OptIn(ExperimentalContracts::class)
1+
@file:OptIn(ExperimentalContracts::class, ExperimentalAtomicApi::class)
22

33
package arrow.atomic
44

5+
import kotlin.concurrent.atomics.ExperimentalAtomicApi
6+
import kotlin.concurrent.atomics.AtomicReference as KtAtomicReference
57
import kotlin.contracts.ExperimentalContracts
68
import kotlin.contracts.InvocationKind
79
import kotlin.contracts.contract
@@ -29,16 +31,18 @@ import kotlin.contracts.contract
2931
*
3032
* **WARNING**: Use [AtomicInt] and [AtomicLong] for [Int] and [Long] on Kotlin Native!
3133
*/
32-
public expect class Atomic<V>(initialValue: V) {
33-
public fun get(): V
34-
public fun set(value: V)
35-
public fun getAndSet(value: V): V
34+
public class Atomic<V>(initialValue: V) {
35+
private val inner = KtAtomicReference(initialValue)
36+
37+
public fun get(): V = inner.load()
38+
public fun set(value: V) { inner.store(value) }
39+
public fun getAndSet(value: V): V = inner.exchange(value)
3640

3741
/**
3842
* Compare current value with expected and set to new if they're the same. Note, 'compare' is checking
3943
* the actual object id, not 'equals'.
4044
*/
41-
public fun compareAndSet(expected: V, new: V): Boolean
45+
public fun compareAndSet(expected: V, new: V): Boolean = inner.compareAndSet(expected, new)
4246
}
4347

4448
public var <T> Atomic<T>.value: T

arrow-libs/core/arrow-atomic/src/commonMain/kotlin/arrow/atomic/AtomicBoolean.kt

+8-9
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,32 @@
1-
@file:OptIn(ExperimentalContracts::class)
1+
@file:OptIn(ExperimentalContracts::class, ExperimentalAtomicApi::class)
22

33
package arrow.atomic
44

5+
import kotlin.concurrent.atomics.ExperimentalAtomicApi
6+
import kotlin.concurrent.atomics.AtomicBoolean as KtAtomicBoolean
57
import kotlin.contracts.ExperimentalContracts
68
import kotlin.contracts.InvocationKind
79
import kotlin.contracts.contract
810

911
public class AtomicBoolean(value: Boolean) {
10-
private val inner = AtomicInt(value.toInt())
12+
private val inner = KtAtomicBoolean(value)
1113

1214
public var value: Boolean
13-
get() = inner.value != 0
15+
get() = inner.load()
1416
set(value) {
15-
inner.value = value.toInt()
17+
inner.store(value)
1618
}
1719

1820
public fun compareAndSet(expected: Boolean, new: Boolean): Boolean =
19-
inner.compareAndSet(expected.toInt(), new.toInt())
21+
inner.compareAndSet(expected, new)
2022

2123
public fun get(): Boolean = value
2224
public fun set(value: Boolean) {
2325
this.value = value
2426
}
2527

2628
public fun getAndSet(value: Boolean): Boolean =
27-
inner.getAndSet(value.toInt()) == 1
28-
29-
private fun Boolean.toInt(): Int =
30-
if (this) 1 else 0
29+
inner.exchange(value)
3130
}
3231

3332

arrow-libs/core/arrow-atomic/src/commonMain/kotlin/arrow/atomic/AtomicInt.kt

+14-9
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,28 @@
1-
@file:OptIn(ExperimentalContracts::class)
1+
@file:OptIn(ExperimentalContracts::class, ExperimentalAtomicApi::class)
22

33
package arrow.atomic
44

5+
import kotlin.concurrent.atomics.ExperimentalAtomicApi
6+
import kotlin.concurrent.atomics.decrementAndFetch
7+
import kotlin.concurrent.atomics.incrementAndFetch
8+
import kotlin.concurrent.atomics.AtomicInt as KtAtomicInt
59
import kotlin.contracts.ExperimentalContracts
610
import kotlin.contracts.InvocationKind
711
import kotlin.contracts.contract
812

9-
public expect class AtomicInt(initialValue: Int) {
13+
public class AtomicInt(initialValue: Int) {
14+
private val inner = KtAtomicInt(initialValue)
1015

11-
public fun get(): Int
12-
public fun set(newValue: Int)
13-
public fun getAndSet(value: Int): Int
16+
public fun get(): Int = inner.load()
17+
public fun set(newValue: Int) { inner.store(newValue) }
18+
public fun getAndSet(value: Int): Int = inner.exchange(value)
1419

15-
public fun incrementAndGet(): Int
16-
public fun decrementAndGet(): Int
20+
public fun incrementAndGet(): Int = inner.incrementAndFetch()
21+
public fun decrementAndGet(): Int = inner.decrementAndFetch()
1722

18-
public fun addAndGet(delta: Int): Int
23+
public fun addAndGet(delta: Int): Int = inner.addAndFetch(delta)
1924

20-
public fun compareAndSet(expected: Int, new: Int): Boolean
25+
public fun compareAndSet(expected: Int, new: Int): Boolean = inner.compareAndSet(expected, new)
2126
}
2227

2328
public var AtomicInt.value: Int

arrow-libs/core/arrow-atomic/src/commonMain/kotlin/arrow/atomic/AtomicLong.kt

+14-9
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,28 @@
1-
@file:OptIn(ExperimentalContracts::class)
1+
@file:OptIn(ExperimentalContracts::class, ExperimentalAtomicApi::class)
22

33
package arrow.atomic
44

5+
import kotlin.concurrent.atomics.AtomicLong as KtAtomicLong
6+
import kotlin.concurrent.atomics.ExperimentalAtomicApi
7+
import kotlin.concurrent.atomics.decrementAndFetch
8+
import kotlin.concurrent.atomics.incrementAndFetch
59
import kotlin.contracts.ExperimentalContracts
610
import kotlin.contracts.InvocationKind
711
import kotlin.contracts.contract
812

9-
public expect class AtomicLong(initialValue: Long) {
13+
public class AtomicLong(initialValue: Long) {
14+
private val inner = KtAtomicLong(initialValue)
1015

11-
public fun get(): Long
12-
public fun set(newValue: Long)
13-
public fun getAndSet(value: Long): Long
16+
public fun get(): Long = inner.load()
17+
public fun set(newValue: Long) { inner.store(newValue) }
18+
public fun getAndSet(value: Long): Long = inner.exchange(value)
1419

15-
public fun incrementAndGet(): Long
16-
public fun decrementAndGet(): Long
20+
public fun incrementAndGet(): Long = inner.incrementAndFetch()
21+
public fun decrementAndGet(): Long = inner.decrementAndFetch()
1722

18-
public fun addAndGet(delta: Long): Long
23+
public fun addAndGet(delta: Long): Long = inner.addAndFetch(delta)
1924

20-
public fun compareAndSet(expected: Long, new: Long): Boolean
25+
public fun compareAndSet(expected: Long, new: Long): Boolean = inner.compareAndSet(expected, new)
2126
}
2227

2328
public var AtomicLong.value: Long

arrow-libs/core/arrow-atomic/src/jsMain/kotlin/arrow/atomic/Atomic.kt

-25
This file was deleted.

arrow-libs/core/arrow-atomic/src/jsMain/kotlin/arrow/atomic/AtomicInt.kt

-34
This file was deleted.

arrow-libs/core/arrow-atomic/src/jsMain/kotlin/arrow/atomic/AtomicLong.kt

-34
This file was deleted.

arrow-libs/core/arrow-atomic/src/nativeMain/kotlin/arrow/atomic/Atomic.kt

-19
This file was deleted.

arrow-libs/core/arrow-atomic/src/nativeMain/kotlin/arrow/atomic/AtomicInt.kt

-28
This file was deleted.

arrow-libs/core/arrow-atomic/src/nativeMain/kotlin/arrow/atomic/AtomicLong.kt

-29
This file was deleted.

arrow-libs/core/arrow-atomic/src/wasmJsMain/kotlin/arrow/atomic/Atomic.kt

-25
This file was deleted.

0 commit comments

Comments
 (0)