Number

constructor(filter: (value: CellValue, filter: Filter.Number.State<CellValue>) -> Boolean = { value, filter -> if (filter.value == null) true else { val valid: Boolean = when (filter.type) { FilterType.Equal -> value == filter.value FilterType.NotEqual -> value != filter.value FilterType.LargerOrEqual -> { when (value) { is Double -> (value as Double) >= (filter.value as Double) is Float -> (value as Float) >= (filter.value as Float) is Int -> (value as Int) >= (filter.value as Int) is Long -> (value as Long) >= (filter.value as Long) is Short -> (value as Short) >= (filter.value as Short) is Byte -> (value as Byte) >= (filter.value as Byte) else -> throw RuntimeException("Type not handled!") } } FilterType.Larger -> { when (value) { is Double -> (value as Double) > (filter.value as Double) is Float -> (value as Float) > (filter.value as Float) is Int -> (value as Int) > (filter.value as Int) is Long -> (value as Long) > (filter.value as Long) is Short -> (value as Short) > (filter.value as Short) is Byte -> (value as Byte) > (filter.value as Byte) else -> throw RuntimeException("Type not handled!") } } FilterType.SmallerOrEqual -> { when (value) { is Double -> (value as Double) <= (filter.value as Double) is Float -> (value as Float) <= (filter.value as Float) is Int -> (value as Int) <= (filter.value as Int) is Long -> (value as Long) <= (filter.value as Long) is Short -> (value as Short) <= (filter.value as Short) is Byte -> (value as Byte) <= (filter.value as Byte) else -> throw RuntimeException("Type not handled!") } } FilterType.Smaller -> { when (value) { is Double -> (value as Double) < (filter.value as Double) is Float -> (value as Float) < (filter.value as Float) is Int -> (value as Int) < (filter.value as Int) is Long -> (value as Long) < (filter.value as Long) is Short -> (value as Short) < (filter.value as Short) is Byte -> (value as Byte) < (filter.value as Byte) else -> throw RuntimeException("Type not handled!") } } FilterType.Contains -> value.toString().contains(filter.value.toString()) FilterType.ContainsNot -> !value.toString().contains(filter.value.toString()) FilterType.StartsWith -> value.toString().startsWith(filter.value.toString()) FilterType.EndsWith -> value.toString().endsWith(filter.value.toString()) } valid } }, instance: CellValue, initial: CellValue? = null)