mirror of https://github.com/oxen-io/session-ios
You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
217 lines
8.8 KiB
Objective-C
217 lines
8.8 KiB
Objective-C
// Copyright 2008 Cyrus Najmabadi
|
|
//
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
// you may not use this file except in compliance with the License.
|
|
// You may obtain a copy of the License at
|
|
//
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
// See the License for the specific language governing permissions and
|
|
// limitations under the License.
|
|
|
|
@class PBUnknownFieldSet;
|
|
@protocol PBMessage;
|
|
|
|
/**
|
|
* Encodes and writes protocol message fields.
|
|
*
|
|
* <p>This class contains two kinds of methods: methods that write specific
|
|
* protocol message constructs and field types (e.g. {@link #writeTag} and
|
|
* {@link #writeInt32}) and methods that write low-level values (e.g.
|
|
* {@link #writeRawVarint32} and {@link #writeRawBytes}). If you are
|
|
* writing encoded protocol messages, you should use the former methods, but if
|
|
* you are writing some other format of your own design, use the latter.
|
|
*
|
|
* <p>This class is totally unsynchronized.
|
|
*
|
|
* @author Cyrus Najmabadi
|
|
*/
|
|
@interface PBCodedOutputStream : NSObject {
|
|
NSMutableData* buffer;
|
|
int32_t position;
|
|
NSOutputStream* output;
|
|
}
|
|
|
|
+ (PBCodedOutputStream*) streamWithData:(NSMutableData*) data;
|
|
+ (PBCodedOutputStream*) streamWithOutputStream:(NSOutputStream*) output;
|
|
+ (PBCodedOutputStream*) streamWithOutputStream:(NSOutputStream*) output bufferSize:(int32_t) bufferSize;
|
|
|
|
|
|
/**
|
|
* Encode a ZigZag-encoded 32-bit value. ZigZag encodes signed integers
|
|
* into values that can be efficiently encoded with varint. (Otherwise,
|
|
* negative values must be sign-extended to 64 bits to be varint encoded,
|
|
* thus always taking 10 bytes on the wire.)
|
|
*
|
|
* @param n A signed 32-bit integer.
|
|
* @return An unsigned 32-bit integer, stored in a signed int.
|
|
*/
|
|
int32_t encodeZigZag32(int32_t n);
|
|
|
|
/**
|
|
* Encode a ZigZag-encoded 64-bit value. ZigZag encodes signed integers
|
|
* into values that can be efficiently encoded with varint. (Otherwise,
|
|
* negative values must be sign-extended to 64 bits to be varint encoded,
|
|
* thus always taking 10 bytes on the wire.)
|
|
*
|
|
* @param n A signed 64-bit integer.
|
|
* @return An unsigned 64-bit integer, stored in a signed int.
|
|
*/
|
|
int64_t encodeZigZag64(int64_t n);
|
|
|
|
int32_t computeDoubleSize(int32_t fieldNumber, Float64 value);
|
|
int32_t computeFloatSize(int32_t fieldNumber, Float32 value);
|
|
int32_t computeUInt64Size(int32_t fieldNumber, int64_t value);
|
|
int32_t computeInt64Size(int32_t fieldNumber, int64_t value);
|
|
int32_t computeInt32Size(int32_t fieldNumber, int32_t value);
|
|
int32_t computeFixed64Size(int32_t fieldNumber, int64_t value);
|
|
int32_t computeFixed32Size(int32_t fieldNumber, int32_t value);
|
|
int32_t computeBoolSize(int32_t fieldNumber, BOOL value);
|
|
int32_t computeStringSize(int32_t fieldNumber, NSString* value);
|
|
int32_t computeGroupSize(int32_t fieldNumber, id<PBMessage> value);
|
|
int32_t computeUnknownGroupSize(int32_t fieldNumber, PBUnknownFieldSet* value);
|
|
int32_t computeMessageSize(int32_t fieldNumber, id<PBMessage> value);
|
|
int32_t computeDataSize(int32_t fieldNumber, NSData* value);
|
|
int32_t computeUInt32Size(int32_t fieldNumber, int32_t value);
|
|
int32_t computeSFixed32Size(int32_t fieldNumber, int32_t value);
|
|
int32_t computeSFixed64Size(int32_t fieldNumber, int64_t value);
|
|
int32_t computeSInt32Size(int32_t fieldNumber, int32_t value);
|
|
int32_t computeSInt64Size(int32_t fieldNumber, int64_t value);
|
|
int32_t computeTagSize(int32_t fieldNumber);
|
|
|
|
int32_t computeDoubleSizeNoTag(Float64 value);
|
|
int32_t computeFloatSizeNoTag(Float32 value);
|
|
int32_t computeUInt64SizeNoTag(int64_t value);
|
|
int32_t computeInt64SizeNoTag(int64_t value);
|
|
int32_t computeInt32SizeNoTag(int32_t value);
|
|
int32_t computeFixed64SizeNoTag(int64_t value);
|
|
int32_t computeFixed32SizeNoTag(int32_t value);
|
|
int32_t computeBoolSizeNoTag(BOOL value);
|
|
int32_t computeStringSizeNoTag(NSString* value);
|
|
int32_t computeGroupSizeNoTag(id<PBMessage> value);
|
|
int32_t computeUnknownGroupSizeNoTag(PBUnknownFieldSet* value);
|
|
int32_t computeMessageSizeNoTag(id<PBMessage> value);
|
|
int32_t computeDataSizeNoTag(NSData* value);
|
|
int32_t computeUInt32SizeNoTag(int32_t value);
|
|
int32_t computeEnumSizeNoTag(int32_t value);
|
|
int32_t computeSFixed32SizeNoTag(int32_t value);
|
|
int32_t computeSFixed64SizeNoTag(int64_t value);
|
|
int32_t computeSInt32SizeNoTag(int32_t value);
|
|
int32_t computeSInt64SizeNoTag(int64_t value);
|
|
|
|
/**
|
|
* Compute the number of bytes that would be needed to encode a varint.
|
|
* {@code value} is treated as unsigned, so it won't be sign-extended if
|
|
* negative.
|
|
*/
|
|
int32_t computeRawVarint32Size(int32_t value);
|
|
int32_t computeRawVarint64Size(int64_t value);
|
|
|
|
/**
|
|
* Compute the number of bytes that would be needed to encode a
|
|
* MessageSet extension to the stream. For historical reasons,
|
|
* the wire format differs from normal fields.
|
|
*/
|
|
int32_t computeMessageSetExtensionSize(int32_t fieldNumber, id<PBMessage> value);
|
|
|
|
/**
|
|
* Compute the number of bytes that would be needed to encode an
|
|
* unparsed MessageSet extension field to the stream. For
|
|
* historical reasons, the wire format differs from normal fields.
|
|
*/
|
|
int32_t computeRawMessageSetExtensionSize(int32_t fieldNumber, NSData* value);
|
|
|
|
/**
|
|
* Compute the number of bytes that would be needed to encode an
|
|
* enum field, including tag. Caller is responsible for converting the
|
|
* enum value to its numeric value.
|
|
*/
|
|
int32_t computeEnumSize(int32_t fieldNumber, int32_t value);
|
|
|
|
/**
|
|
* Flushes the stream and forces any buffered bytes to be written. This
|
|
* does not flush the underlying NSOutputStream.
|
|
*/
|
|
- (void) flush;
|
|
|
|
- (void) writeRawByte:(uint8_t) value;
|
|
|
|
- (void) writeTag:(int32_t) fieldNumber format:(int32_t) format;
|
|
|
|
/**
|
|
* Encode and write a varint. {@code value} is treated as
|
|
* unsigned, so it won't be sign-extended if negative.
|
|
*/
|
|
- (void) writeRawVarint32:(int32_t) value;
|
|
- (void) writeRawVarint64:(int64_t) value;
|
|
|
|
- (void) writeRawLittleEndian32:(int32_t) value;
|
|
- (void) writeRawLittleEndian64:(int64_t) value;
|
|
|
|
- (void) writeRawData:(NSData*) data;
|
|
- (void) writeRawData:(NSData*) data offset:(int32_t) offset length:(int32_t) length;
|
|
|
|
- (void) writeData:(int32_t) fieldNumber value:(NSData*) value;
|
|
|
|
- (void) writeDouble:(int32_t) fieldNumber value:(Float64) value;
|
|
- (void) writeFloat:(int32_t) fieldNumber value:(Float32) value;
|
|
- (void) writeUInt64:(int32_t) fieldNumber value:(int64_t) value;
|
|
- (void) writeInt64:(int32_t) fieldNumber value:(int64_t) value;
|
|
- (void) writeInt32:(int32_t) fieldNumber value:(int32_t) value;
|
|
- (void) writeFixed64:(int32_t) fieldNumber value:(int64_t) value;
|
|
- (void) writeFixed32:(int32_t) fieldNumber value:(int32_t) value;
|
|
- (void) writeBool:(int32_t) fieldNumber value:(BOOL) value;
|
|
- (void) writeString:(int32_t) fieldNumber value:(NSString*) value;
|
|
- (void) writeGroup:(int32_t) fieldNumber value:(id<PBMessage>) value;
|
|
- (void) writeUnknownGroup:(int32_t) fieldNumber value:(PBUnknownFieldSet*) value;
|
|
- (void) writeMessage:(int32_t) fieldNumber value:(id<PBMessage>) value;
|
|
- (void) writeUInt32:(int32_t) fieldNumber value:(int32_t) value;
|
|
- (void) writeSFixed32:(int32_t) fieldNumber value:(int32_t) value;
|
|
- (void) writeSFixed64:(int32_t) fieldNumber value:(int64_t) value;
|
|
- (void) writeSInt32:(int32_t) fieldNumber value:(int32_t) value;
|
|
- (void) writeSInt64:(int32_t) fieldNumber value:(int64_t) value;
|
|
|
|
- (void) writeDoubleNoTag:(Float64) value;
|
|
- (void) writeFloatNoTag:(Float32) value;
|
|
- (void) writeUInt64NoTag:(int64_t) value;
|
|
- (void) writeInt64NoTag:(int64_t) value;
|
|
- (void) writeInt32NoTag:(int32_t) value;
|
|
- (void) writeFixed64NoTag:(int64_t) value;
|
|
- (void) writeFixed32NoTag:(int32_t) value;
|
|
- (void) writeBoolNoTag:(BOOL) value;
|
|
- (void) writeStringNoTag:(NSString*) value;
|
|
- (void) writeGroupNoTag:(int32_t) fieldNumber value:(id<PBMessage>) value;
|
|
- (void) writeUnknownGroupNoTag:(int32_t) fieldNumber value:(PBUnknownFieldSet*) value;
|
|
- (void) writeMessageNoTag:(id<PBMessage>) value;
|
|
- (void) writeDataNoTag:(NSData*) value;
|
|
- (void) writeUInt32NoTag:(int32_t) value;
|
|
- (void) writeEnumNoTag:(int32_t) value;
|
|
- (void) writeSFixed32NoTag:(int32_t) value;
|
|
- (void) writeSFixed64NoTag:(int64_t) value;
|
|
- (void) writeSInt32NoTag:(int32_t) value;
|
|
- (void) writeSInt64NoTag:(int64_t) value;
|
|
|
|
|
|
/**
|
|
* Write a MessageSet extension field to the stream. For historical reasons,
|
|
* the wire format differs from normal fields.
|
|
*/
|
|
- (void) writeMessageSetExtension:(int32_t) fieldNumber value:(id<PBMessage>) value;
|
|
|
|
/**
|
|
* Write an unparsed MessageSet extension field to the stream. For
|
|
* historical reasons, the wire format differs from normal fields.
|
|
*/
|
|
- (void) writeRawMessageSetExtension:(int32_t) fieldNumber value:(NSData*) value;
|
|
|
|
/**
|
|
* Write an enum field, including tag, to the stream. Caller is responsible
|
|
* for converting the enum value to its numeric value.
|
|
*/
|
|
- (void) writeEnum:(int32_t) fieldNumber value:(int32_t) value;
|
|
|
|
@end
|