1// Protocol Buffers - Google's data interchange format 2// Copyright 2008 Google Inc. All rights reserved. 3// https://developers.google.com/protocol-buffers/ 4// 5// Redistribution and use in source and binary forms, with or without 6// modification, are permitted provided that the following conditions are 7// met: 8// 9// * Redistributions of source code must retain the above copyright 10// notice, this list of conditions and the following disclaimer. 11// * Redistributions in binary form must reproduce the above 12// copyright notice, this list of conditions and the following disclaimer 13// in the documentation and/or other materials provided with the 14// distribution. 15// * Neither the name of Google Inc. nor the names of its 16// contributors may be used to endorse or promote products derived from 17// this software without specific prior written permission. 18// 19// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 20// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 21// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 22// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 23// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 24// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 25// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 26// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 27// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 28// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 29// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 30 31#import <Foundation/Foundation.h> 32 33@class GPBMessage; 34@class GPBExtensionRegistry; 35 36NS_ASSUME_NONNULL_BEGIN 37 38/// Reads and decodes protocol message fields. 39/// 40/// The common uses of protocol buffers shouldn't need to use this class. 41/// @c GPBMessage's provide a @c +parseFromData:error: and @c 42/// +parseFromData:extensionRegistry:error: method that will decode a 43/// message for you. 44/// 45/// @note Subclassing of GPBCodedInputStream is NOT supported. 46@interface GPBCodedInputStream : NSObject 47 48/// Creates a new stream wrapping some data. 49+ (instancetype)streamWithData:(NSData *)data; 50 51/// Initializes a stream wrapping some data. 52- (instancetype)initWithData:(NSData *)data; 53 54/// Attempt to read a field tag, returning zero if we have reached EOF. 55/// Protocol message parsers use this to read tags, since a protocol message 56/// may legally end wherever a tag occurs, and zero is not a valid tag number. 57- (int32_t)readTag; 58 59/// Read and return a double. 60- (double)readDouble; 61/// Read and return a float. 62- (float)readFloat; 63/// Read and return a uint64. 64- (uint64_t)readUInt64; 65/// Read and return a uint32. 66- (uint32_t)readUInt32; 67/// Read and return an int64. 68- (int64_t)readInt64; 69/// Read and return an int32. 70- (int32_t)readInt32; 71/// Read and return a fixed64. 72- (uint64_t)readFixed64; 73/// Read and return a fixed32. 74- (uint32_t)readFixed32; 75/// Read and return an enum (int). 76- (int32_t)readEnum; 77/// Read and return a sfixed32. 78- (int32_t)readSFixed32; 79/// Read and return a sfixed64. 80- (int64_t)readSFixed64; 81/// Read and return a sint32. 82- (int32_t)readSInt32; 83/// Read and return a sint64. 84- (int64_t)readSInt64; 85/// Read and return a boolean. 86- (BOOL)readBool; 87/// Read and return a string. 88- (NSString *)readString; 89/// Read and return length delimited data. 90- (NSData *)readBytes; 91 92/// Read an embedded message field value from the stream. 93/// 94/// @param message The message to set fields on as they are read. 95/// @param extensionRegistry An optional extension registry to use to lookup 96/// extensions for @message. 97- (void)readMessage:(GPBMessage *)message 98 extensionRegistry:(nullable GPBExtensionRegistry *)extensionRegistry; 99 100/// Reads and discards a single field, given its tag value. 101/// 102/// @param tag The tag number of the field to skip. 103/// 104/// @return NO if the tag is an endgroup tag (in which case nothing is skipped), 105/// YES in all other cases. 106- (BOOL)skipField:(int32_t)tag; 107 108/// Reads and discards an entire message. This will read either until EOF 109/// or until an endgroup tag, whichever comes first. 110- (void)skipMessage; 111 112/// Check to see if the logical end of the stream has been reached. 113/// 114/// This can return NO when there is no more data, but the current parsing 115/// expected more data. 116- (BOOL)isAtEnd; 117 118/// The offset into the stream. 119- (size_t)position; 120 121/// Verifies that the last call to @c -readTag returned the given tag value. 122/// This is used to verify that a nested group ended with the correct end tag. 123/// Throws @c NSParseErrorException if value does not match the last tag. 124/// 125/// @param expected The tag that was expected. 126- (void)checkLastTagWas:(int32_t)expected; 127 128@end 129 130NS_ASSUME_NONNULL_END 131