diff options
Diffstat (limited to 'src/main/kotlin/io/dico/parcels2/storage/DataConverters.kt')
-rw-r--r-- | src/main/kotlin/io/dico/parcels2/storage/DataConverters.kt | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/src/main/kotlin/io/dico/parcels2/storage/DataConverters.kt b/src/main/kotlin/io/dico/parcels2/storage/DataConverters.kt new file mode 100644 index 0000000..80f41b2 --- /dev/null +++ b/src/main/kotlin/io/dico/parcels2/storage/DataConverters.kt @@ -0,0 +1,38 @@ +package io.dico.parcels2.storage + +import java.lang.IllegalArgumentException +import java.nio.ByteBuffer +import java.util.UUID + +/* For putting it into the database */ +fun UUID.toByteArray(): ByteArray = + ByteBuffer.allocate(16).apply { + putLong(mostSignificantBits) + putLong(leastSignificantBits) + }.array() + +/* For getting it out of the database */ +fun ByteArray.toUUID(): UUID = + ByteBuffer.wrap(this).run { + val mostSignificantBits = getLong() + val leastSignificantBits = getLong() + UUID(mostSignificantBits, leastSignificantBits) + } + +/* For putting it into the database */ +fun IntArray.toByteArray(): ByteArray = + ByteBuffer.allocate(size * Int.SIZE_BYTES).also { buf -> + buf.asIntBuffer().put(this) + }.array() + +/* For getting it out of the database */ +fun ByteArray.toIntArray(): IntArray { + if (this.size % Int.SIZE_BYTES != 0) + throw IllegalArgumentException("Size must be divisible by ${Int.SIZE_BYTES}") + + return ByteBuffer.wrap(this).run { + IntArray(remaining() / 4).also { array -> + asIntBuffer().get(array) + } + } +}
\ No newline at end of file |