diff options
author | romangraef <romangraef@users.noreply.github.com> | 2021-08-12 23:55:19 +0000 |
---|---|---|
committer | romangraef <romangraef@users.noreply.github.com> | 2021-08-12 23:55:19 +0000 |
commit | 2aa191fb3ba4d452eba8eb3759a64df3876b0e74 (patch) | |
tree | 5c9a580e86c379c9c7b329c66b7f246fca9bc195 /src/jsMain/kotlin/io/Path.kt | |
parent | bb618136911c338a926496dfb6971aa86f7d87c2 (diff) | |
download | webos-2aa191fb3ba4d452eba8eb3759a64df3876b0e74.tar.gz webos-2aa191fb3ba4d452eba8eb3759a64df3876b0e74.tar.bz2 webos-2aa191fb3ba4d452eba8eb3759a64df3876b0e74.zip |
Automated deployment: Thu Aug 12 23:55:19 UTC 2021 a485112be491dc71c6b6951b3a65827f89ab3406
Diffstat (limited to 'src/jsMain/kotlin/io/Path.kt')
-rw-r--r-- | src/jsMain/kotlin/io/Path.kt | 75 |
1 files changed, 0 insertions, 75 deletions
diff --git a/src/jsMain/kotlin/io/Path.kt b/src/jsMain/kotlin/io/Path.kt deleted file mode 100644 index 8f77203..0000000 --- a/src/jsMain/kotlin/io/Path.kt +++ /dev/null @@ -1,75 +0,0 @@ -package io - -sealed interface Path { - val parts: List<String> - fun toAbsolutePath(relativeTo: Absolute): Absolute { - return relativeTo.resolve(this) - } - - fun resolve(path: Path): Path - - companion object { - val root = Absolute(listOf()) - - fun ofShell(string: String, userHome: Absolute): Path = - ofShell(string.split("/"), userHome) - - fun ofShell(vararg parts: String, userHome: Absolute): Path = - ofShell(parts.toList(), userHome) - - fun of(vararg parts: String): Path = - of(parts.toList()) - - fun of(string: String): Path = - of(string.split("/")) - - fun ofShell(parts: List<String>, userHome: Absolute): Path { - if (parts.firstOrNull() == "~") - return userHome.resolve(Relative(parts.subList(1, parts.size).filter { it.isNotEmpty() })) - return of(parts) - } - - fun of(parts: List<String>): Path { - if (parts.isEmpty()) - return root - if (parts[0] == "") // Starts with a / - return Absolute(parts.subList(1, parts.size).filter { it.isNotEmpty() }) - return Relative(parts.filter { it.isNotEmpty() }) - } - } - - data class Relative internal constructor(override val parts: List<String>) : Path { - override fun resolve(path: Path): Path { - if (path is Absolute) return path - return Relative(this.parts + path.parts) - } - } - - data class Absolute internal constructor(override val parts: List<String>) : Path { - override fun resolve(path: Path): Absolute { - if (path is Absolute) return path - return Absolute(this.parts + path.parts) - } - - fun relativize(path: Path): Relative = when (path) { - is Relative -> path - is Absolute -> { - var commonPrefix = true - val partList = mutableListOf<String>() - var returns = 0 - for ((idx, part) in path.parts.withIndex()) { - if (idx < this.parts.size) { - if (this.parts[idx] == part && commonPrefix) { - continue - } else { - commonPrefix = false - returns++ - } - } - partList.add(part) - } - Relative(List(returns) { "" } + partList) - } - } - } -} |