[
Date Prev][
Date Next][
Thread Prev][
Thread Next][
Date Index][
Thread Index]
[
List Home]
[paho-dev] [PATCH] MQTTPacket: Improved length encoding
|
Improved length encoding by doing-away with division. On my system this
runs roughly twice as fast. On micro-processors that do not have an
inbuilt division instruction this should increase performance quite
significantly.
I cross-checked the output with the previous implementation and it seems
to match up perfectly, though further testing &/or suggestions are appreciated.
---
MQTTPacket/src/MQTTPacket.c | 19 ++++++++++---------
1 file changed, 10 insertions(+), 9 deletions(-)
diff --git a/MQTTPacket/src/MQTTPacket.c b/MQTTPacket/src/MQTTPacket.c
index 4f1f95a..78eb5a6 100644
--- a/MQTTPacket/src/MQTTPacket.c
+++ b/MQTTPacket/src/MQTTPacket.c
@@ -31,15 +31,16 @@ int MQTTPacket_encode(unsigned char* buf, int length)
int rc = 0;
FUNC_ENTRY;
- do
- {
- char d = length % 128;
- length /= 128;
- /* if there are more digits to encode, set the top bit of this digit */
- if (length > 0)
- d |= 0x80;
- buf[rc++] = d;
- } while (length > 0);
+ for(rc = 0; rc < 4; rc++) {
+ buf[rc] |= (length & 0x7F); /* 01111111 */
+ length = (length >> 7);
+ if (length) {
+ buf[rc] |= 0x80;
+ }
+ else {
+ break;
+ }
+ }
FUNC_EXIT_RC(rc);
return rc;
}
--
2.24.0