in s2core/src/main/scala/org/apache/s2graph/core/types/v1/InnerVal.scala [139:164]
def transform(l: Long): (Byte, Array[Byte]) = {
if (Byte.MinValue <= l && l <= Byte.MaxValue) {
// val value = if (l < 0) l - Byte.MinValue else l + Byte.MinValue
val key = if (l >= 0) metaByte("byte") else -metaByte("byte")
val value = if (l >= 0) Byte.MaxValue - l else Byte.MinValue - l - 1
val valueBytes = Array.fill(1)(value.toByte)
(key.toByte, valueBytes)
} else if (Short.MinValue <= l && l <= Short.MaxValue) {
val key = if (l >= 0) metaByte("short") else -metaByte("short")
val value = if (l >= 0) Short.MaxValue - l else Short.MinValue - l - 1
val valueBytes = Bytes.toBytes(value.toShort)
(key.toByte, valueBytes)
} else if (Int.MinValue <= l && l <= Int.MaxValue) {
val key = if (l >= 0) metaByte("int") else -metaByte("int")
val value = if (l >= 0) Int.MaxValue - l else Int.MinValue - l - 1
val valueBytes = Bytes.toBytes(value.toInt)
(key.toByte, valueBytes)
} else if (Long.MinValue <= l && l <= Long.MaxValue) {
val key = if (l >= 0) metaByte("long") else -metaByte("long")
val value = if (l >= 0) Long.MaxValue - l else Long.MinValue - l - 1
val valueBytes = Bytes.toBytes(value.toLong)
(key.toByte, valueBytes)
} else {
throw new Exception(s"InnerVal range is out: $l")
}
}