Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(138)

Side by Side Diff: third_party/protobuf/objectivec/GPBCodedOutputStream.m

Issue 2590803003: Revert "third_party/protobuf: Update to HEAD (83d681ee2c)" (Closed)
Patch Set: Created 4 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Protocol Buffers - Google's data interchange format 1 // Protocol Buffers - Google's data interchange format
2 // Copyright 2008 Google Inc. All rights reserved. 2 // Copyright 2008 Google Inc. All rights reserved.
3 // https://developers.google.com/protocol-buffers/ 3 // https://developers.google.com/protocol-buffers/
4 // 4 //
5 // Redistribution and use in source and binary forms, with or without 5 // Redistribution and use in source and binary forms, with or without
6 // modification, are permitted provided that the following conditions are 6 // modification, are permitted provided that the following conditions are
7 // met: 7 // met:
8 // 8 //
9 // * Redistributions of source code must retain the above copyright 9 // * Redistributions of source code must retain the above copyright
10 // notice, this list of conditions and the following disclaimer. 10 // notice, this list of conditions and the following disclaimer.
(...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after
137 GPBWriteRawByte(state, (int32_t)(value)&0xFF); 137 GPBWriteRawByte(state, (int32_t)(value)&0xFF);
138 GPBWriteRawByte(state, (int32_t)(value >> 8) & 0xFF); 138 GPBWriteRawByte(state, (int32_t)(value >> 8) & 0xFF);
139 GPBWriteRawByte(state, (int32_t)(value >> 16) & 0xFF); 139 GPBWriteRawByte(state, (int32_t)(value >> 16) & 0xFF);
140 GPBWriteRawByte(state, (int32_t)(value >> 24) & 0xFF); 140 GPBWriteRawByte(state, (int32_t)(value >> 24) & 0xFF);
141 GPBWriteRawByte(state, (int32_t)(value >> 32) & 0xFF); 141 GPBWriteRawByte(state, (int32_t)(value >> 32) & 0xFF);
142 GPBWriteRawByte(state, (int32_t)(value >> 40) & 0xFF); 142 GPBWriteRawByte(state, (int32_t)(value >> 40) & 0xFF);
143 GPBWriteRawByte(state, (int32_t)(value >> 48) & 0xFF); 143 GPBWriteRawByte(state, (int32_t)(value >> 48) & 0xFF);
144 GPBWriteRawByte(state, (int32_t)(value >> 56) & 0xFF); 144 GPBWriteRawByte(state, (int32_t)(value >> 56) & 0xFF);
145 } 145 }
146 146
147 #if DEBUG && !defined(NS_BLOCK_ASSERTIONS)
148 + (void)load {
149 // This test exists to verify that CFStrings with embedded NULLs will work
150 // for us. If this Assert fails, all code below that depends on
151 // CFStringGetCStringPtr will NOT work properly on strings that contain
152 // embedded NULLs, and we do get that in some protobufs.
153 // Note that this will not be compiled in release.
154 // We didn't feel that just keeping it in a unit test was sufficient because
155 // the Protobuf unit tests are only run when somebody is actually working
156 // on protobufs.
157 CFStringRef zeroTest = CFSTR("Test\0String");
158 const char *cString = CFStringGetCStringPtr(zeroTest, kCFStringEncodingUTF8);
159 NSAssert(cString == NULL, @"Serious Error");
160 }
161 #endif // DEBUG && !defined(NS_BLOCK_ASSERTIONS)
162
147 - (void)dealloc { 163 - (void)dealloc {
148 [self flush]; 164 [self flush];
149 [state_.output close]; 165 [state_.output close];
150 [state_.output release]; 166 [state_.output release];
151 [buffer_ release]; 167 [buffer_ release];
152 168
153 [super dealloc]; 169 [super dealloc];
154 } 170 }
155 171
156 - (instancetype)initWithOutputStream:(NSOutputStream *)output { 172 - (instancetype)initWithOutputStream:(NSOutputStream *)output {
(...skipping 23 matching lines...) Expand all
180 + (instancetype)streamWithOutputStream:(NSOutputStream *)output { 196 + (instancetype)streamWithOutputStream:(NSOutputStream *)output {
181 NSMutableData *data = [NSMutableData dataWithLength:PAGE_SIZE]; 197 NSMutableData *data = [NSMutableData dataWithLength:PAGE_SIZE];
182 return [[[self alloc] initWithOutputStream:output 198 return [[[self alloc] initWithOutputStream:output
183 data:data] autorelease]; 199 data:data] autorelease];
184 } 200 }
185 201
186 + (instancetype)streamWithData:(NSMutableData *)data { 202 + (instancetype)streamWithData:(NSMutableData *)data {
187 return [[[self alloc] initWithData:data] autorelease]; 203 return [[[self alloc] initWithData:data] autorelease];
188 } 204 }
189 205
190 // Direct access is use for speed, to avoid even internally declaring things
191 // read/write, etc. The warning is enabled in the project to ensure code calling
192 // protos can turn on -Wdirect-ivar-access without issues.
193 #pragma clang diagnostic push
194 #pragma clang diagnostic ignored "-Wdirect-ivar-access"
195
196 - (void)writeDoubleNoTag:(double)value { 206 - (void)writeDoubleNoTag:(double)value {
197 GPBWriteRawLittleEndian64(&state_, GPBConvertDoubleToInt64(value)); 207 GPBWriteRawLittleEndian64(&state_, GPBConvertDoubleToInt64(value));
198 } 208 }
199 209
200 - (void)writeDouble:(int32_t)fieldNumber value:(double)value { 210 - (void)writeDouble:(int32_t)fieldNumber value:(double)value {
201 GPBWriteTagWithFormat(&state_, fieldNumber, GPBWireFormatFixed64); 211 GPBWriteTagWithFormat(&state_, fieldNumber, GPBWireFormatFixed64);
202 GPBWriteRawLittleEndian64(&state_, GPBConvertDoubleToInt64(value)); 212 GPBWriteRawLittleEndian64(&state_, GPBConvertDoubleToInt64(value));
203 } 213 }
204 214
205 - (void)writeFloatNoTag:(float)value { 215 - (void)writeFloatNoTag:(float)value {
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
259 - (void)writeBoolNoTag:(BOOL)value { 269 - (void)writeBoolNoTag:(BOOL)value {
260 GPBWriteRawByte(&state_, (value ? 1 : 0)); 270 GPBWriteRawByte(&state_, (value ? 1 : 0));
261 } 271 }
262 272
263 - (void)writeBool:(int32_t)fieldNumber value:(BOOL)value { 273 - (void)writeBool:(int32_t)fieldNumber value:(BOOL)value {
264 GPBWriteTagWithFormat(&state_, fieldNumber, GPBWireFormatVarint); 274 GPBWriteTagWithFormat(&state_, fieldNumber, GPBWireFormatVarint);
265 GPBWriteRawByte(&state_, (value ? 1 : 0)); 275 GPBWriteRawByte(&state_, (value ? 1 : 0));
266 } 276 }
267 277
268 - (void)writeStringNoTag:(const NSString *)value { 278 - (void)writeStringNoTag:(const NSString *)value {
269 size_t length = [value lengthOfBytesUsingEncoding:NSUTF8StringEncoding]; 279 // If you are concerned about embedded NULLs see the test in
280 // +load above.
281 const char *quickString =
282 CFStringGetCStringPtr((CFStringRef)value, kCFStringEncodingUTF8);
283 size_t length = (quickString != NULL)
284 ? strlen(quickString)
285 : [value lengthOfBytesUsingEncoding:NSUTF8StringEncoding];
270 GPBWriteRawVarint32(&state_, (int32_t)length); 286 GPBWriteRawVarint32(&state_, (int32_t)length);
287
271 if (length == 0) { 288 if (length == 0) {
272 return; 289 return;
273 } 290 }
274 291
275 const char *quickString =
276 CFStringGetCStringPtr((CFStringRef)value, kCFStringEncodingUTF8);
277
278 // Fast path: Most strings are short, if the buffer already has space, 292 // Fast path: Most strings are short, if the buffer already has space,
279 // add to it directly. 293 // add to it directly.
280 NSUInteger bufferBytesLeft = state_.size - state_.position; 294 NSUInteger bufferBytesLeft = state_.size - state_.position;
281 if (bufferBytesLeft >= length) { 295 if (bufferBytesLeft >= length) {
282 NSUInteger usedBufferLength = 0; 296 NSUInteger usedBufferLength = 0;
283 BOOL result; 297 BOOL result;
284 if (quickString != NULL) { 298 if (quickString != NULL) {
285 memcpy(state_.bytes + state_.position, quickString, length); 299 memcpy(state_.bytes + state_.position, quickString, length);
286 usedBufferLength = length; 300 usedBufferLength = length;
287 result = YES; 301 result = YES;
288 } else { 302 } else {
289 result = [value getBytes:state_.bytes + state_.position 303 result = [value getBytes:state_.bytes + state_.position
290 maxLength:bufferBytesLeft 304 maxLength:bufferBytesLeft
291 usedLength:&usedBufferLength 305 usedLength:&usedBufferLength
292 encoding:NSUTF8StringEncoding 306 encoding:NSUTF8StringEncoding
293 options:(NSStringEncodingConversionOptions)0 307 options:0
294 range:NSMakeRange(0, [value length]) 308 range:NSMakeRange(0, [value length])
295 remainingRange:NULL]; 309 remainingRange:NULL];
296 } 310 }
297 if (result) { 311 if (result) {
298 NSAssert2((usedBufferLength == length), 312 NSAssert2((usedBufferLength == length),
299 @"Our UTF8 calc was wrong? %tu vs %zd", usedBufferLength, 313 @"Our UTF8 calc was wrong? %tu vs %zd", usedBufferLength,
300 length); 314 length);
301 state_.position += usedBufferLength; 315 state_.position += usedBufferLength;
302 return; 316 return;
303 } 317 }
(...skipping 656 matching lines...) Expand 10 before | Expand all | Expand 10 after
960 } 974 }
961 975
962 - (void)writeRawLittleEndian32:(int32_t)value { 976 - (void)writeRawLittleEndian32:(int32_t)value {
963 GPBWriteRawLittleEndian32(&state_, value); 977 GPBWriteRawLittleEndian32(&state_, value);
964 } 978 }
965 979
966 - (void)writeRawLittleEndian64:(int64_t)value { 980 - (void)writeRawLittleEndian64:(int64_t)value {
967 GPBWriteRawLittleEndian64(&state_, value); 981 GPBWriteRawLittleEndian64(&state_, value);
968 } 982 }
969 983
970 #pragma clang diagnostic pop
971
972 @end 984 @end
973 985
974 size_t GPBComputeDoubleSizeNoTag(Float64 value) { 986 size_t GPBComputeDoubleSizeNoTag(Float64 value) {
975 #pragma unused(value) 987 #pragma unused(value)
976 return LITTLE_ENDIAN_64_SIZE; 988 return LITTLE_ENDIAN_64_SIZE;
977 } 989 }
978 990
979 size_t GPBComputeFloatSizeNoTag(Float32 value) { 991 size_t GPBComputeFloatSizeNoTag(Float32 value) {
980 #pragma unused(value) 992 #pragma unused(value)
981 return LITTLE_ENDIAN_32_SIZE; 993 return LITTLE_ENDIAN_32_SIZE;
(...skipping 29 matching lines...) Expand all
1011 #pragma unused(value) 1023 #pragma unused(value)
1012 return LITTLE_ENDIAN_32_SIZE; 1024 return LITTLE_ENDIAN_32_SIZE;
1013 } 1025 }
1014 1026
1015 size_t GPBComputeBoolSizeNoTag(BOOL value) { 1027 size_t GPBComputeBoolSizeNoTag(BOOL value) {
1016 #pragma unused(value) 1028 #pragma unused(value)
1017 return 1; 1029 return 1;
1018 } 1030 }
1019 1031
1020 size_t GPBComputeStringSizeNoTag(NSString *value) { 1032 size_t GPBComputeStringSizeNoTag(NSString *value) {
1021 NSUInteger length = [value lengthOfBytesUsingEncoding:NSUTF8StringEncoding]; 1033 // If you are concerned about embedded NULLs see the test in
1034 // +load above.
1035 const char *quickString =
1036 CFStringGetCStringPtr((CFStringRef)value, kCFStringEncodingUTF8);
1037 NSUInteger length =
1038 (quickString != NULL)
1039 ? strlen(quickString)
1040 : [value lengthOfBytesUsingEncoding:NSUTF8StringEncoding];
1022 return GPBComputeRawVarint32SizeForInteger(length) + length; 1041 return GPBComputeRawVarint32SizeForInteger(length) + length;
1023 } 1042 }
1024 1043
1025 size_t GPBComputeGroupSizeNoTag(GPBMessage *value) { 1044 size_t GPBComputeGroupSizeNoTag(GPBMessage *value) {
1026 return [value serializedSize]; 1045 return [value serializedSize];
1027 } 1046 }
1028 1047
1029 size_t GPBComputeUnknownGroupSizeNoTag(GPBUnknownFieldSet *value) { 1048 size_t GPBComputeUnknownGroupSizeNoTag(GPBUnknownFieldSet *value) {
1030 return value.serializedSize; 1049 return value.serializedSize;
1031 } 1050 }
(...skipping 161 matching lines...) Expand 10 before | Expand all | Expand 10 after
1193 if ((value & (0xffffffffffffffffL << 14)) == 0) return 2; 1212 if ((value & (0xffffffffffffffffL << 14)) == 0) return 2;
1194 if ((value & (0xffffffffffffffffL << 21)) == 0) return 3; 1213 if ((value & (0xffffffffffffffffL << 21)) == 0) return 3;
1195 if ((value & (0xffffffffffffffffL << 28)) == 0) return 4; 1214 if ((value & (0xffffffffffffffffL << 28)) == 0) return 4;
1196 if ((value & (0xffffffffffffffffL << 35)) == 0) return 5; 1215 if ((value & (0xffffffffffffffffL << 35)) == 0) return 5;
1197 if ((value & (0xffffffffffffffffL << 42)) == 0) return 6; 1216 if ((value & (0xffffffffffffffffL << 42)) == 0) return 6;
1198 if ((value & (0xffffffffffffffffL << 49)) == 0) return 7; 1217 if ((value & (0xffffffffffffffffL << 49)) == 0) return 7;
1199 if ((value & (0xffffffffffffffffL << 56)) == 0) return 8; 1218 if ((value & (0xffffffffffffffffL << 56)) == 0) return 8;
1200 if ((value & (0xffffffffffffffffL << 63)) == 0) return 9; 1219 if ((value & (0xffffffffffffffffL << 63)) == 0) return 9;
1201 return 10; 1220 return 10;
1202 } 1221 }
OLDNEW
« no previous file with comments | « third_party/protobuf/objectivec/GPBCodedOutputStream.h ('k') | third_party/protobuf/objectivec/GPBDescriptor.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698