X-Git-Url: http://git.code-monkey.de/?a=blobdiff_plain;f=src%2Fpds.c;h=066666f13b6c402ac4c684e3e321907246d9b3a6;hb=97729daab63f49323ca6bee7859260653e5090a1;hp=7db1e7a5090cfee291f0184908ee6c52de88ece5;hpb=6a6908d7031a79b5767d86a4da056f65a742ac9f;p=umurmur.git diff --git a/src/pds.c b/src/pds.c index 7db1e7a..066666f 100644 --- a/src/pds.c +++ b/src/pds.c @@ -1,5 +1,5 @@ -/* Copyright (C) 2009, Martin Johansson - Copyright (C) 2005-2009, Thorvald Natvig +/* Copyright (C) 2009-2014, Martin Johansson + Copyright (C) 2005-2014, Thorvald Natvig All rights reserved. @@ -83,6 +83,28 @@ void Pds_append_data_nosize(pds_t *pds, const uint8_t *data, uint32_t len) } } +uint8_t Pds_next8(pds_t *pds) +{ + if (pds->offset < pds->maxsize) + return pds->data[pds->offset++]; + else { + pds->bOk = false; + return 0; + } +} + +int Pds_skip(pds_t *pds, int offset) +{ + if (pds->offset + offset <= pds->maxsize) { + pds->offset += offset; + return offset; + } else { + pds->bOk = false; + return 0; + } + +} + static inline uint64_t next(pds_t *pds) { if (pds->offset < pds->maxsize) @@ -113,9 +135,9 @@ void Pds_free(pds_t *pds) void Pds_add_double(pds_t *pds, double value) { double64u_t u; - + u.dval = value; - + Pds_add_numval(pds, u.u64); } @@ -128,7 +150,7 @@ double Pds_get_double(pds_t *pds) void Pds_add_numval(pds_t *pds, const uint64_t value) { uint64_t i = value; - + if ((i & 0x8000000000000000LL) && (~i < 0x100000000LL)) { // Signed number. i = ~i; @@ -178,12 +200,12 @@ void Pds_add_numval(pds_t *pds, const uint64_t value) append_val(pds, i & 0xFF); } } - + uint64_t Pds_get_numval(pds_t *pds) { uint64_t i = 0; uint64_t v = next(pds); - + if ((v & 0x80) == 0x00) { i=(v & 0x7F); } else if ((v & 0xC0) == 0x80) {