Skip to content

Commit

Permalink
Reduced code size
Browse files Browse the repository at this point in the history
  • Loading branch information
bblanchon committed May 27, 2017
1 parent f76017a commit 7415f20
Show file tree
Hide file tree
Showing 2 changed files with 45 additions and 24 deletions.
68 changes: 44 additions & 24 deletions src/ArduinoJson/Serialization/JsonWriter.hpp
Expand Up @@ -38,18 +38,34 @@ class JsonWriter {
// Returns the number of bytes sent to the Print implementation.
// This is very handy for implementations of printTo() that must return the
// number of bytes written.
size_t bytesWritten() const { return _length; }
size_t bytesWritten() const {
return _length;
}

void beginArray() { writeRaw('['); }
void endArray() { writeRaw(']'); }
void beginArray() {
writeRaw('[');
}
void endArray() {
writeRaw(']');
}

void beginObject() { writeRaw('{'); }
void endObject() { writeRaw('}'); }
void beginObject() {
writeRaw('{');
}
void endObject() {
writeRaw('}');
}

void writeColon() { writeRaw(':'); }
void writeComma() { writeRaw(','); }
void writeColon() {
writeRaw(':');
}
void writeComma() {
writeRaw(',');
}

void writeBoolean(bool value) { writeRaw(value ? "true" : "false"); }
void writeBoolean(bool value) {
writeRaw(value ? "true" : "false");
}

void writeString(const char *value) {
if (!value) {
Expand Down Expand Up @@ -106,7 +122,7 @@ class JsonWriter {

*ptr = 0;
do {
*--ptr = static_cast<char>(value % 10 + '0');
*--ptr = char(value % 10 + '0');
value = UInt(value / 10);
} while (value);

Expand Down Expand Up @@ -137,8 +153,12 @@ class JsonWriter {
writeRaw(ptr);
}

void writeRaw(const char *s) { _length += _sink.print(s); }
void writeRaw(char c) { _length += _sink.print(c); }
void writeRaw(const char *s) {
_length += _sink.print(s);
}
void writeRaw(char c) {
_length += _sink.print(c);
}

protected:
Print &_sink;
Expand All @@ -154,19 +174,19 @@ class JsonWriter {
integralPart = uint32_t(value);
JsonFloat remainder = value - JsonFloat(integralPart);

decimalPart = uint32_t(remainder * maxDecimalPart);
remainder = remainder * maxDecimalPart - JsonFloat(decimalPart);

// rounding
if (remainder > 0.5) {
decimalPart++;
if (decimalPart >= maxDecimalPart) {
decimalPart -= maxDecimalPart;
integralPart++;
if (powersOf10 && integralPart >= 10) {
powersOf10++;
integralPart /= 10;
}
remainder *= maxDecimalPart;
decimalPart = uint32_t(remainder);
remainder = remainder - JsonFloat(decimalPart);

// rounding:
// increment by 1 if remainder >= 0.5
decimalPart += uint32_t(remainder * 2);
if (decimalPart >= maxDecimalPart) {
decimalPart = 0;
integralPart++;
if (powersOf10 && integralPart >= 10) {
powersOf10++;
integralPart = 1;
}
}
}
Expand Down
1 change: 1 addition & 0 deletions test/JsonWriter/writeFloat.cpp
Expand Up @@ -84,6 +84,7 @@ TEST_CASE("JsonWriter::writeFloat()") {
SECTION("Rounding when too many decimals") {
check(0.000099999999999, "0.0001");
check(0.0000099999999999, "1e-5");
check(0.9999999996, "1");
}

SECTION("9 decimal places") {
Expand Down

0 comments on commit 7415f20

Please sign in to comment.