Skip to content

Commit

Permalink
check in
Browse files Browse the repository at this point in the history
  • Loading branch information
carterharrison committed Nov 21, 2018
1 parent f4e685a commit fcca678
Show file tree
Hide file tree
Showing 3 changed files with 53 additions and 7 deletions.
Original file line number Diff line number Diff line change
@@ -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


Expand Down Expand Up @@ -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()
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -27,14 +27,13 @@ open class XyoObjectIterator (private val item : ByteArray) : Iterator<ByteArray
val startingIndex = currentOffset
val schemaOfItem = globalSchema ?: getNextHeader()
val sizeOfObject = readSizeOfObject(schemaOfItem.sizeIdentifier)
checkBounds(sizeOfObject - 1)
checkBounds(sizeOfObject - schemaOfItem.sizeIdentifier)

if (globalSchema == null) {
currentOffset = startingIndex + sizeOfObject + 2
return item.copyOfRange(startingIndex, startingIndex + sizeOfObject + 2)
}


val buffer = ByteBuffer.allocate(sizeOfObject + 2)
buffer.put(schemaOfItem.header)
buffer.put(item.copyOfRange(startingIndex, startingIndex + sizeOfObject))
Expand Down Expand Up @@ -89,6 +88,22 @@ open class XyoObjectIterator (private val item : ByteArray) : Iterator<ByteArray
return next
}

operator fun get(type: Byte): Array<ByteArray> {
val itemsThatFollowTheType = ArrayList<ByteArray>()

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
Expand All @@ -98,11 +113,15 @@ open class XyoObjectIterator (private val item : ByteArray) : Iterator<ByteArray
i++
}

currentOffset = 0
readOwnHeader()
reset()
return i
}

private fun reset() {
currentOffset = 0
readOwnHeader()
}

private fun readOwnHeader () {
val setHeader = getNextHeader()
val totalSize = readSizeOfObject(setHeader.sizeIdentifier)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -68,8 +68,6 @@ class XyoObjectIteratorTest {
for (item in iterator) { }

throw Exception("Expected XyoObjectIteratorException to be thrown!")
} catch (e : XyoObjectIteratorException) {
println(e)
}
} catch (e : XyoObjectIteratorException) { }
}
}

0 comments on commit fcca678

Please sign in to comment.