From e8c1f656ee43ef530b714ca1f69f54faf4105815 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Sun, 11 Mar 2012 21:35:41 -0700 Subject: [PATCH] SerializerIterator implementation. --- src/Serializer.cpp | 75 +++++++++++++++++++++++++++++++++++++++++++++- src/Serializer.h | 2 +- 2 files changed, 75 insertions(+), 2 deletions(-) diff --git a/src/Serializer.cpp b/src/Serializer.cpp index af5c36bc35..1abec9cfe9 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 4797add74d..3f7efd5a1e 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