73032213f0
^KT-61259
40 lines
1.2 KiB
Kotlin
Vendored
40 lines
1.2 KiB
Kotlin
Vendored
/*
|
|
* Copyright 2010-2023 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
|
|
* that can be found in the LICENSE file.
|
|
*/
|
|
@file:OptIn(kotlinx.cinterop.ExperimentalForeignApi::class)
|
|
|
|
import kotlin.test.*
|
|
|
|
import kotlinx.cinterop.*
|
|
typealias heap_t = IntVar
|
|
fun heap_create(size: Long): CPointer<heap_t>? = null
|
|
fun heap_alloc(heap: CPointer<heap_t>?, size: ULong): CPointer<*>? = null
|
|
fun heap_free(heap: CPointer<heap_t>?, ptr: CPointer<*>?): CPointer<BooleanVar>? = null
|
|
inline fun Heap(size: Long): CPointer<heap_t>? {
|
|
return heap_create(size)
|
|
}
|
|
inline fun <reified T : CVariable> CPointer<heap_t>?.use(f: (CPointer<T>) -> Unit) {
|
|
alloc<T>()
|
|
?.also(f)
|
|
?.also(::free)
|
|
}
|
|
inline fun <reified T : CVariable> CPointer<heap_t>?.alloc(): CPointer<T>? {
|
|
return heap_alloc(this, sizeOf<T>().toULong())?.reinterpret()
|
|
}
|
|
inline fun CPointer<heap_t>?.free(ptr: CPointer<*>?): Boolean {
|
|
return heap_free(this, ptr)?.pointed?.value ?: false
|
|
}
|
|
|
|
fun box(): String {
|
|
memScoped {
|
|
val heap = Heap(1024)
|
|
|
|
heap.use<IntVar> { ptr ->
|
|
ptr.pointed.value = 40
|
|
//println("PTR ${ptr.pointed}")
|
|
}
|
|
}
|
|
return "OK"
|
|
}
|