--- a/src/types/IntegerDataTypeWriter.h Tue Dec 10 19:37:43 2019 +0100
+++ b/src/types/IntegerDataTypeWriter.h Fri Dec 13 22:19:39 2019 +0100
@@ -36,8 +36,8 @@
using namespace relpipe::writer;
/**
- * Unsigned variable-length integer.
- * ULEB128
+ * Signed variable-length integer.
+ * LEB128
*/
class IntegerDataTypeWriter : public DataTypeWriter<integer_t> {
public:
@@ -47,17 +47,19 @@
void writeValue(std::ostream &output, const integer_t &value) override {
integer_t v = value;
+ bool more;
do {
octet_t octet = v & 0x7F;
v >>= 7;
- if (v) octet |= 0x80; // more bytes follow
+ more = !(((v == 0) && ((octet & 0x40) == 0)) || ((v == -1) && ((octet & 0x40) != 0)));
+ if (more) octet |= 0x80; // more bytes follow
output << char(octet);
- } while (v);
+ } while (more);
}
integer_t toValue(const string_t &stringValue) override {
// throws „terminate called after throwing an instance of 'std::invalid_argument'“ SIGABRT, core dumped on invalid number
- return stoul(stringValue);
+ return stol(stringValue);
}
};