diff --git a/car_fmw/Makefile b/car_fmw/Makefile index 5507b9a349a..b9c45ff7ccc 100644 --- a/car_fmw/Makefile +++ b/car_fmw/Makefile @@ -22,7 +22,7 @@ KT=$(TRANSLATOR_DIR)/build/libs/translator-1.0.jar LD=arm-none-eabi-ld OBJ_COPY=arm-none-eabi-objcopy GDB=arm-none-eabi-gdb -PROTOC=$(PWD)/../proto/build/protoc +PROTOC=$(PWD)/../proto/compiler/build/protoc LL=llc-3.6 LLINK=llvm-link-3.6 diff --git a/car_fmw/src/proto_src/direction.kt b/car_fmw/src/proto_src/direction.kt index 304d525b799..e0ff2adfcb5 100644 --- a/car_fmw/src/proto_src/direction.kt +++ b/car_fmw/src/proto_src/direction.kt @@ -7,7 +7,7 @@ class DirectionRequest private constructor (var command: DirectionRequest.Comman var errorCode: Int = 0 //========== Nested enums declarations =========== - enum class Command(val ord: Int) { + enum class Command(val id: Int) { stop (0), forward (1), backward (2), @@ -31,8 +31,8 @@ class DirectionRequest private constructor (var command: DirectionRequest.Comman //========== Serialization methods =========== fun writeTo (output: CodedOutputStream) { //enum command = 1 - if (command != DirectionRequest.Command.fromIntToCommand(0)) { - output.writeEnum (1, command.ord) + if (command.id != DirectionRequest.Command.fromIntToCommand(0).id) { + output.writeEnum (1, command.id) } //int32 sid = 2 @@ -45,6 +45,7 @@ class DirectionRequest private constructor (var command: DirectionRequest.Comman fun mergeWith (other: DirectionRequest) { command = other.command sid = other.sid + this.errorCode = other.errorCode } fun mergeFromWithSize (input: CodedInputStream, expectedSize: Int) { @@ -61,7 +62,7 @@ class DirectionRequest private constructor (var command: DirectionRequest.Comman fun getSize(fieldNumber: Int): Int { var size = 0 if (command != DirectionRequest.Command.fromIntToCommand(0)) { - size += WireFormat.getEnumSize(1, command.ord) + size += WireFormat.getEnumSize(1, command.id) } if (sid != 0) { size += WireFormat.getInt32Size(2, sid) @@ -73,7 +74,7 @@ class DirectionRequest private constructor (var command: DirectionRequest.Comman fun getSizeNoTag(): Int { var size = 0 if (command != DirectionRequest.Command.fromIntToCommand(0)) { - size += WireFormat.getEnumSize(1, command.ord) + size += WireFormat.getEnumSize(1, command.id) } if (sid != 0) { size += WireFormat.getInt32Size(2, sid) @@ -101,8 +102,8 @@ class DirectionRequest private constructor (var command: DirectionRequest.Comman //========== Serialization methods =========== fun writeTo (output: CodedOutputStream) { //enum command = 1 - if (command != DirectionRequest.Command.fromIntToCommand(0)) { - output.writeEnum (1, command.ord) + if (command.id != DirectionRequest.Command.fromIntToCommand(0).id) { + output.writeEnum (1, command.id) } //int32 sid = 2 @@ -114,7 +115,9 @@ class DirectionRequest private constructor (var command: DirectionRequest.Comman //========== Mutating methods =========== fun build(): DirectionRequest { - return DirectionRequest(command, sid) + val res = DirectionRequest(command, sid) + res.errorCode = errorCode + return res } fun parseFieldFrom(input: CodedInputStream): Boolean { @@ -125,15 +128,23 @@ class DirectionRequest private constructor (var command: DirectionRequest.Comman val wireType = WireFormat.getTagWireType(tag) when(fieldNumber) { 1 -> { - if (wireType != WireType.VARINT) { errorCode = 1; return false } + if (wireType.id != WireType.VARINT.id) { + errorCode = 1 + return false + } command = DirectionRequest.Command.fromIntToCommand(input.readEnumNoTag()) } 2 -> { - if (wireType != WireType.VARINT) { errorCode = 1; return false } + if (wireType.id != WireType.VARINT.id) { + errorCode = 1 + return false + } sid = input.readInt32NoTag() } + else -> errorCode = 4 } - return true} + return true + } fun parseFromWithSize(input: CodedInputStream, expectedSize: Int): DirectionRequest.BuilderDirectionRequest { while(getSizeNoTag() < expectedSize) { @@ -152,7 +163,7 @@ class DirectionRequest private constructor (var command: DirectionRequest.Comman fun getSize(fieldNumber: Int): Int { var size = 0 if (command != DirectionRequest.Command.fromIntToCommand(0)) { - size += WireFormat.getEnumSize(1, command.ord) + size += WireFormat.getEnumSize(1, command.id) } if (sid != 0) { size += WireFormat.getInt32Size(2, sid) @@ -164,7 +175,7 @@ class DirectionRequest private constructor (var command: DirectionRequest.Comman fun getSizeNoTag(): Int { var size = 0 if (command != DirectionRequest.Command.fromIntToCommand(0)) { - size += WireFormat.getEnumSize(1, command.ord) + size += WireFormat.getEnumSize(1, command.id) } if (sid != 0) { size += WireFormat.getInt32Size(2, sid) @@ -194,6 +205,7 @@ class DirectionResponse private constructor (var code: Int) { fun mergeWith (other: DirectionResponse) { code = other.code + this.errorCode = other.errorCode } fun mergeFromWithSize (input: CodedInputStream, expectedSize: Int) { @@ -246,7 +258,9 @@ class DirectionResponse private constructor (var code: Int) { //========== Mutating methods =========== fun build(): DirectionResponse { - return DirectionResponse(code) + val res = DirectionResponse(code) + res.errorCode = errorCode + return res } fun parseFieldFrom(input: CodedInputStream): Boolean { @@ -257,11 +271,16 @@ class DirectionResponse private constructor (var code: Int) { val wireType = WireFormat.getTagWireType(tag) when(fieldNumber) { 1 -> { - if (wireType != WireType.VARINT) { errorCode = 1; return false } + if (wireType.id != WireType.VARINT.id) { + errorCode = 1 + return false + } code = input.readInt32NoTag() } + else -> errorCode = 4 } - return true} + return true + } fun parseFromWithSize(input: CodedInputStream, expectedSize: Int): DirectionResponse.BuilderDirectionResponse { while(getSizeNoTag() < expectedSize) { diff --git a/car_fmw/src/proto_src/route.kt b/car_fmw/src/proto_src/route.kt index 934f1989655..b09629aa0cd 100644 --- a/car_fmw/src/proto_src/route.kt +++ b/car_fmw/src/proto_src/route.kt @@ -67,6 +67,7 @@ class RouteRequest private constructor (var distances: IntArray, var angles: Int fun mergeWith (other: RouteRequest) { distances = distances.plus((other.distances)) angles = angles.plus((other.angles)) + this.errorCode = other.errorCode } fun mergeFromWithSize (input: CodedInputStream, expectedSize: Int) { @@ -85,23 +86,27 @@ class RouteRequest private constructor (var distances: IntArray, var angles: Int if (distances.size != 0) { do { var arraySize = 0 + size += WireFormat.getTagSize(1, WireType.LENGTH_DELIMITED) var i = 0 while (i < distances.size) { - arraySize += WireFormat.getInt32Size(1, distances[i]) + arraySize += WireFormat.getInt32SizeNoTag(distances[i]) i += 1 } size += arraySize + size += WireFormat.getInt32SizeNoTag(arraySize) } while(false) } if (angles.size != 0) { do { var arraySize = 0 + size += WireFormat.getTagSize(2, WireType.LENGTH_DELIMITED) var i = 0 while (i < angles.size) { - arraySize += WireFormat.getInt32Size(2, angles[i]) + arraySize += WireFormat.getInt32SizeNoTag(angles[i]) i += 1 } size += arraySize + size += WireFormat.getInt32SizeNoTag(arraySize) } while(false) } size += WireFormat.getVarint32Size(size) + WireFormat.getTagSize(fieldNumber, WireType.LENGTH_DELIMITED) @@ -113,23 +118,27 @@ class RouteRequest private constructor (var distances: IntArray, var angles: Int if (distances.size != 0) { do { var arraySize = 0 + size += WireFormat.getTagSize(1, WireType.LENGTH_DELIMITED) var i = 0 while (i < distances.size) { - arraySize += WireFormat.getInt32Size(1, distances[i]) + arraySize += WireFormat.getInt32SizeNoTag(distances[i]) i += 1 } size += arraySize + size += WireFormat.getInt32SizeNoTag(arraySize) } while(false) } if (angles.size != 0) { do { var arraySize = 0 + size += WireFormat.getTagSize(2, WireType.LENGTH_DELIMITED) var i = 0 while (i < angles.size) { - arraySize += WireFormat.getInt32Size(2, angles[i]) + arraySize += WireFormat.getInt32SizeNoTag(angles[i]) i += 1 } size += arraySize + size += WireFormat.getInt32SizeNoTag(arraySize) } while(false) } return size @@ -220,7 +229,9 @@ class RouteRequest private constructor (var distances: IntArray, var angles: Int //========== Mutating methods =========== fun build(): RouteRequest { - return RouteRequest(distances, angles) + val res = RouteRequest(distances, angles) + res.errorCode = errorCode + return res } fun parseFieldFrom(input: CodedInputStream): Boolean { @@ -231,7 +242,10 @@ class RouteRequest private constructor (var distances: IntArray, var angles: Int val wireType = WireFormat.getTagWireType(tag) when(fieldNumber) { 1 -> { - if (wireType != WireType.LENGTH_DELIMITED) { errorCode = 1; return false } + if (wireType.id != WireType.LENGTH_DELIMITED.id) { + errorCode = 1 + return false + } val expectedByteSize = input.readInt32NoTag() var newArray = IntArray(0) var readSize = 0 @@ -247,7 +261,10 @@ class RouteRequest private constructor (var distances: IntArray, var angles: Int } while (false) } 2 -> { - if (wireType != WireType.LENGTH_DELIMITED) { errorCode = 1; return false } + if (wireType.id != WireType.LENGTH_DELIMITED.id) { + errorCode = 1 + return false + } val expectedByteSize = input.readInt32NoTag() var newArray = IntArray(0) var readSize = 0 @@ -262,8 +279,10 @@ class RouteRequest private constructor (var distances: IntArray, var angles: Int angles = newArray } while (false) } + else -> errorCode = 4 } - return true} + return true + } fun parseFromWithSize(input: CodedInputStream, expectedSize: Int): RouteRequest.BuilderRouteRequest { while(getSizeNoTag() < expectedSize) { @@ -284,23 +303,27 @@ class RouteRequest private constructor (var distances: IntArray, var angles: Int if (distances.size != 0) { do { var arraySize = 0 + size += WireFormat.getTagSize(1, WireType.LENGTH_DELIMITED) var i = 0 while (i < distances.size) { - arraySize += WireFormat.getInt32Size(1, distances[i]) + arraySize += WireFormat.getInt32SizeNoTag(distances[i]) i += 1 } size += arraySize + size += WireFormat.getInt32SizeNoTag(arraySize) } while(false) } if (angles.size != 0) { do { var arraySize = 0 + size += WireFormat.getTagSize(2, WireType.LENGTH_DELIMITED) var i = 0 while (i < angles.size) { - arraySize += WireFormat.getInt32Size(2, angles[i]) + arraySize += WireFormat.getInt32SizeNoTag(angles[i]) i += 1 } size += arraySize + size += WireFormat.getInt32SizeNoTag(arraySize) } while(false) } size += WireFormat.getVarint32Size(size) + WireFormat.getTagSize(fieldNumber, WireType.LENGTH_DELIMITED) @@ -312,23 +335,27 @@ class RouteRequest private constructor (var distances: IntArray, var angles: Int if (distances.size != 0) { do { var arraySize = 0 + size += WireFormat.getTagSize(1, WireType.LENGTH_DELIMITED) var i = 0 while (i < distances.size) { - arraySize += WireFormat.getInt32Size(1, distances[i]) + arraySize += WireFormat.getInt32SizeNoTag(distances[i]) i += 1 } size += arraySize + size += WireFormat.getInt32SizeNoTag(arraySize) } while(false) } if (angles.size != 0) { do { var arraySize = 0 + size += WireFormat.getTagSize(2, WireType.LENGTH_DELIMITED) var i = 0 while (i < angles.size) { - arraySize += WireFormat.getInt32Size(2, angles[i]) + arraySize += WireFormat.getInt32SizeNoTag(angles[i]) i += 1 } size += arraySize + size += WireFormat.getInt32SizeNoTag(arraySize) } while(false) } return size @@ -338,6 +365,7 @@ class RouteRequest private constructor (var distances: IntArray, var angles: Int } + class RouteResponse private constructor (var code: Int) { //========== Properties =========== //int32 code = 1 @@ -355,6 +383,7 @@ class RouteResponse private constructor (var code: Int) { fun mergeWith (other: RouteResponse) { code = other.code + this.errorCode = other.errorCode } fun mergeFromWithSize (input: CodedInputStream, expectedSize: Int) { @@ -407,7 +436,9 @@ class RouteResponse private constructor (var code: Int) { //========== Mutating methods =========== fun build(): RouteResponse { - return RouteResponse(code) + val res = RouteResponse(code) + res.errorCode = errorCode + return res } fun parseFieldFrom(input: CodedInputStream): Boolean { @@ -418,11 +449,16 @@ class RouteResponse private constructor (var code: Int) { val wireType = WireFormat.getTagWireType(tag) when(fieldNumber) { 1 -> { - if (wireType != WireType.VARINT) { errorCode = 1; return false } + if (wireType.id != WireType.VARINT.id) { + errorCode = 1 + return false + } code = input.readInt32NoTag() } + else -> errorCode = 4 } - return true} + return true + } fun parseFromWithSize(input: CodedInputStream, expectedSize: Int): RouteResponse.BuilderRouteResponse { while(getSizeNoTag() < expectedSize) { @@ -458,3 +494,5 @@ class RouteResponse private constructor (var code: Int) { } } + + diff --git a/translator/src/main/kotlin/org/kotlinnative/translator/BlockCodegen.kt b/translator/src/main/kotlin/org/kotlinnative/translator/BlockCodegen.kt index 1cebd8749cd..696a200962b 100644 --- a/translator/src/main/kotlin/org/kotlinnative/translator/BlockCodegen.kt +++ b/translator/src/main/kotlin/org/kotlinnative/translator/BlockCodegen.kt @@ -871,7 +871,7 @@ abstract class BlockCodegen(val state: TranslationState, val variableManager: Va successExpression = codeBuilder.loadAndGetVariable(successExpression) } - if (successExpression != null) { + if (successExpression != null && resultVariable.type !is LLVMVoidType && resultVariable.type !is LLVMNullType) { codeBuilder.storeVariable(resultVariable, successExpression) } diff --git a/translator/src/main/kotlin/org/kotlinnative/translator/ClassCodegen.kt b/translator/src/main/kotlin/org/kotlinnative/translator/ClassCodegen.kt index 2fa0b1d158a..6252f305727 100644 --- a/translator/src/main/kotlin/org/kotlinnative/translator/ClassCodegen.kt +++ b/translator/src/main/kotlin/org/kotlinnative/translator/ClassCodegen.kt @@ -1,6 +1,5 @@ package org.kotlinnative.translator -import com.jshmrsn.karg.defaultPrintHelpCallback import org.jetbrains.kotlin.descriptors.ClassKind import org.jetbrains.kotlin.psi.KtClass import org.jetbrains.kotlin.psi.KtParameter diff --git a/translator/src/main/kotlin/org/kotlinnative/translator/llvm/types/LLVMCharType.kt b/translator/src/main/kotlin/org/kotlinnative/translator/llvm/types/LLVMCharType.kt index 468ae2ba83b..c05adb92efb 100644 --- a/translator/src/main/kotlin/org/kotlinnative/translator/llvm/types/LLVMCharType.kt +++ b/translator/src/main/kotlin/org/kotlinnative/translator/llvm/types/LLVMCharType.kt @@ -1,10 +1,7 @@ package org.kotlinnative.translator.llvm.types -import org.kotlinnative.translator.exceptions.UnimplementedException -import org.kotlinnative.translator.llvm.LLVMConstant import org.kotlinnative.translator.llvm.LLVMExpression import org.kotlinnative.translator.llvm.LLVMSingleValue -import org.kotlinnative.translator.llvm.LLVMVariable class LLVMCharType() : LLVMType() { override fun operatorLt(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue): LLVMExpression = diff --git a/translator/src/main/kotlin/org/kotlinnative/translator/llvm/types/LLVMType.kt b/translator/src/main/kotlin/org/kotlinnative/translator/llvm/types/LLVMType.kt index ee7c8577695..f4717557471 100644 --- a/translator/src/main/kotlin/org/kotlinnative/translator/llvm/types/LLVMType.kt +++ b/translator/src/main/kotlin/org/kotlinnative/translator/llvm/types/LLVMType.kt @@ -1,10 +1,8 @@ package org.kotlinnative.translator.llvm.types import org.kotlinnative.translator.exceptions.UnimplementedException -import org.kotlinnative.translator.llvm.LLVMConstant import org.kotlinnative.translator.llvm.LLVMExpression import org.kotlinnative.translator.llvm.LLVMSingleValue -import org.kotlinnative.translator.llvm.LLVMVariable abstract class LLVMType() : Cloneable { diff --git a/translator/src/test/kotlin/tests/input/array_extensions_1.txt b/translator/src/test/kotlin/tests/input/array_extensions_1.txt index 7856f082977..c08dd4745fc 100644 --- a/translator/src/test/kotlin/tests/input/array_extensions_1.txt +++ b/translator/src/test/kotlin/tests/input/array_extensions_1.txt @@ -3,3 +3,4 @@ array_extensions_1_copyOfRange() == 779 array_extensions_1_copyOf_extend() == 340 array_extensions_1_plus_element() == 2933 array_extensions_1_plus_array() == 12132 +array_extensions_2_plus_array() == 10 diff --git a/translator/src/test/kotlin/tests/input/serialization_test.txt b/translator/src/test/kotlin/tests/input/serialization_test.txt index 462e2ab9bb4..26a1fd0a657 100644 --- a/translator/src/test/kotlin/tests/input/serialization_test.txt +++ b/translator/src/test/kotlin/tests/input/serialization_test.txt @@ -1,2 +1,2 @@ serialization_test1_Int(1442) == 1442 -serialization_test2_Int(10) +serialization_test2_Int(5) diff --git a/translator/src/test/kotlin/tests/kotlin/array_extensions_1.kt b/translator/src/test/kotlin/tests/kotlin/array_extensions_1.kt index 461d728e941..8a3e6d6521e 100644 --- a/translator/src/test/kotlin/tests/kotlin/array_extensions_1.kt +++ b/translator/src/test/kotlin/tests/kotlin/array_extensions_1.kt @@ -59,4 +59,15 @@ fun array_extensions_1_plus_array(): Int { val maximize = array.plus(secondArray) val ans = maximize[2] + maximize[5] + maximize.size return ans -} \ No newline at end of file +} + +fun array_extensions_2_plus_array(): Int { + var array = IntArray(0) + val nextArray = IntArray(1) + nextArray[0] = 10 + + array = array.plus(nextArray) + println(array[0]) + + return array[0] +} diff --git a/translator/src/test/kotlin/tests/kotlin/serialization_test.kt b/translator/src/test/kotlin/tests/kotlin/serialization_test.kt index 59728c8b7b0..54f8c30f2c1 100644 --- a/translator/src/test/kotlin/tests/kotlin/serialization_test.kt +++ b/translator/src/test/kotlin/tests/kotlin/serialization_test.kt @@ -1,29 +1,29 @@ - -class DirectionResponse private constructor (var code: Int) { +class DirectionResponse private constructor(var code: Int) { //========== Properties =========== //int32 code = 1 var errorCode: Int = 0 //========== Serialization methods =========== - fun writeTo (output: CodedOutputStream) { + fun writeTo(output: CodedOutputStream) { //int32 code = 1 if (code != 0) { - output.writeInt32 (1, code) + output.writeInt32(1, code) } } - fun mergeWith (other: DirectionResponse) { + fun mergeWith(other: DirectionResponse) { code = other.code + this.errorCode = other.errorCode } - fun mergeFromWithSize (input: CodedInputStream, expectedSize: Int) { + fun mergeFromWithSize(input: CodedInputStream, expectedSize: Int) { val builder = DirectionResponse.BuilderDirectionResponse(0) mergeWith(builder.parseFromWithSize(input, expectedSize).build()) } - fun mergeFrom (input: CodedInputStream) { + fun mergeFrom(input: CodedInputStream) { val builder = DirectionResponse.BuilderDirectionResponse(0) mergeWith(builder.parseFrom(input).build()) } @@ -47,7 +47,7 @@ class DirectionResponse private constructor (var code: Int) { } //========== Builder =========== - class BuilderDirectionResponse constructor (var code: Int) { + class BuilderDirectionResponse constructor(var code: Int) { //========== Properties =========== //int32 code = 1 fun setCode(value: Int): DirectionResponse.BuilderDirectionResponse { @@ -58,43 +58,57 @@ class DirectionResponse private constructor (var code: Int) { var errorCode: Int = 0 //========== Serialization methods =========== - fun writeTo (output: CodedOutputStream) { + fun writeTo(output: CodedOutputStream) { //int32 code = 1 if (code != 0) { - output.writeInt32 (1, code) + output.writeInt32(1, code) } } //========== Mutating methods =========== fun build(): DirectionResponse { - return DirectionResponse(code) + val res = DirectionResponse(code) + res.errorCode = errorCode + return res } fun parseFieldFrom(input: CodedInputStream): Boolean { - if (input.isAtEnd()) { return false } + if (input.isAtEnd()) { + return false + } val tag = input.readInt32NoTag() - if (tag == 0) { return false } + if (tag == 0) { + return false + } val fieldNumber = WireFormat.getTagFieldNumber(tag) val wireType = WireFormat.getTagWireType(tag) - when(fieldNumber) { + when (fieldNumber) { 1 -> { - if (wireType != WireType.VARINT) { errorCode = 1; return false } + if (wireType.id != WireType.VARINT.id) { + errorCode = 1 + return false + } code = input.readInt32NoTag() } + else -> errorCode = 4 } - return true} + return true + } fun parseFromWithSize(input: CodedInputStream, expectedSize: Int): DirectionResponse.BuilderDirectionResponse { - while(getSizeNoTag() < expectedSize) { + while (getSizeNoTag() < expectedSize) { parseFieldFrom(input) } - if (getSizeNoTag() > expectedSize) { errorCode = 2 } + if (getSizeNoTag() > expectedSize) { + errorCode = 2 + } return this } fun parseFrom(input: CodedInputStream): DirectionResponse.BuilderDirectionResponse { - while(parseFieldFrom(input)) {} + while (parseFieldFrom(input)) { + } return this } @@ -120,343 +134,382 @@ class DirectionResponse private constructor (var code: Int) { } -class RouteRequest private constructor (var distances: IntArray, var angles: IntArray) { - //========== Properties =========== - //repeated int32 distances = 1 - - //repeated int32 angles = 2 - - var errorCode: Int = 0 - - //========== Serialization methods =========== - fun writeTo (output: CodedOutputStream) { - //repeated int32 distances = 1 - if (distances.size > 0) { - output.writeTag(1, WireType.LENGTH_DELIMITED) - var arrayByteSize = 0 - - if (distances.size != 0) { - do { - var arraySize = 0 - var i = 0 - while (i < distances.size) { - arraySize += WireFormat.getInt32SizeNoTag(distances[i]) - i += 1 - } - arrayByteSize += arraySize - } while(false) - } - output.writeInt32NoTag(arrayByteSize) - - do { - var i = 0 - while (i < distances.size) { - output.writeInt32NoTag (distances[i]) - i += 1 - } - } while(false) - } - - //repeated int32 angles = 2 - if (angles.size > 0) { - output.writeTag(2, WireType.LENGTH_DELIMITED) - var arrayByteSize = 0 - - if (angles.size != 0) { - do { - var arraySize = 0 - var i = 0 - while (i < angles.size) { - arraySize += WireFormat.getInt32SizeNoTag(angles[i]) - i += 1 - } - arrayByteSize += arraySize - } while(false) - } - output.writeInt32NoTag(arrayByteSize) - - do { - var i = 0 - while (i < angles.size) { - output.writeInt32NoTag (angles[i]) - i += 1 - } - } while(false) - } - - } - - fun mergeWith (other: RouteRequest) { - distances = distances.plus((other.distances)) - angles = angles.plus((other.angles)) - } - - fun mergeFromWithSize (input: CodedInputStream, expectedSize: Int) { - val builder = RouteRequest.BuilderRouteRequest(IntArray(0), IntArray(0)) - mergeWith(builder.parseFromWithSize(input, expectedSize).build()) - } - - fun mergeFrom (input: CodedInputStream) { - val builder = RouteRequest.BuilderRouteRequest(IntArray(0), IntArray(0)) - mergeWith(builder.parseFrom(input).build()) - } - - //========== Size-related methods =========== - fun getSize(fieldNumber: Int): Int { - var size = 0 - if (distances.size != 0) { - do { - var arraySize = 0 - var i = 0 - while (i < distances.size) { - arraySize += WireFormat.getInt32Size(1, distances[i]) - i += 1 - } - size += arraySize - } while(false) - } - if (angles.size != 0) { - do { - var arraySize = 0 - var i = 0 - while (i < angles.size) { - arraySize += WireFormat.getInt32Size(2, angles[i]) - i += 1 - } - size += arraySize - } while(false) - } - size += WireFormat.getVarint32Size(size) + WireFormat.getTagSize(fieldNumber, WireType.LENGTH_DELIMITED) - return size - } - - fun getSizeNoTag(): Int { - var size = 0 - if (distances.size != 0) { - do { - var arraySize = 0 - var i = 0 - while (i < distances.size) { - arraySize += WireFormat.getInt32Size(1, distances[i]) - i += 1 - } - size += arraySize - } while(false) - } - if (angles.size != 0) { - do { - var arraySize = 0 - var i = 0 - while (i < angles.size) { - arraySize += WireFormat.getInt32Size(2, angles[i]) - i += 1 - } - size += arraySize - } while(false) - } - return size - } - - //========== Builder =========== - class BuilderRouteRequest constructor (var distances: IntArray, var angles: IntArray) { +class RouteRequest private constructor(var distances: IntArray, var angles: IntArray) { //========== Properties =========== //repeated int32 distances = 1 - fun setDistances(value: IntArray): RouteRequest.BuilderRouteRequest { - distances = value - return this - } - fun setdistancesByIndex(index: Int, value: Int): RouteRequest.BuilderRouteRequest { - distances[index] = value - return this - } //repeated int32 angles = 2 - fun setAngles(value: IntArray): RouteRequest.BuilderRouteRequest { - angles = value - return this - } - fun setanglesByIndex(index: Int, value: Int): RouteRequest.BuilderRouteRequest { - angles[index] = value - return this - } var errorCode: Int = 0 //========== Serialization methods =========== - fun writeTo (output: CodedOutputStream) { - //repeated int32 distances = 1 - if (distances.size > 0) { - output.writeTag(1, WireType.LENGTH_DELIMITED) - var arrayByteSize = 0 + fun writeTo(output: CodedOutputStream) { + //repeated int32 distances = 1 + if (distances.size > 0) { + output.writeTag(1, WireType.LENGTH_DELIMITED) + var arrayByteSize = 0 - if (distances.size != 0) { - do { - var arraySize = 0 - var i = 0 - while (i < distances.size) { - arraySize += WireFormat.getInt32SizeNoTag(distances[i]) - i += 1 + if (distances.size != 0) { + do { + var arraySize = 0 + var i = 0 + while (i < distances.size) { + arraySize += WireFormat.getInt32SizeNoTag(distances[i]) + i += 1 + } + arrayByteSize += arraySize + } while (false) } - arrayByteSize += arraySize - } while(false) + output.writeInt32NoTag(arrayByteSize) + + do { + var i = 0 + while (i < distances.size) { + output.writeInt32NoTag(distances[i]) + i += 1 + } + } while (false) } - output.writeInt32NoTag(arrayByteSize) - do { - var i = 0 - while (i < distances.size) { - output.writeInt32NoTag (distances[i]) - i += 1 - } - } while(false) - } + //repeated int32 angles = 2 + if (angles.size > 0) { + output.writeTag(2, WireType.LENGTH_DELIMITED) + var arrayByteSize = 0 - //repeated int32 angles = 2 - if (angles.size > 0) { - output.writeTag(2, WireType.LENGTH_DELIMITED) - var arrayByteSize = 0 - - if (angles.size != 0) { - do { - var arraySize = 0 - var i = 0 - while (i < angles.size) { - arraySize += WireFormat.getInt32SizeNoTag(angles[i]) - i += 1 + if (angles.size != 0) { + do { + var arraySize = 0 + var i = 0 + while (i < angles.size) { + arraySize += WireFormat.getInt32SizeNoTag(angles[i]) + i += 1 + } + arrayByteSize += arraySize + } while (false) } - arrayByteSize += arraySize - } while(false) - } - output.writeInt32NoTag(arrayByteSize) + output.writeInt32NoTag(arrayByteSize) - do { - var i = 0 - while (i < angles.size) { - output.writeInt32NoTag (angles[i]) - i += 1 - } - } while(false) - } + do { + var i = 0 + while (i < angles.size) { + output.writeInt32NoTag(angles[i]) + i += 1 + } + } while (false) + } } - //========== Mutating methods =========== - fun build(): RouteRequest { - return RouteRequest(distances, angles) + fun mergeWith(other: RouteRequest) { + distances = distances.plus((other.distances)) + angles = angles.plus((other.angles)) + this.errorCode = other.errorCode } - fun parseFieldFrom(input: CodedInputStream): Boolean { - if (input.isAtEnd()) { return false } - val tag = input.readInt32NoTag() - if (tag == 0) { return false } - val fieldNumber = WireFormat.getTagFieldNumber(tag) - val wireType = WireFormat.getTagWireType(tag) - when(fieldNumber) { - 1 -> { - if (wireType != WireType.LENGTH_DELIMITED) { errorCode = 1; return false } - val expectedByteSize = input.readInt32NoTag() - var newArray = IntArray(0) - var readSize = 0 - do { - var i = 0 - while(readSize < expectedByteSize) { - var tmp = IntArray(1) - tmp[0] = input.readInt32NoTag() - newArray = newArray.plus(tmp) - readSize += WireFormat.getInt32SizeNoTag(tmp[0]) - } - distances = newArray - } while (false) - } - 2 -> { - if (wireType != WireType.LENGTH_DELIMITED) { errorCode = 1; return false } - val expectedByteSize = input.readInt32NoTag() - var newArray = IntArray(0) - var readSize = 0 - do { - var i = 0 - while(readSize < expectedByteSize) { - var tmp = IntArray(1) - tmp[0] = input.readInt32NoTag() - newArray = newArray.plus(tmp) - readSize += WireFormat.getInt32SizeNoTag(tmp[0]) - } - angles = newArray - } while (false) - } - } - return true} - - fun parseFromWithSize(input: CodedInputStream, expectedSize: Int): RouteRequest.BuilderRouteRequest { - while(getSizeNoTag() < expectedSize) { - parseFieldFrom(input) - } - if (getSizeNoTag() > expectedSize) { errorCode = 2 } - return this + fun mergeFromWithSize(input: CodedInputStream, expectedSize: Int) { + val builder = RouteRequest.BuilderRouteRequest(IntArray(0), IntArray(0)) + mergeWith(builder.parseFromWithSize(input, expectedSize).build()) } - fun parseFrom(input: CodedInputStream): RouteRequest.BuilderRouteRequest { - while(parseFieldFrom(input)) {} - return this + fun mergeFrom(input: CodedInputStream) { + val builder = RouteRequest.BuilderRouteRequest(IntArray(0), IntArray(0)) + mergeWith(builder.parseFrom(input).build()) } //========== Size-related methods =========== fun getSize(fieldNumber: Int): Int { - var size = 0 - if (distances.size != 0) { - do { - var arraySize = 0 - var i = 0 - while (i < distances.size) { - arraySize += WireFormat.getInt32Size(1, distances[i]) - i += 1 - } - size += arraySize - } while(false) - } - if (angles.size != 0) { - do { - var arraySize = 0 - var i = 0 - while (i < angles.size) { - arraySize += WireFormat.getInt32Size(2, angles[i]) - i += 1 - } - size += arraySize - } while(false) - } - size += WireFormat.getVarint32Size(size) + WireFormat.getTagSize(fieldNumber, WireType.LENGTH_DELIMITED) - return size + var size = 0 + if (distances.size != 0) { + do { + var arraySize = 0 + size += WireFormat.getTagSize(1, WireType.LENGTH_DELIMITED) + var i = 0 + while (i < distances.size) { + arraySize += WireFormat.getInt32SizeNoTag(distances[i]) + i += 1 + } + size += arraySize + size += WireFormat.getInt32SizeNoTag(arraySize) + } while (false) + } + if (angles.size != 0) { + do { + var arraySize = 0 + size += WireFormat.getTagSize(2, WireType.LENGTH_DELIMITED) + var i = 0 + while (i < angles.size) { + arraySize += WireFormat.getInt32SizeNoTag(angles[i]) + i += 1 + } + size += arraySize + size += WireFormat.getInt32SizeNoTag(arraySize) + } while (false) + } + size += WireFormat.getVarint32Size(size) + WireFormat.getTagSize(fieldNumber, WireType.LENGTH_DELIMITED) + return size } fun getSizeNoTag(): Int { - var size = 0 - if (distances.size != 0) { - do { - var arraySize = 0 - var i = 0 - while (i < distances.size) { - arraySize += WireFormat.getInt32Size(1, distances[i]) - i += 1 - } - size += arraySize - } while(false) - } - if (angles.size != 0) { - do { - var arraySize = 0 - var i = 0 - while (i < angles.size) { - arraySize += WireFormat.getInt32Size(2, angles[i]) - i += 1 - } - size += arraySize - } while(false) - } - return size + var size = 0 + if (distances.size != 0) { + do { + var arraySize = 0 + size += WireFormat.getTagSize(1, WireType.LENGTH_DELIMITED) + var i = 0 + while (i < distances.size) { + arraySize += WireFormat.getInt32SizeNoTag(distances[i]) + i += 1 + } + size += arraySize + size += WireFormat.getInt32SizeNoTag(arraySize) + } while (false) + } + if (angles.size != 0) { + do { + var arraySize = 0 + size += WireFormat.getTagSize(2, WireType.LENGTH_DELIMITED) + var i = 0 + while (i < angles.size) { + arraySize += WireFormat.getInt32SizeNoTag(angles[i]) + i += 1 + } + size += arraySize + size += WireFormat.getInt32SizeNoTag(arraySize) + } while (false) + } + return size } - } + //========== Builder =========== + class BuilderRouteRequest constructor(var distances: IntArray, var angles: IntArray) { + //========== Properties =========== + //repeated int32 distances = 1 + fun setDistances(value: IntArray): RouteRequest.BuilderRouteRequest { + distances = value + return this + } + + fun setdistancesByIndex(index: Int, value: Int): RouteRequest.BuilderRouteRequest { + distances[index] = value + return this + } + + //repeated int32 angles = 2 + fun setAngles(value: IntArray): RouteRequest.BuilderRouteRequest { + angles = value + return this + } + + fun setanglesByIndex(index: Int, value: Int): RouteRequest.BuilderRouteRequest { + angles[index] = value + return this + } + + var errorCode: Int = 0 + + //========== Serialization methods =========== + fun writeTo(output: CodedOutputStream) { + //repeated int32 distances = 1 + if (distances.size > 0) { + output.writeTag(1, WireType.LENGTH_DELIMITED) + var arrayByteSize = 0 + + if (distances.size != 0) { + do { + var arraySize = 0 + var i = 0 + while (i < distances.size) { + arraySize += WireFormat.getInt32SizeNoTag(distances[i]) + i += 1 + } + arrayByteSize += arraySize + } while (false) + } + output.writeInt32NoTag(arrayByteSize) + + do { + var i = 0 + while (i < distances.size) { + output.writeInt32NoTag(distances[i]) + i += 1 + } + } while (false) + } + + //repeated int32 angles = 2 + if (angles.size > 0) { + output.writeTag(2, WireType.LENGTH_DELIMITED) + var arrayByteSize = 0 + + if (angles.size != 0) { + do { + var arraySize = 0 + var i = 0 + while (i < angles.size) { + arraySize += WireFormat.getInt32SizeNoTag(angles[i]) + i += 1 + } + arrayByteSize += arraySize + } while (false) + } + output.writeInt32NoTag(arrayByteSize) + + do { + var i = 0 + while (i < angles.size) { + output.writeInt32NoTag(angles[i]) + i += 1 + } + } while (false) + } + + } + + //========== Mutating methods =========== + fun build(): RouteRequest { + val res = RouteRequest(distances, angles) + res.errorCode = errorCode + return res + } + + fun parseFieldFrom(input: CodedInputStream): Boolean { + if (input.isAtEnd()) { + return false + } + val tag = input.readInt32NoTag() + if (tag == 0) { + return false + } + val fieldNumber = WireFormat.getTagFieldNumber(tag) + val wireType = WireFormat.getTagWireType(tag) + when (fieldNumber) { + 1 -> { + if (wireType.id != WireType.LENGTH_DELIMITED.id) { + errorCode = 1 + return false + } + val expectedByteSize = input.readInt32NoTag() + var newArray = IntArray(0) + var readSize = 0 + do { + var i = 0 + while (readSize < expectedByteSize) { + var tmp = IntArray(1) + tmp[0] = input.readInt32NoTag() + println(tmp) + println(newArray) + newArray = newArray.plus(tmp) + println(newArray) + readSize += WireFormat.getInt32SizeNoTag(tmp[0]) + } + distances = newArray + } while (false) + } + 2 -> { + if (wireType.id != WireType.LENGTH_DELIMITED.id) { + errorCode = 1 + return false + } + val expectedByteSize = input.readInt32NoTag() + var newArray = IntArray(0) + var readSize = 0 + do { + var i = 0 + while (readSize < expectedByteSize) { + var tmp = IntArray(1) + tmp[0] = input.readInt32NoTag() + newArray = newArray.plus(tmp) + readSize += WireFormat.getInt32SizeNoTag(tmp[0]) + } + angles = newArray + } while (false) + } + else -> errorCode = 4 + } + return true + } + + fun parseFromWithSize(input: CodedInputStream, expectedSize: Int): RouteRequest.BuilderRouteRequest { + while (getSizeNoTag() < expectedSize) { + parseFieldFrom(input) + } + if (getSizeNoTag() > expectedSize) { + errorCode = 2 + } + return this + } + + fun parseFrom(input: CodedInputStream): RouteRequest.BuilderRouteRequest { + while (parseFieldFrom(input)) { + } + return this + } + + //========== Size-related methods =========== + fun getSize(fieldNumber: Int): Int { + var size = 0 + if (distances.size != 0) { + do { + var arraySize = 0 + size += WireFormat.getTagSize(1, WireType.LENGTH_DELIMITED) + var i = 0 + while (i < distances.size) { + arraySize += WireFormat.getInt32SizeNoTag(distances[i]) + i += 1 + } + size += arraySize + size += WireFormat.getInt32SizeNoTag(arraySize) + } while (false) + } + if (angles.size != 0) { + do { + var arraySize = 0 + size += WireFormat.getTagSize(2, WireType.LENGTH_DELIMITED) + var i = 0 + while (i < angles.size) { + arraySize += WireFormat.getInt32SizeNoTag(angles[i]) + i += 1 + } + size += arraySize + size += WireFormat.getInt32SizeNoTag(arraySize) + } while (false) + } + size += WireFormat.getVarint32Size(size) + WireFormat.getTagSize(fieldNumber, WireType.LENGTH_DELIMITED) + return size + } + + fun getSizeNoTag(): Int { + var size = 0 + if (distances.size != 0) { + do { + var arraySize = 0 + size += WireFormat.getTagSize(1, WireType.LENGTH_DELIMITED) + var i = 0 + while (i < distances.size) { + arraySize += WireFormat.getInt32SizeNoTag(distances[i]) + i += 1 + } + size += arraySize + size += WireFormat.getInt32SizeNoTag(arraySize) + } while (false) + } + if (angles.size != 0) { + do { + var arraySize = 0 + size += WireFormat.getTagSize(2, WireType.LENGTH_DELIMITED) + var i = 0 + while (i < angles.size) { + arraySize += WireFormat.getInt32SizeNoTag(angles[i]) + i += 1 + } + size += arraySize + size += WireFormat.getInt32SizeNoTag(arraySize) + } while (false) + } + return size + } + + } } @@ -483,15 +536,24 @@ fun serialization_test2(size: Int) { val message = RouteRequest.BuilderRouteRequest(arr, arr).build() val buffer = ByteArray(message.getSizeNoTag()) + + i = 0 + while (i < buffer.size) { + buffer[i] = 0 + i++ + } + + val outputStream = CodedOutputStream(buffer) message.writeTo(outputStream) - val inputStream = CodedInputStream(buffer) val receivedMessage = RouteRequest.BuilderRouteRequest(IntArray(1), IntArray(1)).parseFrom(inputStream).build() i = 0 while (i < size) { + println(message.distances[i]) + println(receivedMessage.distances[i]) assert(message.distances[i] == receivedMessage.distances[i]) i++ }