equal
deleted
inserted
replaced
54 |
54 |
55 IntegerDataTypeReader() : DataTypeReader<integer_t>(TypeId::INTEGER, DATA_TYPE_CODE_INTEGER) { |
55 IntegerDataTypeReader() : DataTypeReader<integer_t>(TypeId::INTEGER, DATA_TYPE_CODE_INTEGER) { |
56 } |
56 } |
57 |
57 |
58 integer_t readValue(std::istream &input) override { |
58 integer_t readValue(std::istream &input) override { |
|
59 static const integer_t ZERO = 0; |
59 integer_t value = 0; |
60 integer_t value = 0; |
60 integer_t shift = 0; |
61 integer_t shift = 0; |
61 octet_t octet; |
62 octet_t octet; |
62 do { |
63 do { |
63 octet = readNextOctet(input); |
64 octet = readNextOctet(input); |
64 value += integer_t(octet & 0x7F) << shift; |
65 value += integer_t(octet & 0x7F) << shift; |
65 shift += 7; |
66 shift += 7; |
66 } while (octet >= 128); |
67 } while (octet >= 128); |
67 |
68 |
68 if ((shift < (sizeof (integer_t) * 8)) && (octet & 0x40)) |
69 if ((shift < (sizeof (integer_t) * 8)) && (octet & 0x40)) |
69 value |= (~0 << shift); |
70 value |= (~ZERO << shift); |
70 return value; |
71 return value; |
71 } |
72 } |
72 |
73 |
73 string_t toString(const integer_t &value) override { |
74 string_t toString(const integer_t &value) override { |
74 return std::to_wstring(value); |
75 return std::to_wstring(value); |