Constants.kt

package org.knio.core.context

internal const val BYTES_PER_BYTE   = 1
internal const val BYTES_PER_CHAR   = 2
internal const val BYTES_PER_SHORT  = 2
internal const val BYTES_PER_INT    = 4
internal const val BYTES_PER_LONG   = 8
internal const val BYTES_PER_FLOAT  = 4
internal const val BYTES_PER_DOUBLE = 8


internal const val DEFAULT_TASK_BUFFER_SIZE = 1024
internal const val DEFAULT_STREAM_BUFFER_SIZE = 8 * 1024

/**
 * Gets the size of a buffer for a given unit type (byte, char, int,... etc.)
 */
internal fun getBufferSize(size: Int, bytesPerUnit: Int): Int {
    if(size < 0) {
        throw IllegalArgumentException("size must be greater than or equal to 0")
    }
    val unitSize = size * bytesPerUnit
    if (unitSize < 0) {
        throw IllegalArgumentException("size is too large")
    }
    return unitSize
}

internal fun getCharBufferSize(size: Int): Int = getBufferSize(size, BYTES_PER_CHAR)
internal fun getShortBufferSize(size: Int): Int = getBufferSize(size, BYTES_PER_SHORT)
internal fun getIntBufferSize(size: Int): Int = getBufferSize(size, BYTES_PER_INT)
internal fun getLongBufferSize(size: Int): Int = getBufferSize(size, BYTES_PER_LONG)
internal fun getFloatBufferSize(size: Int): Int = getBufferSize(size, BYTES_PER_FLOAT)
internal fun getDoubleBufferSize(size: Int): Int = getBufferSize(size, BYTES_PER_DOUBLE)