diff --git a/src/Serializer.cpp b/src/Serializer.cpp index af5c36bc3..1abec9cfe 100644 --- a/src/Serializer.cpp +++ b/src/Serializer.cpp @@ -322,9 +322,10 @@ bool Serializer::getVLLength(int& length, int offset) const return true; } -bool Serializer::getTaggedList(std::list& list, int offset) const +bool Serializer::getTaggedList(std::list& list, int offset, int& length) const { list.clear(); + int startOffset=offset; int numElem; if(!get8(numElem, offset++)) return false; for(int i=0; i& list, int offset) cons offset+=len; list.push_back(std::make_pair(tag, data)); } + length=offset-startOffset; return true; } @@ -408,3 +410,74 @@ void Serializer::TestSerializer() { Serializer s(64); } + +int SerializerIterator::getBytesLeft() +{ + return mSerializer.getLength()-mPos; +} + +unsigned char SerializerIterator::get8() throw() +{ + int val; + if(!mSerializer.get8(val, mPos)) throw(0); + mPos++; + return val; +} + +uint16 SerializerIterator::get16() throw() +{ + uint16 val; + if(!mSerializer.get16(val, mPos)) throw(0); + mPos+=16/8; + return val; +} + +uint32 SerializerIterator::get32() throw() +{ + uint32 val; + if(!mSerializer.get32(val, mPos)) throw(0); + mPos+=32/8; + return val; +} + +uint64 SerializerIterator::get64() throw() +{ + uint64 val; + if(!mSerializer.get64(val, mPos)) throw(0); + mPos+=64/8; + return val; +} + +uint160 SerializerIterator::get160() throw() +{ + uint160 val; + if(!mSerializer.get160(val, mPos)) throw(0); + mPos+=160/8; + return val; +} + +uint256 SerializerIterator::get256() throw() +{ + uint256 val; + if(!mSerializer.get256(val, mPos)) throw(0); + mPos+=256/8; + return val; +} + +std::vector SerializerIterator::getVL() throw() +{ + int length; + std::vector vl; + if(!mSerializer.getVL(vl, mPos, length)) throw(0); + mPos+=length; + return vl; +} + +std::list SerializerIterator::getTaggedList() throw() +{ + int length; + std::list tl; + if(!mSerializer.getTaggedList(tl, mPos, length)) throw(0); + mPos+=length; + return tl; +} diff --git a/src/Serializer.h b/src/Serializer.h index 4797add74..3f7efd5a1 100644 --- a/src/Serializer.h +++ b/src/Serializer.h @@ -53,7 +53,7 @@ class Serializer bool getVL(std::vector& objectVL, int offset, int& length) const; bool getVLLength(int& length, int offset) const; - bool getTaggedList(std::list&, int offset) const; + bool getTaggedList(std::list&, int offset, int& legnth) const; // hash functions