From cb7261d7995dba62e1e3ef217a75187b1780ee14 Mon Sep 17 00:00:00 2001 From: James McLean Date: Wed, 24 Jun 2015 16:45:08 -0400 Subject: [PATCH] Changed strings from variable length to fixed length. --- README.md | 7 ++- raw_packer.cpp | 132 ++++++++++++++++++++++++++++++++++++++----------- raw_packer.h | 2 + 3 files changed, 107 insertions(+), 34 deletions(-) diff --git a/README.md b/README.md index 821ca26..41efb2c 100644 --- a/README.md +++ b/README.md @@ -15,8 +15,8 @@ Simply drop the `rawpacker` directory in your `godot/modules` directory and buil ```python var raw_packer = RawPacker.new() -var raw_array = raw_packer.pack("?iisfH", [false,1,2,"helloworld",3.14,-42]) -var array = raw_packer.unpack("?iisfH", raw_array) +var raw_array = raw_packer.pack("?iis16fH", [false,1,2,"helloworld",3.14,-42]) +var array = raw_packer.unpack("?iis16fH", raw_array) print(array) ``` @@ -40,8 +40,7 @@ False, 1, 2, helloworld, 3.14, 65494 | Q | unsigned long long | integer | 8 | | f | float | real | 4 | | d | double | real | 8 | -| s | char[] | string | varying | -| p | char[] | string | varying | +| s# | char[] | string | # | ## License Copyright (c) 2015 James McLean diff --git a/raw_packer.cpp b/raw_packer.cpp index 87432dc..3dec406 100644 --- a/raw_packer.cpp +++ b/raw_packer.cpp @@ -8,9 +8,13 @@ Error RawPacker::encode(const String& fmt, const Array& array, uint8_t *buf, int Variant::Type type; + int j=0; + for (int i=0;i=array.size(),ERR_INVALID_DATA); + + type = array[j].get_type(); switch (fmt[i]) { case 'c': @@ -20,7 +24,7 @@ Error RawPacker::encode(const String& fmt, const Array& array, uint8_t *buf, int ERR_FAIL_COND_V(type!=Variant::INT,ERR_INVALID_DATA); if (buf) { - *buf=(uint8_t)array[i]; + *buf=(uint8_t)array[j]; buf+=1; } @@ -33,7 +37,7 @@ Error RawPacker::encode(const String& fmt, const Array& array, uint8_t *buf, int ERR_FAIL_COND_V(type!=Variant::BOOL,ERR_INVALID_DATA); if (buf) { - *buf=(uint8_t)array[i]; + *buf=(uint8_t)array[j]; buf+=1; } @@ -47,7 +51,7 @@ Error RawPacker::encode(const String& fmt, const Array& array, uint8_t *buf, int ERR_FAIL_COND_V(type!=Variant::INT,ERR_INVALID_DATA); if (buf) { - encode_uint16((uint16_t)array[i],buf); + encode_uint16((uint16_t)array[j],buf); buf+=2; } @@ -65,7 +69,7 @@ Error RawPacker::encode(const String& fmt, const Array& array, uint8_t *buf, int ERR_FAIL_COND_V(type!=Variant::INT,ERR_INVALID_DATA); if (buf) { - encode_uint32((uint32_t)array[i],buf); + encode_uint32((uint32_t)array[j],buf); buf+=4; } @@ -80,7 +84,7 @@ Error RawPacker::encode(const String& fmt, const Array& array, uint8_t *buf, int ERR_FAIL_COND_V(type!=Variant::INT,ERR_INVALID_DATA); if (buf) { - encode_uint64((uint64_t)array[i],buf); + encode_uint64((uint64_t)array[j],buf); buf+=8; } @@ -93,7 +97,7 @@ Error RawPacker::encode(const String& fmt, const Array& array, uint8_t *buf, int ERR_FAIL_COND_V(type!=Variant::REAL,ERR_INVALID_DATA); if (buf) { - encode_float((float)array[i],buf); + encode_float((float)array[j],buf); buf+= 4; } @@ -106,7 +110,7 @@ Error RawPacker::encode(const String& fmt, const Array& array, uint8_t *buf, int ERR_FAIL_COND_V(type!=Variant::REAL,ERR_INVALID_DATA); if (buf) { - encode_double((double)array[i],buf); + encode_double((double)array[j],buf); buf+=8; } @@ -114,27 +118,62 @@ Error RawPacker::encode(const String& fmt, const Array& array, uint8_t *buf, int } break; - case 's': - case 'p': { + case 's': { ERR_FAIL_COND_V(type!=Variant::STRING,ERR_INVALID_DATA); - String str = (String)array[i]; + String size_str; - if (buf) { - for (int i=0;i