|  | 
| 26 | 26 | 
 | 
| 27 | 27 | import java.io.IOException; | 
| 28 | 28 | import java.io.Writer; | 
|  | 29 | +import java.nio.ByteOrder; | 
| 29 | 30 | import java.util.ArrayList; | 
| 30 | 31 | import java.util.List; | 
| 31 | 32 | 
 | 
| @@ -333,56 +334,49 @@ private CharSequence generateVarData(final List<Token> tokens) | 
| 333 | 334 |  final String characterEncoding = tokens.get(i + 3).encoding().characterEncoding(); | 
| 334 | 335 |  final Token lengthToken = tokens.get(i + 2); | 
| 335 | 336 |  final Integer sizeOfLengthField = Integer.valueOf(lengthToken.size()); | 
| 336 |  | - final String lengthCpp98Type = pythonTypeName( | 
| 337 |  | - lengthToken.encoding().primitiveType(), lengthToken.encoding().byteOrder()); | 
|  | 337 | + final String lengthPythonType = pythonTypeName(lengthToken.encoding().primitiveType(), lengthToken.encoding().byteOrder()); | 
|  | 338 | + | 
|  | 339 | + String byteOrder = ( lengthToken.encoding().byteOrder() == ByteOrder.BIG_ENDIAN ) ? ">" : "<"; | 
| 338 | 340 | 
 | 
| 339 | 341 |  generateFieldMetaAttributeMethod(sb, token, BASE_INDENT); | 
| 340 | 342 | 
 | 
| 341 | 343 |  generateVarDataDescriptors( | 
| 342 |  | - sb, token, propertyName, characterEncoding, lengthToken, sizeOfLengthField, lengthCpp98Type); | 
| 343 |  | - | 
| 344 |  | - /* | 
| 345 |  | - * hmmm.... | 
|  | 344 | + sb, token, propertyName, characterEncoding, lengthToken, sizeOfLengthField, lengthPythonType); | 
| 346 | 345 | 
 | 
| 347 | 346 |  sb.append(String.format( | 
| 348 | 347 |  " def get%1$s(self):\n" + | 
| 349 | 348 |  " sizeOfLengthField = %3$d\n" + | 
| 350 |  | - " lengthPosition = position()\n" + | 
| 351 |  | - " position(lengthPosition + sizeOfLengthField);\n" + | 
| 352 |  | -
 | 
| 353 |  | - " dataLength = struct.unpack_from('%5$s', self.buffer_, lengthPosition())[0]\n" + | 
| 354 |  | - " int bytesToCopy = (length < dataLength) ? length : dataLength;\n" + | 
| 355 |  | - " sbe_uint64_t pos = position();\n" + | 
| 356 |  | - " position(position() + (sbe_uint64_t)dataLength);\n" + | 
| 357 |  | - " ::memcpy(dst, buffer_ + pos, bytesToCopy);\n" + | 
| 358 |  | - " return bytesToCopy;\n" + | 
| 359 |  | - " }\n\n", | 
|  | 349 | + " lengthPosition = self.getPosition()\n" + | 
|  | 350 | + " dataLength = struct.unpack_from('%5$s', self.buffer_, lengthPosition[0])[0]\n" + | 
|  | 351 | + " self.setPosition(lengthPosition[0] + sizeOfLengthField)\n" + | 
|  | 352 | + " pos = self.getPosition()\n" + | 
|  | 353 | + " fmt = '" + byteOrder + "'+str(dataLength)+'c'\n" + | 
|  | 354 | + " data = struct.unpack_from(fmt, self.buffer_, lengthPosition[0])\n" + | 
|  | 355 | + " self.setPosition(pos[0] + dataLength)\n" + | 
|  | 356 | + " return data\n\n", | 
| 360 | 357 |  propertyName, | 
| 361 | 358 |  generateArrayFieldNotPresentCondition(token.version(), BASE_INDENT), | 
| 362 | 359 |  sizeOfLengthField, | 
| 363 | 360 |  formatByteOrderEncoding(lengthToken.encoding().byteOrder(), lengthToken.encoding().primitiveType()), | 
| 364 |  | - lengthCpp98Type | 
|  | 361 | + lengthPythonType | 
| 365 | 362 |  )); | 
| 366 | 363 | 
 | 
| 367 |  | - /* | 
| 368 | 364 |  sb.append(String.format( | 
| 369 |  | - " int set%1$s(const char *src, const int length)\n" + | 
| 370 |  | - " {\n" + | 
| 371 |  | - " sbe_uint64_t sizeOfLengthField = %2$d;\n" + | 
| 372 |  | - " sbe_uint64_t lengthPosition = position();\n" + | 
| 373 |  | - " *((%3$s *)(buffer_ + lengthPosition)) = %4$s((%3$s)length);\n" + | 
| 374 |  | - " position(lengthPosition + sizeOfLengthField);\n" + | 
| 375 |  | - " sbe_uint64_t pos = position();\n" + | 
| 376 |  | - " position(position() + (sbe_uint64_t)length);\n" + | 
| 377 |  | - " ::memcpy(buffer_ + pos, src, length);\n" + | 
| 378 |  | - " return length;\n" + | 
| 379 |  | - " }\n", | 
|  | 365 | + " def set%1$s(self, buffer):\n" + | 
|  | 366 | + " sizeOfLengthField = %2$d\n" + | 
|  | 367 | + " lengthPosition = self.getPosition()\n" + | 
|  | 368 | + " struct.pack_into('%3$s', self.buffer_, lengthPosition[0], len(buffer))\n" + | 
|  | 369 | + " self.setPosition(lengthPosition[0] + sizeOfLengthField)\n" + | 
|  | 370 | + " pos = self.getPosition()\n" + | 
|  | 371 | + " fmt = '" + byteOrder + "c'\n" + | 
|  | 372 | + " for i in range(0,len(buffer)):\n" + | 
|  | 373 | + " struct.pack_into(fmt, self.buffer_, lengthPosition[0]+i, buffer[i])\n" + | 
|  | 374 | + " self.setPosition(pos[0] + len(buffer))\n\n", | 
| 380 | 375 |  propertyName, | 
| 381 | 376 |  sizeOfLengthField, | 
| 382 |  | - lengthCpp98Type, | 
|  | 377 | + lengthPythonType, | 
| 383 | 378 |  formatByteOrderEncoding(lengthToken.encoding().byteOrder(), lengthToken.encoding().primitiveType()) | 
| 384 | 379 |  )); | 
| 385 |  | - */ | 
| 386 | 380 |  } | 
| 387 | 381 |  } | 
| 388 | 382 | 
 | 
| @@ -949,8 +943,8 @@ private CharSequence generateMessageFlyweightCode(final Token token) | 
| 949 | 943 |  " self.buffer_ = buffer\n" + | 
| 950 | 944 |  " self.offset_ = offset\n" + | 
| 951 | 945 |  " self.bufferLength_ = bufferLength\n" + | 
| 952 |  | - " self.actingBlockLength_ = sbeBlockLength()\n" + | 
| 953 |  | - " self.actingVersion_ = sbeSchemaVersion()\n" + | 
|  | 946 | + " self.actingBlockLength_ = self.sbeBlockLength()\n" + | 
|  | 947 | + " self.actingVersion_ = self.sbeSchemaVersion()\n" + | 
| 954 | 948 |  " self.setPosition(offset + self.actingBlockLength_)\n" + | 
| 955 | 949 |  " return self\n\n" + | 
| 956 | 950 | 
 | 
|  | 
0 commit comments