Skip to content

Commit

Permalink
fix version, add dynamicTraversal to README
Browse files Browse the repository at this point in the history
  • Loading branch information
robstoll committed Mar 4, 2024
1 parent 10b546f commit f7e186f
Show file tree
Hide file tree
Showing 6 changed files with 30 additions and 30 deletions.
39 changes: 21 additions & 18 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<!-- for main -->
<!--
[![Download](https://img.shields.io/badge/Download-1.0.0-%23007ec6)](https://search.maven.org/artifact/ch.tutteli.kbox/kbox/1.0.0/jar)
[![Download](https://img.shields.io/badge/Download-0.16.0-%23007ec6)](https://search.maven.org/artifact/ch.tutteli.kbox/kbox/0.16.0/jar)
[![Apache license](https://img.shields.io/badge/license-Apache%202.0-brightgreen.svg)](http://opensource.org/licenses/Apache2.0)
[![Build Status Ubuntu](https://github.com/robstoll/kbox/workflows/Ubuntu/badge.svg?event=push)](https://github.com/robstoll/kbox/actions?query=workflow%3AUbuntu+branch%3Amain)
[![Build Status Windows](https://github.com/robstoll/kbox/workflows/Windows/badge.svg?event=push)](https://github.com/robstoll/kbox/actions?query=workflow%3AWindows+branch%3Amain)
Expand All @@ -9,55 +9,58 @@

<!-- for a specific release -->

[![Download](https://img.shields.io/badge/Download-1.0.0-%23007ec6)](https://search.maven.org/artifact/ch.tutteli.kbox/kbox/1.0.0/jar)
[![Download](https://img.shields.io/badge/Download-0.16.0-%23007ec6)](https://search.maven.org/artifact/ch.tutteli.kbox/kbox/0.16.0/jar)
[![Apache license](https://img.shields.io/badge/license-Apache%202.0-brightgreen.svg)](http://opensource.org/licenses/Apache2.0)


# KBox
KBox is a very small but useful utility library for Kotlin (JVM, Android and JS).

Current extension functions:
- [`Array/List/Iterable/Sequence.appendtoStringBuilder`](https://github.com/robstoll/kbox/tree/v1.0.0/src/commonMain/kotlin/ch/tutteli/kbox/appendToString.kt#L37)
- [`Array/List/Iterable/Sequence.appendtoStringBuilder`](https://github.com/robstoll/kbox/tree/main/src/commonMain/kotlin/ch/tutteli/kbox/appendToString.kt#L37)
with the ability to define a different separator for the last separation
=> handy if you want to form sentences like `a, b and c`

- [`CharSequence.blankToNull`](https://github.com/robstoll/kbox/tree/v1.0.0/src/commonMain/kotlin/ch/tutteli/kbox/blanktoNull.kt#L7)
- [`CharSequence.blankToNull`](https://github.com/robstoll/kbox/tree/main/src/commonMain/kotlin/ch/tutteli/kbox/blanktoNull.kt#L7)
returns the same `CharSequence` if not blank, `null` otherwise

- [`forEachIn(Array/Iterable/Sequence<E>, Array/Iterable/Sequence<E>, ..., action: (E) -> Unit)`](https://github.com/robstoll/kbox/tree/v1.0.0/src/commonMain/kotlin/ch/tutteli/kbox/forEachIn.kt#L6)
- [`forEachIn(Array/Iterable/Sequence<E>, Array/Iterable/Sequence<E>, ..., action: (E) -> Unit)`](https://github.com/robstoll/kbox/tree/main/src/commonMain/kotlin/ch/tutteli/kbox/forEachIn.kt#L6)
applies the given action to each entry in the given `Iterable`s.

- [`<E> forElementAndEachIn(E, Array/Iterable/Sequence<E>, action: (E) -> Unit)`](https://github.com/robstoll/kbox/tree/v1.0.0/src/commonMain/kotlin/ch/tutteli/kbox/forThisAndForEach.kt#L6)
- [`<E> forElementAndEachIn(E, Array/Iterable/Sequence<E>, action: (E) -> Unit)`](https://github.com/robstoll/kbox/tree/main/src/commonMain/kotlin/ch/tutteli/kbox/forThisAndForEach.kt#L6)
applies the given action to `this` and each entry in Iterable

- [`Iterable<T>.forEachRemaining()`](https://github.com/robstoll/kbox/tree/v1.0.0/src/commonMain/kotlin/ch/tutteli/kbox/forEachRemaining.kt#L9)
- [`Iterable<T>.forEachRemaining()`](https://github.com/robstoll/kbox/tree/main/src/commonMain/kotlin/ch/tutteli/kbox/forEachRemaining.kt#L9)
shortcut for `while(hasNext()) yourLambda(next())`

- [`Array/List.ifWithinBound`](https://github.com/robstoll/kbox/tree/v1.0.0/src/commonMain/kotlin/ch/tutteli/kbox/ifWithinBound.kt#L13)
- [`Array/List.ifWithinBound`](https://github.com/robstoll/kbox/tree/main/src/commonMain/kotlin/ch/tutteli/kbox/ifWithinBound.kt#L13)
shortcut for `if(index < size){ thenBlock() } else { elseBlock() }`

- [`CharSequence?.isNotNullAndNotEmpty/isNotNullAndNotBlank`](https://github.com/robstoll/kbox/tree/v1.0.0/src/commonMain/kotlin/ch/tutteli/kbox/isNotNullAndNot.kt#L6)
- [`CharSequence?.isNotNullAndNotEmpty/isNotNullAndNotBlank`](https://github.com/robstoll/kbox/tree/main/src/commonMain/kotlin/ch/tutteli/kbox/isNotNullAndNot.kt#L6)

- [`Array/List/Iterable/Sequence.joinToString`](https://github.com/robstoll/kbox/tree/v1.0.0/src/commonMain/kotlin/ch/tutteli/kbox/joinToString.kt#L31)
- [`Array/List/Iterable/Sequence.joinToString`](https://github.com/robstoll/kbox/tree/main/src/commonMain/kotlin/ch/tutteli/kbox/joinToString.kt#L31)
with the ability to define a different separator for the last separation
=> handy if you want to form sentences like `a, b and c`

- [`Map<T, T>.mapParents`](https://github.com/robstoll/kbox/tree/v1.0.0/src/commonMain/kotlin/ch/tutteli/kbox/mapParents.kt#L13)
- [`Map<T, T>.mapParents`](https://github.com/robstoll/kbox/tree/main/src/commonMain/kotlin/ch/tutteli/kbox/mapParents.kt#L13)
maps child-parent relations.

- [`Iterator<T>.mapRemaining/mapRemainingWithCounter`](https://github.com/robstoll/kbox/tree/v1.0.0/src/commonMain/kotlin/ch/tutteli/kbox/mapRemaining.kt#L9)
maps remaining entries with the help of a transform function (where `mapRemainingWithCounter` passes a counter variable to the transform function).
- [`Iterator<T>.mapRemaining/mapRemainingWithCounter`](https://github.com/robstoll/kbox/tree/main/src/commonMain/kotlin/ch/tutteli/kbox/mapRemaining.kt#L9)
maps remaining entries with the help of a transform function (where `mapRemainingWithCounter` passes a counter variable to the transform function).

- [`Array/Iterable/Sequence.mapWithIndex`](https://github.com/robstoll/kbox/tree/v1.0.0/src/commonMain/kotlin/ch/tutteli/kbox/mapWithIndex.kt#L11)
- [`Array/Iterable/Sequence.mapWithIndex`](https://github.com/robstoll/kbox/tree/main/src/commonMain/kotlin/ch/tutteli/kbox/mapWithIndex.kt#L11)

- [`Iterator.toPeekingIterator()`](https://github.com/robstoll/kbox/tree/v1.0.0/src/commonMain/kotlin/ch/tutteli/kbox/PeekingIteratorUnsynchronized.kt)
- [`Sequence.dynamicTraversal`](https://github.com/robstoll/kbox/tree/main/src/commonMain/kotlin/ch/tutteli/kbox/dynamicTraversal.kt#L34)
allows to iterator over a tree/graph like structure lazily

- [`Iterator.toPeekingIterator()`](https://github.com/robstoll/kbox/tree/main/src/commonMain/kotlin/ch/tutteli/kbox/PeekingIteratorUnsynchronized.kt)
which allows to have a look what the next element is without consuming it.

- [`varargsToList/glue`](https://github.com/robstoll/kbox/tree/v1.0.0/src/commonMain/kotlin/ch/tutteli/kbox/varargToList.kt#L11)
- [`varargsToList/glue`](https://github.com/robstoll/kbox/tree/main/src/commonMain/kotlin/ch/tutteli/kbox/varargToList.kt#L11)
creates a `List` out of a single `E` and an `Array<E>`.

Moreover, the following function might come in handy for you as well:
- [identity](https://github.com/robstoll/kbox/tree/v1.0.0/src/commonMain/kotlin/ch/tutteli/kbox/identity.kt)
- [identity](https://github.com/robstoll/kbox/tree/main/src/commonMain/kotlin/ch/tutteli/kbox/identity.kt)

# Installation

Expand All @@ -66,7 +69,7 @@ KBox is published to maven central.
```
repositories { mavenCentral() }
dependencies {
implementation("ch.tutteli.kbox:kbox-jvm:1.0.0")
implementation("ch.tutteli.kbox:kbox-jvm:0.16.0")
}
```

Expand Down
2 changes: 1 addition & 1 deletion build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import java.nio.file.StandardCopyOption
buildscript {
// needs to be defined in here because otherwise tutteli-publish plugin does not have this information when applied
// and we want that it to apply the ch.tutteli conventions
rootProject.version = "1.0.0"
rootProject.version = "1.0.0-SNAPSHOT"
rootProject.group = "ch.tutteli.kbox"
rootProject.description = "A utility library for Kotlin "
}
Expand Down
4 changes: 2 additions & 2 deletions docs/index.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
[![Download](https://img.shields.io/badge/Download-1.0.0-%23007ec6)](https://search.maven.org/artifact/ch.tutteli.kbox/kbox/1.0.0/jar)
[![Download](https://img.shields.io/badge/Download-0.16.0-%23007ec6)](https://search.maven.org/artifact/ch.tutteli.kbox/kbox/0.16.0/jar)
[![Apache license](https://img.shields.io/badge/license-Apache%202.0-brightgreen.svg)](http://opensource.org/licenses/Apache2.0)

# KBox
Expand All @@ -11,7 +11,7 @@ KBox is published to maven central.
```
repositories { mavenCentral() }
dependencies {
implementation("ch.tutteli.kbox:kbox:1.0.0")
implementation("ch.tutteli.kbox:kbox:0.16.0")
}
```

Expand Down
2 changes: 1 addition & 1 deletion src/commonMain/kotlin/ch/tutteli/kbox/blankToNull.kt
Original file line number Diff line number Diff line change
Expand Up @@ -4,4 +4,4 @@ package ch.tutteli.kbox
* Returns this [CharSequence] if it is not blank, null otherwise.
*/
@Suppress("NOTHING_TO_INLINE")
inline fun <T: CharSequence> T.blankToNull(): T? = if(this.isNotBlank()) this else null
inline fun <T: CharSequence> T.blankToNull(): T? = this.ifBlank { null }
10 changes: 5 additions & 5 deletions src/commonMain/kotlin/ch/tutteli/kbox/dynamicTraversal.kt
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ import kotlin.jvm.JvmName
* @param loadElements the function returning the children of a given element in case of a tree / the connected nodes
* in case of a graph.
*
* @since 1.1.0
* @since 1.0.0
*/
@OptIn(ExperimentalTypeInference::class)
@OverloadResolutionByLambdaReturnType
Expand Down Expand Up @@ -76,7 +76,7 @@ fun <T> Sequence<T>.dynamicTraversal(
* @param loadElements the function returning the children of a given element in case of a tree / the connected nodes
* in case of a graph.
*
* @since 1.1.0
* @since 1.0.0
*/
@OptIn(ExperimentalTypeInference::class)
@OverloadResolutionByLambdaReturnType
Expand Down Expand Up @@ -107,14 +107,14 @@ fun <T> Sequence<T>.dynamicTraversal(
/**
* Represents the option to which traversal algorithm shall be applied.
*
* @since 1.1.0
* @since 1.0.0
*/
enum class TraversalAlgorithmOption {
/** Taking the tree as example, the resulting sequence contains the result in a breath first manner,
* i.e. if `dropRoots = false` then the elements of the original sequence are returned first (if `dropRoots] = true`
* then they are skipped/dropped), then the children of those elements, then the children of the children and so on.
*
* @since 1.1.0
* @since 1.0.0
*/
BreadthFirst,

Expand All @@ -126,7 +126,7 @@ enum class TraversalAlgorithmOption {
* Once there is no first child (i.e. we reached a leaf of the tree) the sibling of this child is visited, and again
* the first child of this sibling etc.
*
* @since 1.1.0
* @since 1.0.0
*/
DepthFirst
}
3 changes: 0 additions & 3 deletions src/commonTest/kotlin/ch/tutteli/kbox/BlankToNullSpec.kt
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,6 @@ import ch.tutteli.kbox.atrium.expect
import org.spekframework.spek2.Spek
import org.spekframework.spek2.style.specification.describe

/**
* asdf
*/
object BlankToNullSpec : Spek({

describe("fun ${String::blankToNull.name}") {
Expand Down

0 comments on commit f7e186f

Please sign in to comment.