[go: nahoru, domu]

blob: a90b834ffff7eae23068157b08216df7b6bdd6f7 [file] [log] [blame]
/*
* Copyright 2019 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package androidx.compose.runtime
// TODO(aelias): Mark the typealiases internal when https://youtrack.jetbrains.com/issue/KT-36695 is fixed.
// Currently, they behave as internal because the actual is internal, even though the expect is public.
expect class BitSet() {
fun set(bitIndex: Int)
fun or(set: BitSet)
fun clear(bitIndex: Int)
operator fun get(bitIndex: Int): Boolean
}
internal expect open class ThreadLocal<T>(initialValue: () -> T) {
fun get(): T
fun set(value: T)
}
internal fun <T> ThreadLocal() = ThreadLocal<T?> { null }
expect class WeakHashMap<K, V>() : MutableMap<K, V>
internal expect fun identityHashCode(instance: Any?): Int
internal expect inline fun <R> synchronized(lock: Any, block: () -> R): R
expect open class WeakReference<T> : Reference<T> {
constructor(referent: T)
constructor(referent: T, q: ReferenceQueue<in T>?)
}
expect abstract class Reference<T> {
open fun get(): T?
}
expect open class ReferenceQueue<T>() {
open fun poll(): Reference<out T>?
}
expect class AtomicReference<V>(value: V) {
fun get(): V
fun set(value: V)
fun getAndSet(value: V): V
fun compareAndSet(expect: V, newValue: V): Boolean
}
internal expect class BuildableMapBuilder<K, V> : MutableMap<K, V> {
fun build(): BuildableMap<K, V>
}
expect class BuildableMap<K, V> : Map<K, V> {
internal fun builder(): BuildableMapBuilder<K, V>
}
@Suppress("UNCHECKED_CAST")
internal inline fun <K, V> BuildableMap<K, V>.mutate(
mutator: (MutableMap<K, V>) -> Unit
): BuildableMap<K, V> = builder().apply(mutator).build()
internal expect fun <K, V> buildableMapOf(): BuildableMap<K, V>
internal expect class BuildableListBuilder<T> : MutableList<T> {
fun build(): BuildableList<T>
}
internal expect class BuildableList<T> : List<T> {
internal fun builder(): BuildableListBuilder<T>
internal fun add(element: T): BuildableList<T>
internal fun add(index: Int, element: T): BuildableList<T>
internal fun addAll(elements: Collection<T>): BuildableList<T>
internal fun remove(element: T): BuildableList<T>
internal fun removeAll(elements: Collection<T>): BuildableList<T>
internal fun removeAt(index: Int): BuildableList<T>
internal fun set(index: Int, element: T): BuildableList<T>
}
internal expect fun <T> buildableListOf(): BuildableList<T>
internal inline fun <T> BuildableList<T>.mutate(
mutator: (MutableList<T>) -> Unit
): BuildableList<T> = builder().apply(mutator).build()
expect class UnsupportedOperationException
@MustBeDocumented
@Retention(AnnotationRetention.BINARY)
@Target(
AnnotationTarget.FUNCTION,
AnnotationTarget.CONSTRUCTOR
)
expect annotation class MainThread()
@MustBeDocumented
@Retention(AnnotationRetention.SOURCE)
@Target(
AnnotationTarget.FUNCTION,
AnnotationTarget.CONSTRUCTOR,
AnnotationTarget.PROPERTY_GETTER,
AnnotationTarget.PROPERTY_SETTER
)
expect annotation class TestOnly()
@Target(AnnotationTarget.FUNCTION,
AnnotationTarget.PROPERTY_GETTER,
AnnotationTarget.PROPERTY_SETTER)
@Retention(AnnotationRetention.BINARY)
@MustBeDocumented
expect annotation class CheckResult(
val suggest: String
)
// Array<T>.sortWith(comparator, fromIndex, toIndex) is only available on jvm and native
internal expect fun <T> sortArrayWith(
array: Array<T>,
comparator: Comparator<T>,
fromIndex: Int,
toIndex: Int
)