
nativeMain.kotbase.DatabaseConfiguration.native.kt Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of couchbase-lite Show documentation
Show all versions of couchbase-lite Show documentation
Couchbase Lite Community Edition for Kotlin Multiplatform
/*
* Copyright 2022-2023 Jeff Lockhart
*
* 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 kotbase
import kotbase.internal.fleece.toKString
import kotlinx.cinterop.*
import kotlinx.io.files.Path
import kotlinx.io.files.SystemPathSeparator
import libcblite.CBLDatabaseConfiguration
import libcblite.CBLDatabaseConfiguration_Default
import platform.posix.free
import platform.posix.strdup
import platform.posix.strlen
import kotlin.experimental.ExperimentalNativeApi
import kotlin.native.ref.createCleaner
public actual class DatabaseConfiguration
public actual constructor(config: DatabaseConfiguration?) {
private val arena = Arena()
internal val actual: CPointer =
arena.alloc().ptr
private val memory = object {
val arena = [email protected]
val actual = [email protected]
}
@OptIn(ExperimentalNativeApi::class)
@Suppress("unused")
private val cleaner = createCleaner(memory) {
free(it.actual.pointed.directory.buf)
it.arena.clear()
}
public actual fun setDirectory(directory: String): DatabaseConfiguration {
this.directory = directory
return this
}
public actual var directory: String = config?.directory ?: defaultDirectory
set(value) {
checkReadOnly()
field = value
setActualDirectory(value)
}
init {
setActualDirectory(directory)
}
private fun setActualDirectory(directory: String) {
with(actual.pointed.directory) {
free(buf)
buf = strdup(directory)
size = strlen(directory)
}
}
private val defaultDirectory: String
get() = CBLDatabaseConfiguration_Default().useContents {
directory.toKString()!!.dropLastWhile { it == SystemPathSeparator }
}
internal var readonly: Boolean = false
private fun checkReadOnly() {
if (readonly) throw IllegalStateException("DatabaseConfiguration is readonly mode.")
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy