From e82cdcf0a0c1d6d48a5a9363061ce696b07f9409 Mon Sep 17 00:00:00 2001 From: Carter Harrison Date: Tue, 20 Nov 2018 16:32:59 -0800 Subject: [PATCH 1/4] remove expermental type --- .../objects/XyoObjectCreator.kt | 9 ++- .../objects/sets/XyoObjectIterator.kt | 3 +- .../schema/XyoObjectSchema.kt | 61 ++++++++----------- .../XyoObjectCreatorTest.kt | 7 +-- .../XyoObjectIteratorTest.kt | 1 - .../XyoObjectSetCreatorTest.kt | 1 - 6 files changed, 35 insertions(+), 47 deletions(-) diff --git a/src/main/java/network/xyo/sdkobjectmodelkotlin/objects/XyoObjectCreator.kt b/src/main/java/network/xyo/sdkobjectmodelkotlin/objects/XyoObjectCreator.kt index aca8339..cb1f211 100644 --- a/src/main/java/network/xyo/sdkobjectmodelkotlin/objects/XyoObjectCreator.kt +++ b/src/main/java/network/xyo/sdkobjectmodelkotlin/objects/XyoObjectCreator.kt @@ -7,7 +7,6 @@ import java.nio.ByteBuffer /** * An object for creating Xyo Objects. */ -@ExperimentalUnsignedTypes object XyoObjectCreator { /** @@ -24,16 +23,16 @@ object XyoObjectCreator { /** * Gets the best size of size to use. */ - fun getSmartSize (sizeOfItem : UInt) : Int { - if (sizeOfItem + 1.toUInt() <= UByte.MAX_VALUE) { + fun getSmartSize (sizeOfItem : Int) : Int { + if (sizeOfItem + 1 <= Byte.MAX_VALUE) { return 1 } - if (sizeOfItem + 2.toUInt() <= UShort.MAX_VALUE) { + if (sizeOfItem + 2 <= Short.MAX_VALUE) { return 2 } - if (sizeOfItem + 4.toUInt() <= UInt.MAX_VALUE) { + if (sizeOfItem + 4 <= Int.MAX_VALUE) { return 4 } diff --git a/src/main/java/network/xyo/sdkobjectmodelkotlin/objects/sets/XyoObjectIterator.kt b/src/main/java/network/xyo/sdkobjectmodelkotlin/objects/sets/XyoObjectIterator.kt index fdd31ad..8e3d4ff 100644 --- a/src/main/java/network/xyo/sdkobjectmodelkotlin/objects/sets/XyoObjectIterator.kt +++ b/src/main/java/network/xyo/sdkobjectmodelkotlin/objects/sets/XyoObjectIterator.kt @@ -7,11 +7,10 @@ import java.nio.Buffer import java.nio.ByteBuffer import java.util.ArrayList -@ExperimentalUnsignedTypes /** * An Iterator for iterating over sets created with XyoObjectSetCreator. */ -class XyoObjectIterator (private val item : ByteArray) : Iterator { +open class XyoObjectIterator (private val item : ByteArray) : Iterator { private var globalSchema : XyoObjectSchema? = null private var currentOffset = 0 diff --git a/src/main/java/network/xyo/sdkobjectmodelkotlin/schema/XyoObjectSchema.kt b/src/main/java/network/xyo/sdkobjectmodelkotlin/schema/XyoObjectSchema.kt index a43ea5b..6a3b88b 100644 --- a/src/main/java/network/xyo/sdkobjectmodelkotlin/schema/XyoObjectSchema.kt +++ b/src/main/java/network/xyo/sdkobjectmodelkotlin/schema/XyoObjectSchema.kt @@ -3,6 +3,8 @@ package network.xyo.sdkobjectmodelkotlin.schema import network.xyo.sdkobjectmodelkotlin.exceptions.XyoSchemaException import org.json.JSONObject import java.math.BigInteger +import kotlin.experimental.and +import kotlin.experimental.or /** * A information class used to represent all identifying factors in the XyoObjectModel. This is typically represented @@ -60,14 +62,13 @@ abstract class XyoObjectSchema { * * @throws XyoSchemaException when the sizeIdentifier is not 1, 2, 4, 8, or null */ - @ExperimentalUnsignedTypes - private val sizeIdentifierByte : UByte + private val sizeIdentifierByte : Byte get() { when (sizeIdentifier) { - 1 -> return (0x00.toUByte()) - 2 -> return (0x40.toUByte()) - 4 -> return (0x80.toUByte()) - 8 -> return (0xC0.toUByte()) + 1 -> return (0x00) + 2 -> return (0x40) + 4 -> return (0x80.toByte()) + 8 -> return (0xC0.toByte()) } throw XyoSchemaException("Invalid Size $sizeIdentifier") } @@ -76,35 +77,32 @@ abstract class XyoObjectSchema { * The 3rd most significant bit that represent sif the object is iterable. This value is obtained from * isIterable. */ - @ExperimentalUnsignedTypes - private val iterableByte : UByte + private val iterableByte : Byte get() { if (isIterable) { - return 0x20.toUByte() + return 0x20 } - return 0x00.toUByte() + return 0x00 } /** * The 4th most significant bit that represents if the following object is typed. */ - @ExperimentalUnsignedTypes - private val typedByte : UByte + private val typedByte : Byte get() { if (isTyped) { - return 0x00.toUByte() or (0x10.toUByte()) + return (0x00.toByte() or 0x10.toByte()) } - return 0x00.toUByte() + return 0x00.toByte() } /** * The first byte of the object. This value contains the sizeIdentifierByte, the iterableByte, the typedByte, and * four reserved bits (4 least significant bits). */ - @ExperimentalUnsignedTypes - val encodingCatalogue : UByte + val encodingCatalogue : Byte get() { return sizeIdentifierByte or iterableByte or typedByte } @@ -113,31 +111,29 @@ abstract class XyoObjectSchema { * The header of the schema or object, with the first byte being the encodingCatalogue, and the second catalogue ] * being the ID of the object. */ - @ExperimentalUnsignedTypes val header : ByteArray get() { - return byteArrayOf(encodingCatalogue.toByte(), id) + return byteArrayOf(encodingCatalogue, id) } companion object { // This method creates a schema object with given header. - @ExperimentalUnsignedTypes fun createFromHeader (byteArray: ByteArray) : XyoObjectSchema { return object : XyoObjectSchema() { override val id: Byte get() = byteArray[1] override val isIterable: Boolean - get() = readIsIterable(byteArray[0].toUByte()) + get() = readIsIterable(byteArray[0]) override val isTyped: Boolean - get() = readIsTyped(byteArray[0].toUByte()) + get() = readIsTyped(byteArray[0]) override val meta: XyoObjectSchemaMeta? = null override val sizeIdentifier: Int - get() = readSizeIdentifierFromEncodingCatalogue(byteArray[0].toUByte()) + get() = readSizeIdentifierFromEncodingCatalogue(byteArray[0]) } } @@ -145,40 +141,37 @@ abstract class XyoObjectSchema { /** * Checks if the encodingCatalogue is typed. The 3rd most significant bit. */ - @ExperimentalUnsignedTypes - private fun readIsTyped (encodingCatalogue: UByte) : Boolean { - return (encodingCatalogue and 0x10.toUByte()).toInt() != 0 + private fun readIsTyped (encodingCatalogue: Byte) : Boolean { + return (encodingCatalogue and 0x10).toInt() != 0 } /** * Checks if the object is iterable. The 4th most significant bit. */ - @ExperimentalUnsignedTypes - private fun readIsIterable (encodingCatalogue: UByte) : Boolean { - return (encodingCatalogue and 0x20.toUByte()).toInt() != 0 + private fun readIsIterable (encodingCatalogue: Byte) : Boolean { + return (encodingCatalogue and 0x20).toInt() != 0 } /** * Checks the size identifier from the encodingCatalogue. The 2 most significant bits. */ - @ExperimentalUnsignedTypes - private fun readSizeIdentifierFromEncodingCatalogue (encodingCatalogue: UByte) : Int { + private fun readSizeIdentifierFromEncodingCatalogue (encodingCatalogue: Byte) : Int { // masking the first two bits to get the result // 0xC0 == 11000000 - if (encodingCatalogue and 0xC0.toUByte() == 0x00.toUByte()) { + if (encodingCatalogue and 0xC0.toByte() == 0x00.toByte()) { return 1 } - if (encodingCatalogue and 0xC0.toUByte() == 0x40.toUByte()) { + if (encodingCatalogue and 0xC0 .toByte() == 0x40.toByte()) { return 2 } - if (encodingCatalogue and 0xC0.toUByte() == 0x80.toUByte()) { + if (encodingCatalogue and 0xC0.toByte() == 0x80.toByte()) { return 4 } - if (encodingCatalogue and 0xC0.toUByte() == 0xC0.toUByte()) { + if (encodingCatalogue and 0xC0.toByte() == 0xC0.toByte()) { return 8 } diff --git a/src/test/java/network/xyo/sdkobjectmodelkotlin/XyoObjectCreatorTest.kt b/src/test/java/network/xyo/sdkobjectmodelkotlin/XyoObjectCreatorTest.kt index cdf27ba..0fabae4 100644 --- a/src/test/java/network/xyo/sdkobjectmodelkotlin/XyoObjectCreatorTest.kt +++ b/src/test/java/network/xyo/sdkobjectmodelkotlin/XyoObjectCreatorTest.kt @@ -5,28 +5,27 @@ import network.xyo.sdkobjectmodelkotlin.schema.XyoObjectSchema import org.junit.Assert import org.junit.Test -@ExperimentalUnsignedTypes class XyoObjectCreatorTest { @Test fun testSmartSizeForByte () { val sizeOfImageryObject = 254 val bestWayToEncodeSize = 1 - Assert.assertEquals(bestWayToEncodeSize, XyoObjectCreator.getSmartSize(sizeOfImageryObject.toUInt())) + Assert.assertEquals(bestWayToEncodeSize, XyoObjectCreator.getSmartSize(sizeOfImageryObject)) } @Test fun testSmartSizeForShort () { val sizeOfImageryObject = 64_000 val bestWayToEncodeSize = 2 - Assert.assertEquals(bestWayToEncodeSize, XyoObjectCreator.getSmartSize(sizeOfImageryObject.toUInt())) + Assert.assertEquals(bestWayToEncodeSize, XyoObjectCreator.getSmartSize(sizeOfImageryObject)) } @Test fun testSmartSizeForInt () { val sizeOfImageryObject = 66_000 val bestWayToEncodeSize = 4 - Assert.assertEquals(bestWayToEncodeSize, XyoObjectCreator.getSmartSize(sizeOfImageryObject.toUInt())) + Assert.assertEquals(bestWayToEncodeSize, XyoObjectCreator.getSmartSize(sizeOfImageryObject)) } @Test diff --git a/src/test/java/network/xyo/sdkobjectmodelkotlin/XyoObjectIteratorTest.kt b/src/test/java/network/xyo/sdkobjectmodelkotlin/XyoObjectIteratorTest.kt index 11341a1..c1601df 100644 --- a/src/test/java/network/xyo/sdkobjectmodelkotlin/XyoObjectIteratorTest.kt +++ b/src/test/java/network/xyo/sdkobjectmodelkotlin/XyoObjectIteratorTest.kt @@ -4,7 +4,6 @@ import network.xyo.sdkobjectmodelkotlin.objects.sets.XyoObjectIterator import org.junit.Assert import org.junit.Test -@ExperimentalUnsignedTypes class XyoObjectIteratorTest { @Test diff --git a/src/test/java/network/xyo/sdkobjectmodelkotlin/XyoObjectSetCreatorTest.kt b/src/test/java/network/xyo/sdkobjectmodelkotlin/XyoObjectSetCreatorTest.kt index 403187a..fb3e50a 100644 --- a/src/test/java/network/xyo/sdkobjectmodelkotlin/XyoObjectSetCreatorTest.kt +++ b/src/test/java/network/xyo/sdkobjectmodelkotlin/XyoObjectSetCreatorTest.kt @@ -7,7 +7,6 @@ import network.xyo.sdkobjectmodelkotlin.schema.XyoObjectSchema import org.junit.Assert import org.junit.Test -@ExperimentalUnsignedTypes class XyoObjectSetCreatorTest { private val objectOneSchema = object : XyoObjectSchema() { From 45d4d8e26eae26f32526d8dfc5c43e933b91d88e Mon Sep 17 00:00:00 2001 From: Carter Harrison Date: Tue, 20 Nov 2018 17:03:11 -0800 Subject: [PATCH 2/4] unsigned rework --- build.gradle | 4 +++- .../xyo/sdkobjectmodelkotlin/objects/XyoObjectCreator.kt | 4 ++-- .../sdkobjectmodelkotlin/objects/sets/XyoObjectIterator.kt | 7 +++++-- 3 files changed, 10 insertions(+), 5 deletions(-) diff --git a/build.gradle b/build.gradle index 4f94028..40446fa 100644 --- a/build.gradle +++ b/build.gradle @@ -1,7 +1,10 @@ + + apply plugin: 'kotlin' apply plugin: 'java' apply plugin: "jacoco" + group 'com.github.XYOracleNetwork' version '1.0-SNAPSHOT' @@ -31,7 +34,6 @@ buildscript { } dependencies { classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.3.0" - classpath "org.junit.platform:junit-platform-gradle-plugin:1.0.0-M4" } } diff --git a/src/main/java/network/xyo/sdkobjectmodelkotlin/objects/XyoObjectCreator.kt b/src/main/java/network/xyo/sdkobjectmodelkotlin/objects/XyoObjectCreator.kt index cb1f211..ce007a6 100644 --- a/src/main/java/network/xyo/sdkobjectmodelkotlin/objects/XyoObjectCreator.kt +++ b/src/main/java/network/xyo/sdkobjectmodelkotlin/objects/XyoObjectCreator.kt @@ -24,11 +24,11 @@ object XyoObjectCreator { * Gets the best size of size to use. */ fun getSmartSize (sizeOfItem : Int) : Int { - if (sizeOfItem + 1 <= Byte.MAX_VALUE) { + if (sizeOfItem + 1 <= 255) { return 1 } - if (sizeOfItem + 2 <= Short.MAX_VALUE) { + if (sizeOfItem + 2 <= 65535) { return 2 } diff --git a/src/main/java/network/xyo/sdkobjectmodelkotlin/objects/sets/XyoObjectIterator.kt b/src/main/java/network/xyo/sdkobjectmodelkotlin/objects/sets/XyoObjectIterator.kt index 8e3d4ff..da32ecc 100644 --- a/src/main/java/network/xyo/sdkobjectmodelkotlin/objects/sets/XyoObjectIterator.kt +++ b/src/main/java/network/xyo/sdkobjectmodelkotlin/objects/sets/XyoObjectIterator.kt @@ -6,6 +6,7 @@ import java.lang.reflect.Array import java.nio.Buffer import java.nio.ByteBuffer import java.util.ArrayList +import kotlin.experimental.and /** * An Iterator for iterating over sets created with XyoObjectSetCreator. @@ -25,6 +26,7 @@ open class XyoObjectIterator (private val item : ByteArray) : Iterator return buffer[0].toInt() - 2 -> return buffer.getShort(0).toInt() + 1 -> return (buffer[0] and 0xFF.toByte()).toInt() + 2 -> return (buffer.getShort(0).toInt() and 0xFFFF) 4 -> return buffer.getInt(0) } From f4e685aa1133617a97383b807134b1dd9eee13f2 Mon Sep 17 00:00:00 2001 From: Carter Harrison Date: Tue, 20 Nov 2018 17:46:50 -0800 Subject: [PATCH 3/4] check bounds --- .../objects/sets/XyoObjectIterator.kt | 18 +++++++++--------- .../schema/XyoObjectSchema.kt | 4 ++++ .../XyoObjectIteratorTest.kt | 14 ++++++++++++++ .../XyoObjectSchemaTest.kt | 15 +++++++++++++++ 4 files changed, 42 insertions(+), 9 deletions(-) diff --git a/src/main/java/network/xyo/sdkobjectmodelkotlin/objects/sets/XyoObjectIterator.kt b/src/main/java/network/xyo/sdkobjectmodelkotlin/objects/sets/XyoObjectIterator.kt index da32ecc..dba301e 100644 --- a/src/main/java/network/xyo/sdkobjectmodelkotlin/objects/sets/XyoObjectIterator.kt +++ b/src/main/java/network/xyo/sdkobjectmodelkotlin/objects/sets/XyoObjectIterator.kt @@ -2,10 +2,7 @@ package network.xyo.sdkobjectmodelkotlin.objects.sets import network.xyo.sdkobjectmodelkotlin.exceptions.XyoObjectIteratorException import network.xyo.sdkobjectmodelkotlin.schema.XyoObjectSchema -import java.lang.reflect.Array -import java.nio.Buffer import java.nio.ByteBuffer -import java.util.ArrayList import kotlin.experimental.and /** @@ -30,12 +27,14 @@ open class XyoObjectIterator (private val item : ByteArray) : Iterator item.size) { + throw XyoObjectIteratorException("Out of size. Length: ${item.size}, To Read: ${size + currentOffset}") + } + } /** * Reads the size of the object at the current offset. */ private fun readSizeOfObject (sizeToReadForSize : Int) : Int { val buffer = ByteBuffer.allocate(sizeToReadForSize) + checkBounds(sizeToReadForSize) currentOffset += sizeToReadForSize buffer.put(item.copyOfRange(currentOffset - sizeToReadForSize, currentOffset)) - when (sizeToReadForSize) { 1 -> return (buffer[0] and 0xFF.toByte()).toInt() 2 -> return (buffer.getShort(0).toInt() and 0xFFFF) @@ -66,11 +70,7 @@ open class XyoObjectIterator (private val item : ByteArray) : Iterator item.size) { - throw XyoObjectIteratorException("Out of size, trying to read header at offset: $currentOffset. " + - "Max: ${item.size}") - } - + checkBounds(2) currentOffset += 2 return XyoObjectSchema.createFromHeader(item.copyOfRange(currentOffset - 2, currentOffset)) } diff --git a/src/main/java/network/xyo/sdkobjectmodelkotlin/schema/XyoObjectSchema.kt b/src/main/java/network/xyo/sdkobjectmodelkotlin/schema/XyoObjectSchema.kt index 6a3b88b..90c8cbf 100644 --- a/src/main/java/network/xyo/sdkobjectmodelkotlin/schema/XyoObjectSchema.kt +++ b/src/main/java/network/xyo/sdkobjectmodelkotlin/schema/XyoObjectSchema.kt @@ -120,6 +120,10 @@ abstract class XyoObjectSchema { // This method creates a schema object with given header. fun createFromHeader (byteArray: ByteArray) : XyoObjectSchema { + if (byteArray.size != 2) { + throw XyoSchemaException("Expected header size to be 2, saw: ${byteArray.size}") + } + return object : XyoObjectSchema() { override val id: Byte get() = byteArray[1] diff --git a/src/test/java/network/xyo/sdkobjectmodelkotlin/XyoObjectIteratorTest.kt b/src/test/java/network/xyo/sdkobjectmodelkotlin/XyoObjectIteratorTest.kt index c1601df..3426184 100644 --- a/src/test/java/network/xyo/sdkobjectmodelkotlin/XyoObjectIteratorTest.kt +++ b/src/test/java/network/xyo/sdkobjectmodelkotlin/XyoObjectIteratorTest.kt @@ -1,5 +1,6 @@ package network.xyo.sdkobjectmodelkotlin +import network.xyo.sdkobjectmodelkotlin.exceptions.XyoObjectIteratorException import network.xyo.sdkobjectmodelkotlin.objects.sets.XyoObjectIterator import org.junit.Assert import org.junit.Test @@ -58,4 +59,17 @@ class XyoObjectIteratorTest { Assert.assertEquals(2, iterator.size) } + + @Test + fun testWrongTypes () { + try { + val iterator = XyoObjectIterator(byteArrayOf(0x20, 0x41, 0x07, 0x00, 0x44, 0x02, 0x13, 0x02, 0x37)) + + for (item in iterator) { } + + throw Exception("Expected XyoObjectIteratorException to be thrown!") + } catch (e : XyoObjectIteratorException) { + println(e) + } + } } \ No newline at end of file diff --git a/src/test/java/network/xyo/sdkobjectmodelkotlin/XyoObjectSchemaTest.kt b/src/test/java/network/xyo/sdkobjectmodelkotlin/XyoObjectSchemaTest.kt index 934ade4..945499f 100644 --- a/src/test/java/network/xyo/sdkobjectmodelkotlin/XyoObjectSchemaTest.kt +++ b/src/test/java/network/xyo/sdkobjectmodelkotlin/XyoObjectSchemaTest.kt @@ -3,6 +3,7 @@ package network.xyo.sdkobjectmodelkotlin import network.xyo.sdkobjectmodelkotlin.schema.XyoObjectSchema import org.junit.Assert import org.junit.Test +import java.util.* @ExperimentalUnsignedTypes class XyoObjectSchemaTest { @@ -128,4 +129,18 @@ class XyoObjectSchemaTest { Assert.assertEquals("Stub Signature.", schema.meta?.name) Assert.assertEquals("Stub Signature for testing.", schema.meta?.desc) } + + @Test + fun testEveryHeader () { + for (i in 0..255) { + for (j in 0..255) { + val schema = XyoObjectSchema.createFromHeader(byteArrayOf(i.toByte(), j.toByte())) + + // 0x0f = 11110000 + // we mask off the bottom 4 bits (reserved bits) + Assert.assertEquals((i and 0xf0).toByte(), schema.encodingCatalogue) + Assert.assertEquals(j.toByte(), schema.id) + } + } + } } \ No newline at end of file From fcca6785bdfa5e7681ff1b07839af4f6df0b85db Mon Sep 17 00:00:00 2001 From: Carter Harrison Date: Wed, 21 Nov 2018 13:47:30 -0800 Subject: [PATCH 4/4] check in --- .../objects/XyoObjectCreator.kt | 29 +++++++++++++++++++ .../objects/sets/XyoObjectIterator.kt | 27 ++++++++++++++--- .../XyoObjectIteratorTest.kt | 4 +-- 3 files changed, 53 insertions(+), 7 deletions(-) diff --git a/src/main/java/network/xyo/sdkobjectmodelkotlin/objects/XyoObjectCreator.kt b/src/main/java/network/xyo/sdkobjectmodelkotlin/objects/XyoObjectCreator.kt index ce007a6..f2fbfe1 100644 --- a/src/main/java/network/xyo/sdkobjectmodelkotlin/objects/XyoObjectCreator.kt +++ b/src/main/java/network/xyo/sdkobjectmodelkotlin/objects/XyoObjectCreator.kt @@ -1,6 +1,10 @@ package network.xyo.sdkobjectmodelkotlin.objects +import network.xyo.sdkobjectmodelkotlin.objects.sets.XyoObjectIterator import network.xyo.sdkobjectmodelkotlin.schema.XyoObjectSchema +import org.json.JSONArray +import org.json.JSONObject +import java.lang.StringBuilder import java.nio.ByteBuffer @@ -45,4 +49,29 @@ object XyoObjectCreator { return item.copyOfRange(2 + objectSchema.sizeIdentifier, item.size) } + fun itemToJSON (item : ByteArray) : JSONArray { + val itemHeader = XyoObjectSchema.createFromHeader(item.copyOfRange(0, 2)) + val rootJsonObject = JSONArray() + + if (itemHeader.isIterable) { + for (subItem in XyoObjectIterator(item)) { + rootJsonObject.put(itemToJSON(subItem)) + } + } else { + rootJsonObject.put(item.toHexString()) + } + + return rootJsonObject + } + + private fun ByteArray.toHexString(): String { + val builder = StringBuilder() + val it = this.iterator() + builder.append("0x") + while (it.hasNext()) { + builder.append(String.format("%02X", it.next())) + } + + return builder.toString() + } } \ No newline at end of file diff --git a/src/main/java/network/xyo/sdkobjectmodelkotlin/objects/sets/XyoObjectIterator.kt b/src/main/java/network/xyo/sdkobjectmodelkotlin/objects/sets/XyoObjectIterator.kt index dba301e..bbfb3d1 100644 --- a/src/main/java/network/xyo/sdkobjectmodelkotlin/objects/sets/XyoObjectIterator.kt +++ b/src/main/java/network/xyo/sdkobjectmodelkotlin/objects/sets/XyoObjectIterator.kt @@ -27,14 +27,13 @@ open class XyoObjectIterator (private val item : ByteArray) : Iterator { + val itemsThatFollowTheType = ArrayList() + + while (hasNext()) { + val next = next() + val nextHeader = XyoObjectSchema.createFromHeader(next.copyOfRange(0, 2)) + + if (nextHeader.id == type) { + itemsThatFollowTheType.add(next) + } + } + + reset() + return itemsThatFollowTheType.toTypedArray() + } + val size : Int get() { var i = 0 @@ -98,11 +113,15 @@ open class XyoObjectIterator (private val item : ByteArray) : Iterator