diff options
author | Sergio Campamá <kaipi@google.com> | 2016-10-27 16:06:45 -0400 |
---|---|---|
committer | Thomas Van Lenten <thomasvl@google.com> | 2016-10-27 16:06:45 -0400 |
commit | d58b92ae5169ba888e6b5ca91c0ec9814668fa2c (patch) | |
tree | daa0903528532985238071eb4c18056ec354b04f | |
parent | 795976ecf536957719403b72a449e0b250d1b4e1 (diff) |
Adds pushLimit: and popLimit: into GPBCodedInputStream (#2297)
Adds pushLimit: and popLimit: into GPBCodedInputStream
-rw-r--r-- | objectivec/GPBCodedInputStream.h | 21 | ||||
-rw-r--r-- | objectivec/GPBCodedInputStream.m | 8 |
2 files changed, 29 insertions, 0 deletions
diff --git a/objectivec/GPBCodedInputStream.h b/objectivec/GPBCodedInputStream.h index de27b186..fbe5009c 100644 --- a/objectivec/GPBCodedInputStream.h +++ b/objectivec/GPBCodedInputStream.h @@ -218,6 +218,27 @@ CF_EXTERN_C_END - (size_t)position; /** + * Moves the limit to the given byte offset starting at the current location. + * + * @exception GPBCodedInputStreamException If the requested bytes exceeed the + * current limit. + * + * @param byteLimit The number of bytes to move the limit, offset to the current + * location. + * + * @return The limit offset before moving the new limit. + */ +- (size_t)pushLimit:(size_t)byteLimit; + +/** + * Moves the limit back to the offset as it was before calling pushLimit:. + * + * @param oldLimit The number of bytes to move the current limit. Usually this + * is the value returned by the pushLimit: method. + */ +- (void)popLimit:(size_t)oldLimit; + +/** * Verifies that the last call to -readTag returned the given tag value. This * is used to verify that a nested group ended with the correct end tag. * diff --git a/objectivec/GPBCodedInputStream.m b/objectivec/GPBCodedInputStream.m index 2b578dd5..e8c8989c 100644 --- a/objectivec/GPBCodedInputStream.m +++ b/objectivec/GPBCodedInputStream.m @@ -400,6 +400,14 @@ void GPBCodedInputStreamCheckLastTagWas(GPBCodedInputStreamState *state, return state_.bufferPos; } +- (size_t)pushLimit:(size_t)byteLimit { + return GPBCodedInputStreamPushLimit(&state_, byteLimit); +} + +- (void)popLimit:(size_t)oldLimit { + GPBCodedInputStreamPopLimit(&state_, oldLimit); +} + - (double)readDouble { return GPBCodedInputStreamReadDouble(&state_); } |