From 756db579d92270ca7cce13f3eda8e4b17ac0039f Mon Sep 17 00:00:00 2001 From: Edoardo La Greca Date: Fri, 1 Aug 2025 17:11:19 +0200 Subject: turn SizedMessageField into SizedInteger --- src/main/kotlin/SizedInteger.kt | 36 ++++++++++++++++++++++++++++++++++++ src/main/kotlin/SizedMessageField.kt | 35 ----------------------------------- 2 files changed, 36 insertions(+), 35 deletions(-) create mode 100644 src/main/kotlin/SizedInteger.kt delete mode 100644 src/main/kotlin/SizedMessageField.kt (limited to 'src') diff --git a/src/main/kotlin/SizedInteger.kt b/src/main/kotlin/SizedInteger.kt new file mode 100644 index 0000000..48e4e25 --- /dev/null +++ b/src/main/kotlin/SizedInteger.kt @@ -0,0 +1,36 @@ +import java.math.BigInteger + +/** + * [SizedInteger] represents an unsigned integer number of arbitrary yet fixed length. It's useful for storing integers + * got from a connection as message fields. + * + * @param size The size of the field, measured in bytes. + * @param value The value of the field. + * + * @throws IllegalArgumentException if the size required to store the provided value is bigger than the provided size. + */ +class SizedInteger(val size: ULong, value: BigInteger) { + init { + if (!this.sizeOk(size, value)) { + throw IllegalArgumentException() + } + } + + constructor(size: ULong) : this(size, 0.toBigInteger()) + + /** + * @throws IllegalStateException on set if the declared size is not enough for the new value. + */ + var value = value + set(value) { + if (!this.sizeOk(value)) { + throw IllegalStateException() + } + } + + private fun sizeOk(size: ULong, value: BigInteger): Boolean { + val requiredSize = value.toByteArray().size.toUInt() + return requiredSize <= size + } + private fun sizeOk(value: BigInteger): Boolean = sizeOk(this.size, value) +} \ No newline at end of file diff --git a/src/main/kotlin/SizedMessageField.kt b/src/main/kotlin/SizedMessageField.kt deleted file mode 100644 index c40a2a6..0000000 --- a/src/main/kotlin/SizedMessageField.kt +++ /dev/null @@ -1,35 +0,0 @@ -import java.math.BigInteger - -/** - * [SizedMessageField] represents an unsigned integer number stored in a message field (i.e. a contiguous region of - * memory) of fixed size. - * - * @param size The size of the field, measured in bytes. - * @param value The value of the field. - * - * @throws IllegalArgumentException if the size required to store the provided value is bigger than the provided size. - */ -class SizedMessageField(val size: Int, value: BigInteger) { - init { - if (!this.sizeOk(size, value)) { - throw IllegalArgumentException() - } - } - - /** - * @throws IllegalStateException on set if the declared size is not enough for the new value. - */ - var value = value - set(value) { - if (!this.sizeOk(value)) { - throw IllegalStateException() - } - } - - private fun sizeOk(size: Int, value: BigInteger): Boolean { - val requiredSize = value.toByteArray().size - return requiredSize <= size - } - private fun sizeOk(value: BigInteger): Boolean = sizeOk(this.size, value) - private fun sizeOk(): Boolean = sizeOk(this.size, this.value) -} \ No newline at end of file -- cgit v1.2.3