Commit 82c70178 authored by Joshua Haberman's avatar Joshua Haberman Committed by GitHub

Merge branch '3.2.x' into ruby24

parents f2764798 124a2f6d
......@@ -5,7 +5,7 @@
# dependent projects use the :git notation to refer to the library.
Pod::Spec.new do |s|
s.name = 'Protobuf'
s.version = '3.2.0-rc.2'
s.version = '3.2.0'
s.summary = 'Protocol Buffers v.3 runtime library for Objective-C.'
s.homepage = 'https://github.com/google/protobuf'
s.license = 'New BSD'
......
......@@ -17,7 +17,7 @@ AC_PREREQ(2.59)
# In the SVN trunk, the version should always be the next anticipated release
# version with the "-pre" suffix. (We used to use "-SNAPSHOT" but this pushed
# the size of one file name in the dist tarfile over the 99-char limit.)
AC_INIT([Protocol Buffers],[3.2.0rc2],[protobuf@googlegroups.com],[protobuf])
AC_INIT([Protocol Buffers],[3.2.0],[protobuf@googlegroups.com],[protobuf])
AM_MAINTAINER_MODE([enable])
......
......@@ -5,7 +5,7 @@
<title>Google Protocol Buffers tools</title>
<summary>Tools for Protocol Buffers - Google's data interchange format.</summary>
<description>See project site for more info.</description>
<version>3.2.0-rc2</version>
<version>3.2.0</version>
<authors>Google Inc.</authors>
<owners>protobuf-packages</owners>
<licenseUrl>https://github.com/google/protobuf/blob/master/LICENSE</licenseUrl>
......
{
"version": "3.2.0-rc2",
"version": "3.2.0",
"title": "Google Protocol Buffers",
"description": "See project site for more info.",
"authors": [ "Google Inc." ],
......
......@@ -6,7 +6,7 @@
<parent>
<groupId>com.google.protobuf</groupId>
<artifactId>protobuf-parent</artifactId>
<version>3.2.0rc2</version>
<version>3.2.0</version>
</parent>
<artifactId>protobuf-java</artifactId>
......
......@@ -11,7 +11,7 @@
<groupId>com.google.protobuf</groupId>
<artifactId>protobuf-parent</artifactId>
<version>3.2.0rc2</version>
<version>3.2.0</version>
<packaging>pom</packaging>
<name>Protocol Buffers [Parent]</name>
......
......@@ -6,7 +6,7 @@
<parent>
<groupId>com.google.protobuf</groupId>
<artifactId>protobuf-parent</artifactId>
<version>3.2.0rc2</version>
<version>3.2.0</version>
</parent>
<artifactId>protobuf-java-util</artifactId>
......
......@@ -10,7 +10,7 @@
</parent>
<groupId>com.google.protobuf.nano</groupId>
<artifactId>protobuf-javanano</artifactId>
<version>3.2.0rc2</version>
<version>3.2.0</version>
<packaging>bundle</packaging>
<name>Protocol Buffer JavaNano API</name>
<description>
......
{
"name": "google-protobuf",
"version": "3.2.0-rc.2",
"version": "3.2.0",
"description": "Protocol Buffers for JavaScript",
"main": "google-protobuf.js",
"files": [
......
......@@ -96,7 +96,7 @@ NS_ASSUME_NONNULL_BEGIN
*
* @return A newly initialized GPBInt32Array with a copy of the values.
**/
- (instancetype)initWithValues:(const int32_t [])values
- (instancetype)initWithValues:(const int32_t [__nullable])values
count:(NSUInteger)count;
/**
......@@ -161,7 +161,7 @@ NS_ASSUME_NONNULL_BEGIN
* @param values The values to add to this array.
* @param count The number of elements to add.
**/
- (void)addValues:(const int32_t [])values count:(NSUInteger)count;
- (void)addValues:(const int32_t [__nullable])values count:(NSUInteger)count;
/**
* Adds the values from the given array to this array.
......@@ -268,7 +268,7 @@ NS_ASSUME_NONNULL_BEGIN
*
* @return A newly initialized GPBUInt32Array with a copy of the values.
**/
- (instancetype)initWithValues:(const uint32_t [])values
- (instancetype)initWithValues:(const uint32_t [__nullable])values
count:(NSUInteger)count;
/**
......@@ -333,7 +333,7 @@ NS_ASSUME_NONNULL_BEGIN
* @param values The values to add to this array.
* @param count The number of elements to add.
**/
- (void)addValues:(const uint32_t [])values count:(NSUInteger)count;
- (void)addValues:(const uint32_t [__nullable])values count:(NSUInteger)count;
/**
* Adds the values from the given array to this array.
......@@ -440,7 +440,7 @@ NS_ASSUME_NONNULL_BEGIN
*
* @return A newly initialized GPBInt64Array with a copy of the values.
**/
- (instancetype)initWithValues:(const int64_t [])values
- (instancetype)initWithValues:(const int64_t [__nullable])values
count:(NSUInteger)count;
/**
......@@ -505,7 +505,7 @@ NS_ASSUME_NONNULL_BEGIN
* @param values The values to add to this array.
* @param count The number of elements to add.
**/
- (void)addValues:(const int64_t [])values count:(NSUInteger)count;
- (void)addValues:(const int64_t [__nullable])values count:(NSUInteger)count;
/**
* Adds the values from the given array to this array.
......@@ -612,7 +612,7 @@ NS_ASSUME_NONNULL_BEGIN
*
* @return A newly initialized GPBUInt64Array with a copy of the values.
**/
- (instancetype)initWithValues:(const uint64_t [])values
- (instancetype)initWithValues:(const uint64_t [__nullable])values
count:(NSUInteger)count;
/**
......@@ -677,7 +677,7 @@ NS_ASSUME_NONNULL_BEGIN
* @param values The values to add to this array.
* @param count The number of elements to add.
**/
- (void)addValues:(const uint64_t [])values count:(NSUInteger)count;
- (void)addValues:(const uint64_t [__nullable])values count:(NSUInteger)count;
/**
* Adds the values from the given array to this array.
......@@ -784,7 +784,7 @@ NS_ASSUME_NONNULL_BEGIN
*
* @return A newly initialized GPBFloatArray with a copy of the values.
**/
- (instancetype)initWithValues:(const float [])values
- (instancetype)initWithValues:(const float [__nullable])values
count:(NSUInteger)count;
/**
......@@ -849,7 +849,7 @@ NS_ASSUME_NONNULL_BEGIN
* @param values The values to add to this array.
* @param count The number of elements to add.
**/
- (void)addValues:(const float [])values count:(NSUInteger)count;
- (void)addValues:(const float [__nullable])values count:(NSUInteger)count;
/**
* Adds the values from the given array to this array.
......@@ -956,7 +956,7 @@ NS_ASSUME_NONNULL_BEGIN
*
* @return A newly initialized GPBDoubleArray with a copy of the values.
**/
- (instancetype)initWithValues:(const double [])values
- (instancetype)initWithValues:(const double [__nullable])values
count:(NSUInteger)count;
/**
......@@ -1021,7 +1021,7 @@ NS_ASSUME_NONNULL_BEGIN
* @param values The values to add to this array.
* @param count The number of elements to add.
**/
- (void)addValues:(const double [])values count:(NSUInteger)count;
- (void)addValues:(const double [__nullable])values count:(NSUInteger)count;
/**
* Adds the values from the given array to this array.
......@@ -1128,7 +1128,7 @@ NS_ASSUME_NONNULL_BEGIN
*
* @return A newly initialized GPBBoolArray with a copy of the values.
**/
- (instancetype)initWithValues:(const BOOL [])values
- (instancetype)initWithValues:(const BOOL [__nullable])values
count:(NSUInteger)count;
/**
......@@ -1193,7 +1193,7 @@ NS_ASSUME_NONNULL_BEGIN
* @param values The values to add to this array.
* @param count The number of elements to add.
**/
- (void)addValues:(const BOOL [])values count:(NSUInteger)count;
- (void)addValues:(const BOOL [__nullable])values count:(NSUInteger)count;
/**
* Adds the values from the given array to this array.
......@@ -1325,7 +1325,7 @@ NS_ASSUME_NONNULL_BEGIN
* @return A newly initialized GPBEnumArray with a copy of the values.
**/
- (instancetype)initWithValidationFunction:(nullable GPBEnumValidationFunc)func
rawValues:(const int32_t [])values
rawValues:(const int32_t [__nullable])values
count:(NSUInteger)count;
/**
......@@ -1435,7 +1435,7 @@ NS_ASSUME_NONNULL_BEGIN
* @param values The values to add to this array.
* @param count The number of elements to add.
**/
- (void)addValues:(const int32_t [])values count:(NSUInteger)count;
- (void)addValues:(const int32_t [__nullable])values count:(NSUInteger)count;
/**
......@@ -1486,7 +1486,7 @@ NS_ASSUME_NONNULL_BEGIN
* @param values Array containing the raw enum values to add to this array.
* @param count The number of raw values to add.
**/
- (void)addRawValues:(const int32_t [])values count:(NSUInteger)count;
- (void)addRawValues:(const int32_t [__nullable])values count:(NSUInteger)count;
/**
* Inserts a raw enum value at the given index.
......@@ -1613,7 +1613,7 @@ NS_ASSUME_NONNULL_END
//% *
//% * @return A newly initialized GPB##NAME##Array with a copy of the values.
//% **/
//%- (instancetype)initWithValues:(const TYPE [])values
//%- (instancetype)initWithValues:(const TYPE [__nullable])values
//% count:(NSUInteger)count;
//%
//%/**
......@@ -1730,7 +1730,7 @@ NS_ASSUME_NONNULL_END
//% * @return A newly initialized GPB##NAME##Array with a copy of the values.
//% **/
//%- (instancetype)initWithValidationFunction:(nullable GPBEnumValidationFunc)func
//% rawValues:(const TYPE [])values
//% rawValues:(const TYPE [__nullable])values
//% count:(NSUInteger)count;
//%
//%/**
......@@ -1849,7 +1849,7 @@ NS_ASSUME_NONNULL_END
//% * @param values The values to add to this array.
//% * @param count The number of elements to add.
//% **/
//%- (void)addValues:(const TYPE [])values count:(NSUInteger)count;
//%- (void)addValues:(const TYPE [__nullable])values count:(NSUInteger)count;
//%
//%ARRAY_EXTRA_MUTABLE_METHODS1_##HELPER_NAME(NAME, TYPE)
//%/**
......@@ -1939,7 +1939,7 @@ NS_ASSUME_NONNULL_END
//% * @param values Array containing the raw enum values to add to this array.
//% * @param count The number of raw values to add.
//% **/
//%- (void)addRawValues:(const TYPE [])values count:(NSUInteger)count;
//%- (void)addRawValues:(const TYPE [__nullable])values count:(NSUInteger)count;
//%
//%/**
//% * Inserts a raw enum value at the given index.
......
This diff is collapsed.
......@@ -112,16 +112,27 @@ typedef NS_ENUM(NSInteger, GPBWellKnownTypesErrorCode) {
* @note: Not all second/nanos combinations can be represented in a
* NSTimeInterval, so getting this could be a lossy transform.
**/
@property(nonatomic, readwrite) NSTimeInterval timeIntervalSince1970;
@property(nonatomic, readwrite) NSTimeInterval timeInterval;
/**
* Initializes a GPBDuration with the given NSTimeInterval.
*
* @param timeIntervalSince1970 Time interval to configure the GPBDuration with.
* @param timeInterval Time interval to configure the GPBDuration with.
*
* @return A newly initialized GPBDuration.
**/
- (instancetype)initWithTimeIntervalSince1970:(NSTimeInterval)timeIntervalSince1970;
- (instancetype)initWithTimeInterval:(NSTimeInterval)timeInterval;
// These next two methods are deprecated because GBPDuration has no need of a
// "base" time. The older methods were about symmetry with GBPTimestamp, but
// the unix epoch usage is too confusing.
/** Deprecated, use timeInterval instead. */
@property(nonatomic, readwrite) NSTimeInterval timeIntervalSince1970
__attribute__((deprecated("Use timeInterval")));
/** Deprecated, use initWithTimeInterval: instead. */
- (instancetype)initWithTimeIntervalSince1970:(NSTimeInterval)timeIntervalSince1970
__attribute__((deprecated("Use initWithTimeInterval:")));
@end
......
......@@ -41,15 +41,25 @@ NSString *const GPBWellKnownTypesErrorDomain =
static NSString *kTypePrefixGoogleApisCom = @"type.googleapis.com/";
static NSTimeInterval TimeIntervalSince1970FromSecondsAndNanos(int64_t seconds,
int32_t nanos) {
static NSTimeInterval TimeIntervalFromSecondsAndNanos(int64_t seconds,
int32_t nanos) {
return seconds + (NSTimeInterval)nanos / 1e9;
}
static int32_t SecondsAndNanosFromTimeIntervalSince1970(NSTimeInterval time,
int64_t *outSeconds) {
static int32_t SecondsAndNanosFromTimeInterval(NSTimeInterval time,
int64_t *outSeconds,
BOOL nanosMustBePositive) {
NSTimeInterval seconds;
NSTimeInterval nanos = modf(time, &seconds);
if (nanosMustBePositive && (nanos < 0)) {
// Per Timestamp.proto, nanos is non-negative and "Negative second values with
// fractions must still have non-negative nanos values that count forward in
// time. Must be from 0 to 999,999,999 inclusive."
--seconds;
nanos = 1.0 + nanos;
}
nanos *= 1e9;
*outSeconds = (int64_t)seconds;
return (int32_t)nanos;
......@@ -88,8 +98,8 @@ static NSString *ParseTypeFromURL(NSString *typeURLString) {
- (instancetype)initWithTimeIntervalSince1970:(NSTimeInterval)timeIntervalSince1970 {
if ((self = [super init])) {
int64_t seconds;
int32_t nanos = SecondsAndNanosFromTimeIntervalSince1970(
timeIntervalSince1970, &seconds);
int32_t nanos = SecondsAndNanosFromTimeInterval(
timeIntervalSince1970, &seconds, YES);
self.seconds = seconds;
self.nanos = nanos;
}
......@@ -105,13 +115,13 @@ static NSString *ParseTypeFromURL(NSString *typeURLString) {
}
- (NSTimeInterval)timeIntervalSince1970 {
return TimeIntervalSince1970FromSecondsAndNanos(self.seconds, self.nanos);
return TimeIntervalFromSecondsAndNanos(self.seconds, self.nanos);
}
- (void)setTimeIntervalSince1970:(NSTimeInterval)timeIntervalSince1970 {
int64_t seconds;
int32_t nanos =
SecondsAndNanosFromTimeIntervalSince1970(timeIntervalSince1970, &seconds);
SecondsAndNanosFromTimeInterval(timeIntervalSince1970, &seconds, YES);
self.seconds = seconds;
self.nanos = nanos;
}
......@@ -122,29 +132,41 @@ static NSString *ParseTypeFromURL(NSString *typeURLString) {
@implementation GPBDuration (GBPWellKnownTypes)
- (instancetype)initWithTimeIntervalSince1970:(NSTimeInterval)timeIntervalSince1970 {
- (instancetype)initWithTimeInterval:(NSTimeInterval)timeInterval {
if ((self = [super init])) {
int64_t seconds;
int32_t nanos = SecondsAndNanosFromTimeIntervalSince1970(
timeIntervalSince1970, &seconds);
int32_t nanos = SecondsAndNanosFromTimeInterval(
timeInterval, &seconds, NO);
self.seconds = seconds;
self.nanos = nanos;
}
return self;
}
- (NSTimeInterval)timeIntervalSince1970 {
return TimeIntervalSince1970FromSecondsAndNanos(self.seconds, self.nanos);
- (instancetype)initWithTimeIntervalSince1970:(NSTimeInterval)timeIntervalSince1970 {
return [self initWithTimeInterval:timeIntervalSince1970];
}
- (void)setTimeIntervalSince1970:(NSTimeInterval)timeIntervalSince1970 {
- (NSTimeInterval)timeInterval {
return TimeIntervalFromSecondsAndNanos(self.seconds, self.nanos);
}
- (void)setTimeInterval:(NSTimeInterval)timeInterval {
int64_t seconds;
int32_t nanos =
SecondsAndNanosFromTimeIntervalSince1970(timeIntervalSince1970, &seconds);
SecondsAndNanosFromTimeInterval(timeInterval, &seconds, NO);
self.seconds = seconds;
self.nanos = nanos;
}
- (NSTimeInterval)timeIntervalSince1970 {
return self.timeInterval;
}
- (void)setTimeIntervalSince1970:(NSTimeInterval)timeIntervalSince1970 {
self.timeInterval = timeIntervalSince1970;
}
@end
#pragma mark - GPBAny
......
......@@ -32,11 +32,9 @@
#import <XCTest/XCTest.h>
#import "GPBTestUtilities.h"
#import "google/protobuf/AnyTest.pbobjc.h"
// A basically random interval into the future for testing with.
static const NSTimeInterval kFutureOffsetInterval = 15000;
// Nanosecond time accuracy
static const NSTimeInterval kTimeAccuracy = 1e-9;
......@@ -46,59 +44,117 @@ static const NSTimeInterval kTimeAccuracy = 1e-9;
@implementation WellKnownTypesTest
- (void)testTimeStamp {
// Test Creation.
NSDate *date = [NSDate date];
GPBTimestamp *timeStamp = [[GPBTimestamp alloc] initWithDate:date];
NSDate *timeStampDate = timeStamp.date;
// Comparing timeIntervals instead of directly comparing dates because date
// equality requires the time intervals to be exactly the same, and the
// timeintervals go through a bit of floating point error as they are
// converted back and forth from the internal representation.
XCTAssertEqualWithAccuracy(date.timeIntervalSince1970,
timeStampDate.timeIntervalSince1970,
kTimeAccuracy);
NSTimeInterval time = [date timeIntervalSince1970];
GPBTimestamp *timeStamp2 =
[[GPBTimestamp alloc] initWithTimeIntervalSince1970:time];
NSTimeInterval durationTime = timeStamp2.timeIntervalSince1970;
XCTAssertEqualWithAccuracy(time, durationTime, kTimeAccuracy);
[timeStamp release];
// Test Mutation.
date = [NSDate dateWithTimeIntervalSinceNow:kFutureOffsetInterval];
timeStamp2.date = date;
timeStampDate = timeStamp2.date;
XCTAssertEqualWithAccuracy(date.timeIntervalSince1970,
timeStampDate.timeIntervalSince1970,
kTimeAccuracy);
time = date.timeIntervalSince1970;
timeStamp2.timeIntervalSince1970 = time;
durationTime = timeStamp2.timeIntervalSince1970;
XCTAssertEqualWithAccuracy(time, durationTime, kTimeAccuracy);
[timeStamp2 release];
// Test negative and positive values.
NSTimeInterval values[] = {
-428027599.483999967, -1234567.0, -0.5, 0, 0.75, 54321.0, 2468086,483999967
};
for (size_t i = 0; i < GPBARRAYSIZE(values); ++i) {
NSTimeInterval value = values[i];
// Test Creation - date.
NSDate *date = [NSDate dateWithTimeIntervalSince1970:value];
GPBTimestamp *timeStamp = [[GPBTimestamp alloc] initWithDate:date];
XCTAssertGreaterThanOrEqual(timeStamp.nanos, 0,
@"Offset %f - Date: %@", (double)value, date);
XCTAssertLessThan(timeStamp.nanos, 1e9,
@"Offset %f - Date: %@", (double)value, date);
// Comparing timeIntervals instead of directly comparing dates because date
// equality requires the time intervals to be exactly the same, and the
// timeintervals go through a bit of floating point error as they are
// converted back and forth from the internal representation.
XCTAssertEqualWithAccuracy(value, timeStamp.date.timeIntervalSince1970,
kTimeAccuracy,
@"Offset %f - Date: %@", (double)value, date);
[timeStamp release];
// Test Creation - timeIntervalSince1970.
timeStamp = [[GPBTimestamp alloc] initWithTimeIntervalSince1970:value];
XCTAssertGreaterThanOrEqual(timeStamp.nanos, 0,
@"Offset %f - Date: %@", (double)value, date);
XCTAssertLessThan(timeStamp.nanos, 1e9,
@"Offset %f - Date: %@", (double)value, date);
XCTAssertEqualWithAccuracy(value, timeStamp.timeIntervalSince1970,
kTimeAccuracy,
@"Offset %f - Date: %@", (double)value, date);
[timeStamp release];
// Test Mutation - date.
timeStamp = [[GPBTimestamp alloc] init];
timeStamp.date = date;
XCTAssertGreaterThanOrEqual(timeStamp.nanos, 0,
@"Offset %f - Date: %@", (double)value, date);
XCTAssertLessThan(timeStamp.nanos, 1e9,
@"Offset %f - Date: %@", (double)value, date);
XCTAssertEqualWithAccuracy(value, timeStamp.date.timeIntervalSince1970,
kTimeAccuracy,
@"Offset %f - Date: %@", (double)value, date);
[timeStamp release];
// Test Mutation - timeIntervalSince1970.
timeStamp = [[GPBTimestamp alloc] init];
timeStamp.timeIntervalSince1970 = value;
XCTAssertGreaterThanOrEqual(timeStamp.nanos, 0,
@"Offset %f - Date: %@", (double)value, date);
XCTAssertLessThan(timeStamp.nanos, 1e9,
@"Offset %f - Date: %@", (double)value, date);
XCTAssertEqualWithAccuracy(value, timeStamp.date.timeIntervalSince1970,
kTimeAccuracy,
@"Offset %f - Date: %@", (double)value, date);
[timeStamp release];
}
}
- (void)testDuration {
// Test Creation.
NSTimeInterval time = [[NSDate date] timeIntervalSince1970];
GPBDuration *duration =
[[GPBDuration alloc] initWithTimeIntervalSince1970:time];
NSTimeInterval durationTime = duration.timeIntervalSince1970;
XCTAssertEqualWithAccuracy(time, durationTime, kTimeAccuracy);
[duration release];
// Test Mutation.
GPBDuration *duration2 =
[[GPBDuration alloc] initWithTimeIntervalSince1970:time];
NSDate *date = [NSDate dateWithTimeIntervalSinceNow:kFutureOffsetInterval];
time = date.timeIntervalSince1970;
duration2.timeIntervalSince1970 = time;
durationTime = duration2.timeIntervalSince1970;
XCTAssertEqualWithAccuracy(time, durationTime, kTimeAccuracy);
[duration2 release];
// Test negative and positive values.
NSTimeInterval values[] = { -1000.0001, -500.0, -0.5, 0, 0.75, 1000.0, 2000.0002 };
for (size_t i = 0; i < GPBARRAYSIZE(values); ++i) {
NSTimeInterval value = values[i];
// Test Creation.
GPBDuration *duration =
[[GPBDuration alloc] initWithTimeInterval:value];
XCTAssertEqualWithAccuracy(value, duration.timeInterval, kTimeAccuracy,
@"For interval %f", (double)value);
if (value > 0) {
XCTAssertGreaterThanOrEqual(duration.seconds, 0,
@"For interval %f", (double)value);
XCTAssertGreaterThanOrEqual(duration.nanos, 0,
@"For interval %f", (double)value);
} else {
XCTAssertLessThanOrEqual(duration.seconds, 0,
@"For interval %f", (double)value);
XCTAssertLessThanOrEqual(duration.nanos, 0,
@"For interval %f", (double)value);
}
[duration release];
// Test Mutation.
duration = [[GPBDuration alloc] init];
duration.timeInterval = value;
XCTAssertEqualWithAccuracy(value, duration.timeInterval, kTimeAccuracy,
@"For interval %f", (double)value);
if (value > 0) {
XCTAssertGreaterThanOrEqual(duration.seconds, 0,
@"For interval %f", (double)value);
XCTAssertGreaterThanOrEqual(duration.nanos, 0,
@"For interval %f", (double)value);
} else {
XCTAssertLessThanOrEqual(duration.seconds, 0,
@"For interval %f", (double)value);
XCTAssertLessThanOrEqual(duration.nanos, 0,
@"For interval %f", (double)value);
}
[duration release];
}
}
- (void)testAnyHelpers {
......
......@@ -13,8 +13,8 @@
<date>2017-01-13</date>
<time>16:06:07</time>
<version>
<release>3.2.0a1rc2</release>
<api>3.2.0a1rc2</api>
<release>3.2.0a1</release>
<api>3.2.0a1</api>
</version>
<stability>
<release>alpha</release>
......@@ -73,8 +73,8 @@ First alpha release
</release>
<release>
<version>
<release>3.2.0a1rc2</release>
<api>3.2.0a1rc2</api>
<release>3.2.0a1</release>
<api>3.2.0a1</api>
</version>
<stability>
<release>alpha</release>
......
......@@ -37,7 +37,7 @@
#include "upb.h"
#define PHP_PROTOBUF_EXTNAME "protobuf"
#define PHP_PROTOBUF_VERSION "3.2.0a1rc2"
#define PHP_PROTOBUF_VERSION "3.2.0a1"
#define MAX_LENGTH_OF_INT64 20
#define SIZEOF_INT64 8
......
......@@ -9728,7 +9728,7 @@ static size_t encode_strbuf(void *c, const void *hd, const char *buf,
T(double, double, dbl2uint64, encode_fixed64)
T(float, float, flt2uint32, encode_fixed32)
T(int64, int64_t, uint64_t, encode_varint)
T(int32, int32_t, uint32_t, encode_varint)
T(int32, int32_t, int64_t, encode_varint)
T(fixed64, uint64_t, uint64_t, encode_fixed64)
T(fixed32, uint32_t, uint32_t, encode_fixed32)
T(bool, bool, bool, encode_varint)
......
......@@ -403,10 +403,14 @@ class GPBWire
return self::varint32Size($tag);
}
public static function varint32Size($value)
public static function varint32Size($value, $sign_extended = false)
{
if ($value < 0) {
return 5;
if ($sign_extended) {
return 10;
} else {
return 5;
}
}
if ($value < (1 << 7)) {
return 1;
......
......@@ -70,7 +70,6 @@ class InputStream
private $total_bytes_read;
const MAX_VARINT_BYTES = 10;
const MAX_VARINT32_BYTES = 5;
const DEFAULT_RECURSION_LIMIT = 100;
const DEFAULT_TOTAL_BYTES_LIMIT = 33554432; // 32 << 20, 32MB
......
......@@ -582,9 +582,11 @@ class Message
case GPBType::SFIXED64:
$size += 8;
break;
case GPBType::UINT32:
case GPBType::INT32:
case GPBType::ENUM:
$size += GPBWire::varint32Size($value, true);
break;
case GPBType::UINT32:
$size += GPBWire::varint32Size($value);
break;
case GPBType::UINT64:
......
......@@ -39,7 +39,6 @@ class OutputStream
private $buffer_size;
private $current;
const MAX_VARINT32_BYTES = 5;
const MAX_VARINT64_BYTES = 10;
public function __construct($size)
......@@ -56,8 +55,8 @@ class OutputStream
public function writeVarint32($value)
{
$bytes = str_repeat(chr(0), self::MAX_VARINT32_BYTES);
$size = self::writeVarintToArray($value, $bytes, true);
$bytes = str_repeat(chr(0), self::MAX_VARINT64_BYTES);
$size = self::writeVarintToArray($value, $bytes);
return $this->writeRaw($bytes, $size);
}
......@@ -102,20 +101,16 @@ class OutputStream
return true;
}
private static function writeVarintToArray($value, &$buffer, $trim = false)
private static function writeVarintToArray($value, &$buffer)
{
$current = 0;
$high = 0;
$low = 0;
if (PHP_INT_SIZE == 4) {
GPBUtil::divideInt64ToInt32($value, $high, $low, $trim);
GPBUtil::divideInt64ToInt32($value, $high, $low);
} else {
if ($trim) {
$low = $value & 0xFFFFFFFF;
} else {
$low = $value;
}
$low = $value;
}
while ($low >= 0x80 || $low < 0) {
......
......@@ -22,7 +22,8 @@ class EncodeDecodeTest extends TestBase
$this->expectFields($from);
$data = $from->encode();
$this->assertSame(TestUtil::getGoldenTestMessage(), $data);
$this->assertSame(bin2hex(TestUtil::getGoldenTestMessage()),
bin2hex($data));
}
public function testDecode()
......@@ -173,4 +174,25 @@ class EncodeDecodeTest extends TestBase
$m = new TestMessage();
$m->decode($data);
}
public function testEncodeNegativeInt32()
{
$m = new TestMessage();
$m->setOptionalInt32(-1);
$data = $m->encode();
$this->assertSame("08ffffffffffffffffff01", bin2hex($data));
}
public function testDecodeNegativeInt32()
{
$m = new TestMessage();
$this->assertEquals(0, $m->getOptionalInt32());
$m->decode(hex2bin("08ffffffffffffffffff01"));
$this->assertEquals(-1, $m->getOptionalInt32());
$m = new TestMessage();
$this->assertEquals(0, $m->getOptionalInt32());
$m->decode(hex2bin("08ffffffff0f"));
$this->assertEquals(-1, $m->getOptionalInt32());
}
}
......@@ -469,6 +469,11 @@ class ImplementationTest extends TestBase
$output = new OutputStream(3);
$output->writeVarint32(16384);
$this->assertSame(hex2bin('808001'), $output->getData());
// Negative numbers are padded to be compatible with int64.
$output = new OutputStream(10);
$output->writeVarint32(-43);
$this->assertSame(hex2bin('D5FFFFFFFFFFFFFFFF01'), $output->getData());
}
public function testWriteVarint64()
......@@ -496,13 +501,13 @@ class ImplementationTest extends TestBase
{
$m = new TestMessage();
TestUtil::setTestMessage($m);
$this->assertSame(447, $m->byteSize());
$this->assertSame(472, $m->byteSize());
}
public function testPackedByteSize()
{
$m = new TestPackedMessage();
TestUtil::setTestPackedMessage($m);
$this->assertSame(156, $m->byteSize());
$this->assertSame(166, $m->byteSize());
}
}
......@@ -235,7 +235,7 @@ class TestUtil
public static function getGoldenTestMessage()
{
return hex2bin(
"08D6FFFFFF0F" .
"08D6FFFFFFFFFFFFFFFF01" .
"10D5FFFFFFFFFFFFFFFF01" .
"182A" .
"202B" .
......@@ -253,8 +253,8 @@ class TestUtil
"800101" .
"8A01020821" .
"F801D6FFFFFF0F" .
"F801CCFFFFFF0F" .
"F801D6FFFFFFFFFFFFFFFF01" .
"F801CCFFFFFFFFFFFFFFFF01" .
"8002D5FFFFFFFFFFFFFFFF01" .
"8002CBFFFFFFFFFFFFFFFF01" .
"88022A" .
......@@ -288,7 +288,7 @@ class TestUtil
"FA02020822" .
"FA02020823" .
"BA040C08C2FFFFFF0F10C2FFFFFF0F" .
"BA041608C2FFFFFFFFFFFFFFFF0110C2FFFFFFFFFFFFFFFF01" .
"C2041608C1FFFFFFFFFFFFFFFF0110C1FFFFFFFFFFFFFFFF01" .
"CA0404083E103E" .
"D20404083F103F" .
......@@ -401,7 +401,7 @@ class TestUtil
public static function getGoldenTestPackedMessage()
{
return hex2bin(
"D2050AD6FFFFFF0FCCFFFFFF0F" .
"D20514D6FFFFFFFFFFFFFFFF01CCFFFFFFFFFFFFFFFF01" .
"DA0514D5FFFFFFFFFFFFFFFF01CBFFFFFFFFFFFFFFFF01" .
"E205022A34" .
"EA05022B35" .
......@@ -421,7 +421,7 @@ class TestUtil
public static function getGoldenTestUnpackedMessage()
{
return hex2bin(
"D005D6FFFFFF0FD005CCFFFFFF0F" .
"D005D6FFFFFFFFFFFFFFFF01D005CCFFFFFFFFFFFFFFFF01" .
"D805D5FFFFFFFFFFFFFFFF01D805CBFFFFFFFFFFFFFFFF01" .
"E0052AE00534" .
"E8052BE80535" .
......
......@@ -10,7 +10,7 @@
</parent>
<groupId>com.google.protobuf</groupId>
<artifactId>protoc</artifactId>
<version>3.2.0rc2</version>
<version>3.2.0</version>
<packaging>pom</packaging>
<name>Protobuf Compiler</name>
<description>
......
......@@ -30,7 +30,7 @@
# Copyright 2007 Google Inc. All Rights Reserved.
__version__ = '3.2.0rc2'
__version__ = '3.2.0'
if __name__ != '__main__':
try:
......
Gem::Specification.new do |s|
s.name = "google-protobuf"
s.version = "3.2.0.rc2"
s.version = "3.2.0"
s.licenses = ["BSD-3-Clause"]
s.summary = "Protocol Buffers"
s.description = "Protocol Buffers are Google's data interchange format."
......
......@@ -357,11 +357,11 @@ void EncodeFixedSizeValue(uint64 v, uint8* dest) {
WireFormatLite::WriteFixed64NoTagToArray(v, dest);
}
void EncodeSFixedSizeValue(int32 v, uint8* dest) {
void EncodeFixedSizeValue(int32 v, uint8* dest) {
WireFormatLite::WriteSFixed32NoTagToArray(v, dest);
}
void EncodeSFixedSizeValue(int64 v, uint8* dest) {
void EncodeFixedSizeValue(int64 v, uint8* dest) {
WireFormatLite::WriteSFixed64NoTagToArray(v, dest);
}
......
......@@ -444,7 +444,7 @@ build_php5.6_mac() {
export PATH="$PHP_FOLDER/bin:$PATH"
# Install phpunit
curl https://phar.phpunit.de/phpunit.phar -L -o phpunit.phar
curl https://phar.phpunit.de/phpunit-5.6.10.phar -L -o phpunit.phar
chmod +x phpunit.phar
sudo mv phpunit.phar /usr/local/bin/phpunit
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment