Index: base/pickle.h |
=================================================================== |
--- base/pickle.h (revision 271871) |
+++ base/pickle.h (working copy) |
@@ -20,13 +20,14 @@ |
// while the PickleIterator object is in use. |
class BASE_EXPORT PickleIterator { |
public: |
- PickleIterator() : read_ptr_(NULL), read_end_ptr_(NULL) {} |
+ PickleIterator() : payload_(NULL), read_index_(0), end_index_(0) {} |
explicit PickleIterator(const Pickle& pickle); |
// Methods for reading the payload of the Pickle. To read from the start of |
// the Pickle, create a PickleIterator from a Pickle. If successful, these |
// methods return true. Otherwise, false is returned to indicate that the |
- // result could not be extracted. |
+ // result could not be extracted. It is not possible to read from iterator |
+ // after that. |
bool ReadBool(bool* result) WARN_UNUSED_RESULT; |
bool ReadInt(int* result) WARN_UNUSED_RESULT; |
bool ReadLong(long* result) WARN_UNUSED_RESULT; |
@@ -61,11 +62,15 @@ |
// Read Type from Pickle. |
template <typename Type> |
- inline bool ReadBuiltinType(Type* result); |
+ bool ReadBuiltinType(Type* result); |
+ // Advance read_index_ but do not allow it to exceed end_index_. |
+ // Keeps read_index_ aligned. |
+ void Advance(size_t size); |
+ |
// Get read pointer for Type and advance read pointer. |
template<typename Type> |
- inline const char* GetReadPointerAndAdvance(); |
+ const char* GetReadPointerAndAdvance(); |
// Get read pointer for |num_bytes| and advance read pointer. This method |
// checks num_bytes for negativity and wrapping. |
@@ -73,12 +78,12 @@ |
// Get read pointer for (num_elements * size_element) bytes and advance read |
// pointer. This method checks for int overflow, negativity and wrapping. |
- inline const char* GetReadPointerAndAdvance(int num_elements, |
- size_t size_element); |
+ const char* GetReadPointerAndAdvance(int num_elements, |
+ size_t size_element); |
- // Pointers to the Pickle data. |
- const char* read_ptr_; |
- const char* read_end_ptr_; |
+ const char* payload_; // Start of our pickle's payload. |
+ size_t read_index_; // Offset of the next readable byte in payload. |
+ size_t end_index_; // Payload size. |
FRIEND_TEST_ALL_PREFIXES(PickleTest, GetReadPointerAndAdvance); |
}; |
@@ -277,7 +282,9 @@ |
} |
// The payload is the pickle data immediately following the header. |
- size_t payload_size() const { return header_->payload_size; } |
+ size_t payload_size() const { |
+ return header_ ? header_->payload_size : 0; |
+ } |
const char* payload() const { |
return reinterpret_cast<const char*>(header_) + header_size_; |