Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in / Register
Toggle navigation
P
protobuf
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Packages
Packages
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
submodule
protobuf
Commits
25a28580
Commit
25a28580
authored
Feb 18, 2009
by
Jon Skeet
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Support packed primitive types
parent
0ca3fecf
Hide whitespace changes
Inline
Side-by-side
Showing
26 changed files
with
1726 additions
and
629 deletions
+1726
-629
protoc.exe
lib/protoc.exe
+0
-0
descriptor.proto
protos/google/protobuf/descriptor.proto
+7
-0
unittest.proto
protos/google/protobuf/unittest.proto
+38
-0
BenchmarkSpeedProtoFile.cs
src/ProtoBench/BenchmarkSpeedProtoFile.cs
+75
-28
FieldGeneratorBase.cs
src/ProtoGen/FieldGeneratorBase.cs
+39
-0
MessageGenerator.cs
src/ProtoGen/MessageGenerator.cs
+1
-1
RepeatedEnumFieldGenerator.cs
src/ProtoGen/RepeatedEnumFieldGenerator.cs
+56
-7
RepeatedPrimitiveFieldGenerator.cs
src/ProtoGen/RepeatedPrimitiveFieldGenerator.cs
+51
-5
AbstractMessageTest.cs
src/ProtocolBuffers.Test/AbstractMessageTest.cs
+14
-0
CodedOutputStreamTest.cs
src/ProtocolBuffers.Test/CodedOutputStreamTest.cs
+12
-0
DynamicMessageTest.cs
src/ProtocolBuffers.Test/DynamicMessageTest.cs
+29
-0
ReflectionTester.cs
src/ProtocolBuffers.Test/ReflectionTester.cs
+487
-400
UnitTestCustomOptionsProtoFile.cs
...Buffers.Test/TestProtos/UnitTestCustomOptionsProtoFile.cs
+91
-95
UnitTestProtoFile.cs
src/ProtocolBuffers.Test/TestProtos/UnitTestProtoFile.cs
+0
-0
TestUtil.cs
src/ProtocolBuffers.Test/TestUtil.cs
+205
-0
WireFormatTest.cs
src/ProtocolBuffers.Test/WireFormatTest.cs
+36
-4
AbstractMessage.cs
src/ProtocolBuffers/AbstractMessage.cs
+28
-4
CodedInputStream.cs
src/ProtocolBuffers/CodedInputStream.cs
+14
-0
CodedOutputStream.cs
src/ProtocolBuffers/CodedOutputStream.cs
+347
-16
DescriptorProtoFile.cs
src/ProtocolBuffers/DescriptorProtos/DescriptorProtoFile.cs
+73
-26
FieldDescriptor.cs
src/ProtocolBuffers/Descriptors/FieldDescriptor.cs
+4
-0
FieldSet.cs
src/ProtocolBuffers/FieldSet.cs
+29
-5
UnknownFieldSet.cs
src/ProtocolBuffers/UnknownFieldSet.cs
+58
-35
WireFormat.cs
src/ProtocolBuffers/WireFormat.cs
+25
-0
golden_packed_fields_message
testdata/golden_packed_fields_message
+0
-0
todo.txt
todo.txt
+7
-3
No files found.
lib/protoc.exe
View file @
25a28580
No preview for this file type
protos/google/protobuf/descriptor.proto
View file @
25a28580
...
@@ -252,6 +252,8 @@ message FileOptions {
...
@@ -252,6 +252,8 @@ message FileOptions {
}
}
optional
OptimizeMode
optimize_for
=
9
[
default
=
CODE_SIZE
];
optional
OptimizeMode
optimize_for
=
9
[
default
=
CODE_SIZE
];
// The parser stores options it doesn't recognize here. See above.
// The parser stores options it doesn't recognize here. See above.
repeated
UninterpretedOption
uninterpreted_option
=
999
;
repeated
UninterpretedOption
uninterpreted_option
=
999
;
...
@@ -298,6 +300,11 @@ message FieldOptions {
...
@@ -298,6 +300,11 @@ message FieldOptions {
STRING_PIECE
=
2
;
STRING_PIECE
=
2
;
}
}
// The packed option can be enabled for repeated primitive fields to enable
// a more efficient representation on the wire. Rather than repeatedly
// writing the tag and type for each element, the entire array is encoded as
// a single length-delimited blob.
optional
bool
packed
=
2
;
// EXPERIMENTAL. DO NOT USE.
// EXPERIMENTAL. DO NOT USE.
// For "map" fields, the name of the field in the enclosed type that
// For "map" fields, the name of the field in the enclosed type that
...
...
protos/google/protobuf/unittest.proto
View file @
25a28580
...
@@ -458,6 +458,44 @@ message TestExtremeDefaultValues {
...
@@ -458,6 +458,44 @@ message TestExtremeDefaultValues {
optional
string
utf8_string
=
6
[
default
=
"\341\210\264"
];
optional
string
utf8_string
=
6
[
default
=
"\341\210\264"
];
}
}
message
TestPackedTypes
{
repeated
int32
packed_int32
=
90
[
packed
=
true
];
repeated
int64
packed_int64
=
91
[
packed
=
true
];
repeated
uint32
packed_uint32
=
92
[
packed
=
true
];
repeated
uint64
packed_uint64
=
93
[
packed
=
true
];
repeated
sint32
packed_sint32
=
94
[
packed
=
true
];
repeated
sint64
packed_sint64
=
95
[
packed
=
true
];
repeated
fixed32
packed_fixed32
=
96
[
packed
=
true
];
repeated
fixed64
packed_fixed64
=
97
[
packed
=
true
];
repeated
sfixed32
packed_sfixed32
=
98
[
packed
=
true
];
repeated
sfixed64
packed_sfixed64
=
99
[
packed
=
true
];
repeated
float
packed_float
=
100
[
packed
=
true
];
repeated
double
packed_double
=
101
[
packed
=
true
];
repeated
bool
packed_bool
=
102
[
packed
=
true
];
repeated
ForeignEnum
packed_enum
=
103
[
packed
=
true
];
}
message
TestPackedExtensions
{
extensions
1
to
max
;
}
extend
TestPackedExtensions
{
repeated
int32
packed_int32_extension
=
90
[
packed
=
true
];
repeated
int64
packed_int64_extension
=
91
[
packed
=
true
];
repeated
uint32
packed_uint32_extension
=
92
[
packed
=
true
];
repeated
uint64
packed_uint64_extension
=
93
[
packed
=
true
];
repeated
sint32
packed_sint32_extension
=
94
[
packed
=
true
];
repeated
sint64
packed_sint64_extension
=
95
[
packed
=
true
];
repeated
fixed32
packed_fixed32_extension
=
96
[
packed
=
true
];
repeated
fixed64
packed_fixed64_extension
=
97
[
packed
=
true
];
repeated
sfixed32
packed_sfixed32_extension
=
98
[
packed
=
true
];
repeated
sfixed64
packed_sfixed64_extension
=
99
[
packed
=
true
];
repeated
float
packed_float_extension
=
100
[
packed
=
true
];
repeated
double
packed_double_extension
=
101
[
packed
=
true
];
repeated
bool
packed_bool_extension
=
102
[
packed
=
true
];
repeated
ForeignEnum
packed_enum_extension
=
103
[
packed
=
true
];
}
// Test that RPC services work.
// Test that RPC services work.
message
FooRequest
{}
message
FooRequest
{}
message
FooResponse
{}
message
FooResponse
{}
...
...
src/ProtoBench/BenchmarkSpeedProtoFile.cs
View file @
25a28580
...
@@ -523,8 +523,10 @@ namespace Google.ProtocolBuffers.ProtoBench {
...
@@ -523,8 +523,10 @@ namespace Google.ProtocolBuffers.ProtoBench {
if
(
HasField4
)
{
if
(
HasField4
)
{
output
.
WriteString
(
4
,
Field4
);
output
.
WriteString
(
4
,
Field4
);
}
}
foreach
(
ulong
element
in
Field5List
)
{
if
(
field5_
.
Count
>
0
)
{
output
.
WriteFixed64
(
5
,
element
);
foreach
(
ulong
element
in
field5_
)
{
output
.
WriteFixed64
(
5
,
element
);
}
}
}
if
(
HasField6
)
{
if
(
HasField6
)
{
output
.
WriteInt32
(
6
,
Field6
);
output
.
WriteInt32
(
6
,
Field6
);
...
@@ -677,8 +679,11 @@ namespace Google.ProtocolBuffers.ProtoBench {
...
@@ -677,8 +679,11 @@ namespace Google.ProtocolBuffers.ProtoBench {
if
(
HasField4
)
{
if
(
HasField4
)
{
size
+=
pb
::
CodedOutputStream
.
ComputeStringSize
(
4
,
Field4
);
size
+=
pb
::
CodedOutputStream
.
ComputeStringSize
(
4
,
Field4
);
}
}
foreach
(
ulong
element
in
Field5List
)
{
{
size
+=
pb
::
CodedOutputStream
.
ComputeFixed64Size
(
5
,
element
);
int
dataSize
=
0
;
dataSize
=
8
*
field5_
.
Count
;
size
+=
dataSize
;
size
+=
1
*
field5_
.
Count
;
}
}
if
(
HasField59
)
{
if
(
HasField59
)
{
size
+=
pb
::
CodedOutputStream
.
ComputeBoolSize
(
59
,
Field59
);
size
+=
pb
::
CodedOutputStream
.
ComputeBoolSize
(
59
,
Field59
);
...
@@ -3116,8 +3121,10 @@ namespace Google.ProtocolBuffers.ProtoBench {
...
@@ -3116,8 +3121,10 @@ namespace Google.ProtocolBuffers.ProtoBench {
if
(
HasField13
)
{
if
(
HasField13
)
{
output
.
WriteString
(
13
,
Field13
);
output
.
WriteString
(
13
,
Field13
);
}
}
foreach
(
string
element
in
Field14List
)
{
if
(
field14_
.
Count
>
0
)
{
output
.
WriteString
(
14
,
element
);
foreach
(
string
element
in
field14_
)
{
output
.
WriteString
(
14
,
element
);
}
}
}
if
(
HasField15
)
{
if
(
HasField15
)
{
output
.
WriteUInt64
(
15
,
Field15
);
output
.
WriteUInt64
(
15
,
Field15
);
...
@@ -3128,8 +3135,10 @@ namespace Google.ProtocolBuffers.ProtoBench {
...
@@ -3128,8 +3135,10 @@ namespace Google.ProtocolBuffers.ProtoBench {
if
(
HasField20
)
{
if
(
HasField20
)
{
output
.
WriteInt32
(
20
,
Field20
);
output
.
WriteInt32
(
20
,
Field20
);
}
}
foreach
(
string
element
in
Field22List
)
{
if
(
field22_
.
Count
>
0
)
{
output
.
WriteString
(
22
,
element
);
foreach
(
string
element
in
field22_
)
{
output
.
WriteString
(
22
,
element
);
}
}
}
if
(
HasField24
)
{
if
(
HasField24
)
{
output
.
WriteString
(
24
,
Field24
);
output
.
WriteString
(
24
,
Field24
);
...
@@ -3149,8 +3158,10 @@ namespace Google.ProtocolBuffers.ProtoBench {
...
@@ -3149,8 +3158,10 @@ namespace Google.ProtocolBuffers.ProtoBench {
if
(
HasField31
)
{
if
(
HasField31
)
{
output
.
WriteMessage
(
31
,
Field31
);
output
.
WriteMessage
(
31
,
Field31
);
}
}
foreach
(
int
element
in
Field73List
)
{
if
(
field73_
.
Count
>
0
)
{
output
.
WriteInt32
(
73
,
element
);
foreach
(
int
element
in
field73_
)
{
output
.
WriteInt32
(
73
,
element
);
}
}
}
UnknownFields
.
WriteTo
(
output
);
UnknownFields
.
WriteTo
(
output
);
}
}
...
@@ -3174,8 +3185,13 @@ namespace Google.ProtocolBuffers.ProtoBench {
...
@@ -3174,8 +3185,13 @@ namespace Google.ProtocolBuffers.ProtoBench {
if
(
HasField13
)
{
if
(
HasField13
)
{
size
+=
pb
::
CodedOutputStream
.
ComputeStringSize
(
13
,
Field13
);
size
+=
pb
::
CodedOutputStream
.
ComputeStringSize
(
13
,
Field13
);
}
}
foreach
(
string
element
in
Field14List
)
{
{
size
+=
pb
::
CodedOutputStream
.
ComputeStringSize
(
14
,
element
);
int
dataSize
=
0
;
foreach
(
string
element
in
Field14List
)
{
dataSize
+=
pb
::
CodedOutputStream
.
ComputeStringSizeNoTag
(
element
);
}
size
+=
dataSize
;
size
+=
1
*
field14_
.
Count
;
}
}
if
(
HasField15
)
{
if
(
HasField15
)
{
size
+=
pb
::
CodedOutputStream
.
ComputeUInt64Size
(
15
,
Field15
);
size
+=
pb
::
CodedOutputStream
.
ComputeUInt64Size
(
15
,
Field15
);
...
@@ -3195,11 +3211,21 @@ namespace Google.ProtocolBuffers.ProtoBench {
...
@@ -3195,11 +3211,21 @@ namespace Google.ProtocolBuffers.ProtoBench {
if
(
HasField16
)
{
if
(
HasField16
)
{
size
+=
pb
::
CodedOutputStream
.
ComputeStringSize
(
16
,
Field16
);
size
+=
pb
::
CodedOutputStream
.
ComputeStringSize
(
16
,
Field16
);
}
}
foreach
(
string
element
in
Field22List
)
{
{
size
+=
pb
::
CodedOutputStream
.
ComputeStringSize
(
22
,
element
);
int
dataSize
=
0
;
foreach
(
string
element
in
Field22List
)
{
dataSize
+=
pb
::
CodedOutputStream
.
ComputeStringSizeNoTag
(
element
);
}
size
+=
dataSize
;
size
+=
2
*
field22_
.
Count
;
}
}
foreach
(
int
element
in
Field73List
)
{
{
size
+=
pb
::
CodedOutputStream
.
ComputeInt32Size
(
73
,
element
);
int
dataSize
=
0
;
foreach
(
int
element
in
Field73List
)
{
dataSize
+=
pb
::
CodedOutputStream
.
ComputeInt32SizeNoTag
(
element
);
}
size
+=
dataSize
;
size
+=
2
*
field73_
.
Count
;
}
}
if
(
HasField20
)
{
if
(
HasField20
)
{
size
+=
pb
::
CodedOutputStream
.
ComputeInt32Size
(
20
,
Field20
);
size
+=
pb
::
CodedOutputStream
.
ComputeInt32Size
(
20
,
Field20
);
...
@@ -4110,17 +4136,23 @@ namespace Google.ProtocolBuffers.ProtoBench {
...
@@ -4110,17 +4136,23 @@ namespace Google.ProtocolBuffers.ProtoBench {
if
(
HasField109
)
{
if
(
HasField109
)
{
output
.
WriteInt32
(
109
,
Field109
);
output
.
WriteInt32
(
109
,
Field109
);
}
}
foreach
(
string
element
in
Field127List
)
{
if
(
field127_
.
Count
>
0
)
{
output
.
WriteString
(
127
,
element
);
foreach
(
string
element
in
field127_
)
{
output
.
WriteString
(
127
,
element
);
}
}
}
foreach
(
string
element
in
Field128List
)
{
if
(
field128_
.
Count
>
0
)
{
output
.
WriteString
(
128
,
element
);
foreach
(
string
element
in
field128_
)
{
output
.
WriteString
(
128
,
element
);
}
}
}
if
(
HasField129
)
{
if
(
HasField129
)
{
output
.
WriteInt32
(
129
,
Field129
);
output
.
WriteInt32
(
129
,
Field129
);
}
}
foreach
(
long
element
in
Field130List
)
{
if
(
field130_
.
Count
>
0
)
{
output
.
WriteInt64
(
130
,
element
);
foreach
(
long
element
in
field130_
)
{
output
.
WriteInt64
(
130
,
element
);
}
}
}
if
(
HasField131
)
{
if
(
HasField131
)
{
output
.
WriteInt64
(
131
,
Field131
);
output
.
WriteInt64
(
131
,
Field131
);
...
@@ -4240,20 +4272,35 @@ namespace Google.ProtocolBuffers.ProtoBench {
...
@@ -4240,20 +4272,35 @@ namespace Google.ProtocolBuffers.ProtoBench {
foreach
(
global
::
Google
.
ProtocolBuffers
.
ProtoBench
.
SpeedMessage3
.
Types
.
Group1
element
in
Group1List
)
{
foreach
(
global
::
Google
.
ProtocolBuffers
.
ProtoBench
.
SpeedMessage3
.
Types
.
Group1
element
in
Group1List
)
{
size
+=
pb
::
CodedOutputStream
.
ComputeGroupSize
(
10
,
element
);
size
+=
pb
::
CodedOutputStream
.
ComputeGroupSize
(
10
,
element
);
}
}
foreach
(
string
element
in
Field128List
)
{
{
size
+=
pb
::
CodedOutputStream
.
ComputeStringSize
(
128
,
element
);
int
dataSize
=
0
;
foreach
(
string
element
in
Field128List
)
{
dataSize
+=
pb
::
CodedOutputStream
.
ComputeStringSizeNoTag
(
element
);
}
size
+=
dataSize
;
size
+=
2
*
field128_
.
Count
;
}
}
if
(
HasField131
)
{
if
(
HasField131
)
{
size
+=
pb
::
CodedOutputStream
.
ComputeInt64Size
(
131
,
Field131
);
size
+=
pb
::
CodedOutputStream
.
ComputeInt64Size
(
131
,
Field131
);
}
}
foreach
(
string
element
in
Field127List
)
{
{
size
+=
pb
::
CodedOutputStream
.
ComputeStringSize
(
127
,
element
);
int
dataSize
=
0
;
foreach
(
string
element
in
Field127List
)
{
dataSize
+=
pb
::
CodedOutputStream
.
ComputeStringSizeNoTag
(
element
);
}
size
+=
dataSize
;
size
+=
2
*
field127_
.
Count
;
}
}
if
(
HasField129
)
{
if
(
HasField129
)
{
size
+=
pb
::
CodedOutputStream
.
ComputeInt32Size
(
129
,
Field129
);
size
+=
pb
::
CodedOutputStream
.
ComputeInt32Size
(
129
,
Field129
);
}
}
foreach
(
long
element
in
Field130List
)
{
{
size
+=
pb
::
CodedOutputStream
.
ComputeInt64Size
(
130
,
element
);
int
dataSize
=
0
;
foreach
(
long
element
in
Field130List
)
{
dataSize
+=
pb
::
CodedOutputStream
.
ComputeInt64SizeNoTag
(
element
);
}
size
+=
dataSize
;
size
+=
2
*
field130_
.
Count
;
}
}
if
(
HasField205
)
{
if
(
HasField205
)
{
size
+=
pb
::
CodedOutputStream
.
ComputeBoolSize
(
205
,
Field205
);
size
+=
pb
::
CodedOutputStream
.
ComputeBoolSize
(
205
,
Field205
);
...
...
src/ProtoGen/FieldGeneratorBase.cs
View file @
25a28580
...
@@ -97,6 +97,45 @@ namespace Google.ProtocolBuffers.ProtoGen {
...
@@ -97,6 +97,45 @@ namespace Google.ProtocolBuffers.ProtoGen {
}
}
}
}
/// <summary>
/// For encodings with fixed sizes, returns that size in bytes. Otherwise
/// returns -1. TODO(jonskeet): Make this less ugly.
/// </summary>
protected
int
FixedSize
{
get
{
switch
(
Descriptor
.
FieldType
)
{
case
FieldType
.
UInt32
:
case
FieldType
.
UInt64
:
case
FieldType
.
Int32
:
case
FieldType
.
Int64
:
case
FieldType
.
SInt32
:
case
FieldType
.
SInt64
:
case
FieldType
.
Enum
:
case
FieldType
.
Bytes
:
case
FieldType
.
String
:
case
FieldType
.
Message
:
case
FieldType
.
Group
:
return
-
1
;
case
FieldType
.
Float
:
return
WireFormat
.
FloatSize
;
case
FieldType
.
SFixed32
:
return
WireFormat
.
SFixed32Size
;
case
FieldType
.
Fixed32
:
return
WireFormat
.
Fixed32Size
;
case
FieldType
.
Double
:
return
WireFormat
.
DoubleSize
;
case
FieldType
.
SFixed64
:
return
WireFormat
.
SFixed64Size
;
case
FieldType
.
Fixed64
:
return
WireFormat
.
Fixed64Size
;
case
FieldType
.
Bool
:
return
WireFormat
.
BoolSize
;
default
:
throw
new
InvalidOperationException
(
"Invalid field descriptor type"
);
}
}
}
protected
bool
IsNullableType
{
protected
bool
IsNullableType
{
get
{
get
{
switch
(
Descriptor
.
FieldType
)
{
switch
(
Descriptor
.
FieldType
)
{
...
...
src/ProtoGen/MessageGenerator.cs
View file @
25a28580
...
@@ -391,7 +391,7 @@ namespace Google.ProtocolBuffers.ProtoGen {
...
@@ -391,7 +391,7 @@ namespace Google.ProtocolBuffers.ProtoGen {
writer
.
WriteLine
(
" break;"
);
writer
.
WriteLine
(
" break;"
);
writer
.
WriteLine
(
"}"
);
writer
.
WriteLine
(
"}"
);
foreach
(
FieldDescriptor
field
in
sortedFields
)
{
foreach
(
FieldDescriptor
field
in
sortedFields
)
{
uint
tag
=
WireFormat
.
MakeTag
(
field
.
FieldNumber
,
WireFormat
.
GetWireType
(
field
.
FieldType
)
);
uint
tag
=
WireFormat
.
MakeTag
(
field
);
writer
.
WriteLine
(
"case {0}: {{"
,
tag
);
writer
.
WriteLine
(
"case {0}: {{"
,
tag
);
writer
.
Indent
();
writer
.
Indent
();
SourceGenerators
.
CreateFieldGenerator
(
field
).
GenerateParsingCode
(
writer
);
SourceGenerators
.
CreateFieldGenerator
(
field
).
GenerateParsingCode
(
writer
);
...
...
src/ProtoGen/RepeatedEnumFieldGenerator.cs
View file @
25a28580
using
System
;
using
Google.ProtocolBuffers.DescriptorProtos
;
using
System.Collections.Generic
;
using
System.Text
;
using
Google.ProtocolBuffers.Descriptors
;
using
Google.ProtocolBuffers.Descriptors
;
namespace
Google.ProtocolBuffers.ProtoGen
{
namespace
Google.ProtocolBuffers.ProtoGen
{
...
@@ -11,6 +9,9 @@ namespace Google.ProtocolBuffers.ProtoGen {
...
@@ -11,6 +9,9 @@ namespace Google.ProtocolBuffers.ProtoGen {
}
}
public
void
GenerateMembers
(
TextGenerator
writer
)
{
public
void
GenerateMembers
(
TextGenerator
writer
)
{
if
(
Descriptor
.
IsPacked
&&
Descriptor
.
File
.
Options
.
OptimizeFor
==
FileOptions
.
Types
.
OptimizeMode
.
SPEED
)
{
writer
.
WriteLine
(
"private int {0}MemoizedSerializedSize;"
,
Name
);
}
writer
.
WriteLine
(
"private pbc::PopsicleList<{0}> {1}_ = new pbc::PopsicleList<{0}>();"
,
TypeName
,
Name
);
writer
.
WriteLine
(
"private pbc::PopsicleList<{0}> {1}_ = new pbc::PopsicleList<{0}>();"
,
TypeName
,
Name
);
writer
.
WriteLine
(
"public scg::IList<{0}> {1}List {{"
,
TypeName
,
PropertyName
);
writer
.
WriteLine
(
"public scg::IList<{0}> {1}List {{"
,
TypeName
,
PropertyName
);
writer
.
WriteLine
(
" get {{ return pbc::Lists.AsReadOnly({0}_); }}"
,
Name
);
writer
.
WriteLine
(
" get {{ return pbc::Lists.AsReadOnly({0}_); }}"
,
Name
);
...
@@ -66,6 +67,15 @@ namespace Google.ProtocolBuffers.ProtoGen {
...
@@ -66,6 +67,15 @@ namespace Google.ProtocolBuffers.ProtoGen {
}
}
public
void
GenerateParsingCode
(
TextGenerator
writer
)
{
public
void
GenerateParsingCode
(
TextGenerator
writer
)
{
// If packed, set up the while loop
if
(
Descriptor
.
IsPacked
)
{
writer
.
WriteLine
(
"int length = input.ReadInt32();"
);
writer
.
WriteLine
(
"int oldLimit = input.PushLimit(length);"
);
writer
.
WriteLine
(
"while (!input.ReachedLimit) {"
);
writer
.
Indent
();
}
// Read and store the enum
// TODO(jonskeet): Make a more efficient way of doing this
// TODO(jonskeet): Make a more efficient way of doing this
writer
.
WriteLine
(
"int rawValue = input.ReadEnum();"
);
writer
.
WriteLine
(
"int rawValue = input.ReadEnum();"
);
writer
.
WriteLine
(
"if (!global::System.Enum.IsDefined(typeof({0}), rawValue)) {{"
,
TypeName
);
writer
.
WriteLine
(
"if (!global::System.Enum.IsDefined(typeof({0}), rawValue)) {{"
,
TypeName
);
...
@@ -73,17 +83,56 @@ namespace Google.ProtocolBuffers.ProtoGen {
...
@@ -73,17 +83,56 @@ namespace Google.ProtocolBuffers.ProtoGen {
writer
.
WriteLine
(
"} else {"
);
writer
.
WriteLine
(
"} else {"
);
writer
.
WriteLine
(
" Add{0}(({1}) rawValue);"
,
PropertyName
,
TypeName
);
writer
.
WriteLine
(
" Add{0}(({1}) rawValue);"
,
PropertyName
,
TypeName
);
writer
.
WriteLine
(
"}"
);
writer
.
WriteLine
(
"}"
);
if
(
Descriptor
.
IsPacked
)
{
writer
.
Outdent
();
writer
.
WriteLine
(
"}"
);
writer
.
WriteLine
(
"input.PopLimit(oldLimit);"
);
}
}
}
public
void
GenerateSerializationCode
(
TextGenerator
writer
)
{
public
void
GenerateSerializationCode
(
TextGenerator
writer
)
{
writer
.
WriteLine
(
"foreach ({0} element in {1}List) {{"
,
TypeName
,
PropertyName
);
writer
.
WriteLine
(
"if ({0}_.Count > 0) {{"
,
Name
);
writer
.
WriteLine
(
" output.WriteEnum({0}, (int) element);"
,
Number
);
writer
.
Indent
();
if
(
Descriptor
.
IsPacked
)
{
writer
.
WriteLine
(
"output.WriteRawVarint32({0});"
,
WireFormat
.
MakeTag
(
Descriptor
));
writer
.
WriteLine
(
"output.WriteRawVarint32((uint) {0}MemoizedSerializedSize);"
,
Name
);
writer
.
WriteLine
(
"foreach (int element in {0}_) {{"
,
Name
);
writer
.
WriteLine
(
" output.WriteEnumNoTag(element);"
);
writer
.
WriteLine
(
"}"
);
}
else
{
writer
.
WriteLine
(
"foreach (int element in {0}_) {{"
,
Name
);
writer
.
WriteLine
(
" output.WriteEnum({0}, element);"
,
Number
);
writer
.
WriteLine
(
"}"
);
}
writer
.
Outdent
();
writer
.
WriteLine
(
"}"
);
writer
.
WriteLine
(
"}"
);
}
}
public
void
GenerateSerializedSizeCode
(
TextGenerator
writer
)
{
public
void
GenerateSerializedSizeCode
(
TextGenerator
writer
)
{
writer
.
WriteLine
(
"foreach ({0} element in {1}List) {{"
,
TypeName
,
PropertyName
);
writer
.
WriteLine
(
"{"
);
writer
.
WriteLine
(
" size += pb::CodedOutputStream.ComputeEnumSize({0}, (int) element);"
,
Number
);
writer
.
Indent
();
writer
.
WriteLine
(
"int dataSize = 0;"
);
writer
.
WriteLine
(
"if ({0}_.Count > 0) {{"
,
Name
);
writer
.
Indent
();
writer
.
WriteLine
(
"foreach ({0} element in {1}_) {{"
,
TypeName
,
Name
);
writer
.
WriteLine
(
" dataSize += pb::CodedOutputStream.ComputeEnumSizeNoTag((int) element);"
);
writer
.
WriteLine
(
"}"
);
writer
.
WriteLine
(
"size += dataSize;"
);
int
tagSize
=
CodedOutputStream
.
ComputeTagSize
(
Descriptor
.
FieldNumber
);
if
(
Descriptor
.
IsPacked
)
{
writer
.
WriteLine
(
"size += {0};"
,
tagSize
);
writer
.
WriteLine
(
"size += pb::CodedOutputStream.ComputeRawVarint32Size((uint) dataSize);"
);
}
else
{
writer
.
WriteLine
(
"size += {0} * {1}_.Count;"
,
tagSize
,
Name
);
}
writer
.
Outdent
();
writer
.
WriteLine
(
"}"
);
// cache the data size for packed fields.
if
(
Descriptor
.
IsPacked
)
{
writer
.
WriteLine
(
"{0}MemoizedSerializedSize = dataSize;"
,
Name
);
}
writer
.
Outdent
();
writer
.
WriteLine
(
"}"
);
writer
.
WriteLine
(
"}"
);
}
}
}
}
...
...
src/ProtoGen/RepeatedPrimitiveFieldGenerator.cs
View file @
25a28580
using
System
;
using
System
;
using
System.Collections.Generic
;
using
System.Collections.Generic
;
using
System.Text
;
using
System.Text
;
using
Google.ProtocolBuffers.DescriptorProtos
;
using
Google.ProtocolBuffers.Descriptors
;
using
Google.ProtocolBuffers.Descriptors
;
namespace
Google.ProtocolBuffers.ProtoGen
{
namespace
Google.ProtocolBuffers.ProtoGen
{
...
@@ -11,6 +12,9 @@ namespace Google.ProtocolBuffers.ProtoGen {
...
@@ -11,6 +12,9 @@ namespace Google.ProtocolBuffers.ProtoGen {
}
}
public
void
GenerateMembers
(
TextGenerator
writer
)
{
public
void
GenerateMembers
(
TextGenerator
writer
)
{
if
(
Descriptor
.
IsPacked
&&
Descriptor
.
File
.
Options
.
OptimizeFor
==
FileOptions
.
Types
.
OptimizeMode
.
SPEED
)
{
writer
.
WriteLine
(
"private int {0}MemoizedSerializedSize;"
,
Name
);
}
writer
.
WriteLine
(
"private pbc::PopsicleList<{0}> {1}_ = new pbc::PopsicleList<{0}>();"
,
TypeName
,
Name
);
writer
.
WriteLine
(
"private pbc::PopsicleList<{0}> {1}_ = new pbc::PopsicleList<{0}>();"
,
TypeName
,
Name
);
writer
.
WriteLine
(
"public scg::IList<{0}> {1}List {{"
,
TypeName
,
PropertyName
);
writer
.
WriteLine
(
"public scg::IList<{0}> {1}List {{"
,
TypeName
,
PropertyName
);
writer
.
WriteLine
(
" get {{ return pbc::Lists.AsReadOnly({0}_); }}"
,
Name
);
writer
.
WriteLine
(
" get {{ return pbc::Lists.AsReadOnly({0}_); }}"
,
Name
);
...
@@ -68,18 +72,60 @@ namespace Google.ProtocolBuffers.ProtoGen {
...
@@ -68,18 +72,60 @@ namespace Google.ProtocolBuffers.ProtoGen {
}
}
public
void
GenerateParsingCode
(
TextGenerator
writer
)
{
public
void
GenerateParsingCode
(
TextGenerator
writer
)
{
writer
.
WriteLine
(
"Add{0}(input.Read{1}());"
,
PropertyName
,
CapitalizedTypeName
);
if
(
Descriptor
.
IsPacked
)
{
writer
.
WriteLine
(
"int length = input.ReadInt32();"
);
writer
.
WriteLine
(
"int limit = input.PushLimit(length);"
);
writer
.
WriteLine
(
"while (!input.ReachedLimit) {"
);
writer
.
WriteLine
(
" Add{0}(input.Read{1}());"
,
PropertyName
,
CapitalizedTypeName
);
writer
.
WriteLine
(
"}"
);
writer
.
WriteLine
(
"input.PopLimit(limit);"
);
}
else
{
writer
.
WriteLine
(
"Add{0}(input.Read{1}());"
,
PropertyName
,
CapitalizedTypeName
);
}
}
}
public
void
GenerateSerializationCode
(
TextGenerator
writer
)
{
public
void
GenerateSerializationCode
(
TextGenerator
writer
)
{
writer
.
WriteLine
(
"foreach ({0} element in {1}List) {{"
,
TypeName
,
PropertyName
);
writer
.
WriteLine
(
"if ({0}_.Count > 0) {{"
,
Name
);
writer
.
WriteLine
(
" output.Write{0}({1}, element);"
,
CapitalizedTypeName
,
Number
);
writer
.
Indent
();
if
(
Descriptor
.
IsPacked
)
{
writer
.
WriteLine
(
"output.WriteRawVarint32({0});"
,
WireFormat
.
MakeTag
(
Descriptor
));
writer
.
WriteLine
(
"output.WriteRawVarint32((uint) {0}MemoizedSerializedSize);"
,
Name
);
writer
.
WriteLine
(
"foreach ({0} element in {1}_) {{"
,
TypeName
,
Name
);
writer
.
WriteLine
(
" output.Write{0}NoTag(element);"
,
CapitalizedTypeName
);
writer
.
WriteLine
(
"}"
);
}
else
{
writer
.
WriteLine
(
"foreach ({0} element in {1}_) {{"
,
TypeName
,
Name
);
writer
.
WriteLine
(
" output.Write{0}({1}, element);"
,
CapitalizedTypeName
,
Number
);
writer
.
WriteLine
(
"}"
);
}
writer
.
Outdent
();
writer
.
WriteLine
(
"}"
);
writer
.
WriteLine
(
"}"
);
}
}
public
void
GenerateSerializedSizeCode
(
TextGenerator
writer
)
{
public
void
GenerateSerializedSizeCode
(
TextGenerator
writer
)
{
writer
.
WriteLine
(
"foreach ({0} element in {1}List) {{"
,
TypeName
,
PropertyName
);
writer
.
WriteLine
(
"{"
);
writer
.
WriteLine
(
" size += pb::CodedOutputStream.Compute{0}Size({1}, element);"
,
CapitalizedTypeName
,
Number
);
writer
.
Indent
();
writer
.
WriteLine
(
"int dataSize = 0;"
);
if
(
FixedSize
==
-
1
)
{
writer
.
WriteLine
(
"foreach ({0} element in {1}List) {{"
,
TypeName
,
PropertyName
);
writer
.
WriteLine
(
" dataSize += pb::CodedOutputStream.Compute{0}SizeNoTag(element);"
,
CapitalizedTypeName
,
Number
);
writer
.
WriteLine
(
"}"
);
}
else
{
writer
.
WriteLine
(
"dataSize = {0} * {1}_.Count;"
,
FixedSize
,
Name
);
}
writer
.
WriteLine
(
"size += dataSize;"
);
int
tagSize
=
CodedOutputStream
.
ComputeTagSize
(
Descriptor
.
FieldNumber
);
if
(
Descriptor
.
IsPacked
)
{
writer
.
WriteLine
(
"size += {0};"
,
tagSize
);
writer
.
WriteLine
(
"size += pb::CodedOutputStream.ComputeInt32SizeNoTag(dataSize);"
);
}
else
{
writer
.
WriteLine
(
"size += {0} * {1}_.Count;"
,
tagSize
,
Name
);
}
// cache the data size for packed fields.
if
(
Descriptor
.
IsPacked
)
{
writer
.
WriteLine
(
"{0}MemoizedSerializedSize = dataSize;"
,
Name
);
}
writer
.
Outdent
();
writer
.
WriteLine
(
"}"
);
writer
.
WriteLine
(
"}"
);
}
}
}
}
...
...
src/ProtocolBuffers.Test/AbstractMessageTest.cs
View file @
25a28580
...
@@ -73,6 +73,20 @@ namespace Google.ProtocolBuffers {
...
@@ -73,6 +73,20 @@ namespace Google.ProtocolBuffers {
TestUtil
.
AssertAllFieldsSet
((
TestAllTypes
)
message
.
WrappedMessage
);
TestUtil
.
AssertAllFieldsSet
((
TestAllTypes
)
message
.
WrappedMessage
);
}
}
[
Test
]
public
void
PackedSerialization
()
{
IMessage
abstractMessage
=
new
AbstractMessageWrapper
(
TestUtil
.
GetPackedSet
());
TestUtil
.
AssertPackedFieldsSet
(
TestPackedTypes
.
ParseFrom
(
abstractMessage
.
ToByteString
()));
Assert
.
AreEqual
(
TestUtil
.
GetPackedSet
().
ToByteString
(),
abstractMessage
.
ToByteString
());
}
[
Test
]
public
void
PackedParsing
()
{
AbstractMessageWrapper
.
Builder
builder
=
new
AbstractMessageWrapper
.
Builder
(
TestPackedTypes
.
CreateBuilder
());
AbstractMessageWrapper
message
=
builder
.
MergeFrom
(
TestUtil
.
GetPackedSet
().
ToByteString
()).
Build
();
TestUtil
.
AssertPackedFieldsSet
((
TestPackedTypes
)
message
.
WrappedMessage
);
}
[
Test
]
[
Test
]
public
void
OptimizedForSize
()
{
public
void
OptimizedForSize
()
{
// We're mostly only Checking that this class was compiled successfully.
// We're mostly only Checking that this class was compiled successfully.
...
...
src/ProtocolBuffers.Test/CodedOutputStreamTest.cs
View file @
25a28580
...
@@ -196,6 +196,18 @@ namespace Google.ProtocolBuffers {
...
@@ -196,6 +196,18 @@ namespace Google.ProtocolBuffers {
}
}
}
}
/// <summary>
/// Tests writing a whole message with every packed field type. Ensures the
/// wire format of packed fields is compatible with C++.
/// </summary>
[
Test
]
public
void
WriteWholePackedFieldsMessage
()
{
TestPackedTypes
message
=
TestUtil
.
GetPackedSet
();
byte
[]
rawBytes
=
message
.
ToByteArray
();
TestUtil
.
AssertEqualBytes
(
TestUtil
.
GetGoldenPackedFieldsMessage
().
ToByteArray
(),
rawBytes
);
}
[
Test
]
[
Test
]
public
void
EncodeZigZag32
()
{
public
void
EncodeZigZag32
()
{
...
...
src/ProtocolBuffers.Test/DynamicMessageTest.cs
View file @
25a28580
...
@@ -38,11 +38,13 @@ namespace Google.ProtocolBuffers {
...
@@ -38,11 +38,13 @@ namespace Google.ProtocolBuffers {
private
ReflectionTester
reflectionTester
;
private
ReflectionTester
reflectionTester
;
private
ReflectionTester
extensionsReflectionTester
;
private
ReflectionTester
extensionsReflectionTester
;
private
ReflectionTester
packedReflectionTester
;
[
SetUp
]
[
SetUp
]
public
void
SetUp
()
{
public
void
SetUp
()
{
reflectionTester
=
ReflectionTester
.
CreateTestAllTypesInstance
();
reflectionTester
=
ReflectionTester
.
CreateTestAllTypesInstance
();
extensionsReflectionTester
=
ReflectionTester
.
CreateTestAllExtensionsInstance
();
extensionsReflectionTester
=
ReflectionTester
.
CreateTestAllExtensionsInstance
();
packedReflectionTester
=
ReflectionTester
.
CreateTestPackedTypesInstance
();
}
}
[
Test
]
[
Test
]
...
@@ -135,6 +137,33 @@ namespace Google.ProtocolBuffers {
...
@@ -135,6 +137,33 @@ namespace Google.ProtocolBuffers {
reflectionTester
.
AssertAllFieldsSetViaReflection
(
message2
);
reflectionTester
.
AssertAllFieldsSetViaReflection
(
message2
);
}
}
[
Test
]
public
void
DynamicMessagePackedSerialization
()
{
IBuilder
builder
=
DynamicMessage
.
CreateBuilder
(
TestPackedTypes
.
Descriptor
);
packedReflectionTester
.
SetPackedFieldsViaReflection
(
builder
);
IMessage
message
=
builder
.
WeakBuild
();
ByteString
rawBytes
=
message
.
ToByteString
();
TestPackedTypes
message2
=
TestPackedTypes
.
ParseFrom
(
rawBytes
);
TestUtil
.
AssertPackedFieldsSet
(
message2
);
// In fact, the serialized forms should be exactly the same, byte-for-byte.
Assert
.
AreEqual
(
TestUtil
.
GetPackedSet
().
ToByteString
(),
rawBytes
);
}
[
Test
]
public
void
testDynamicMessagePackedParsing
()
{
TestPackedTypes
.
Builder
builder
=
TestPackedTypes
.
CreateBuilder
();
TestUtil
.
SetPackedFields
(
builder
);
TestPackedTypes
message
=
builder
.
Build
();
ByteString
rawBytes
=
message
.
ToByteString
();
IMessage
message2
=
DynamicMessage
.
ParseFrom
(
TestPackedTypes
.
Descriptor
,
rawBytes
);
packedReflectionTester
.
AssertPackedFieldsSetViaReflection
(
message2
);
}
[
Test
]
[
Test
]
public
void
DynamicMessageCopy
()
{
public
void
DynamicMessageCopy
()
{
TestAllTypes
.
Builder
builder
=
TestAllTypes
.
CreateBuilder
();
TestAllTypes
.
Builder
builder
=
TestAllTypes
.
CreateBuilder
();
...
...
src/ProtocolBuffers.Test/ReflectionTester.cs
View file @
25a28580
...
@@ -88,12 +88,12 @@ namespace Google.ProtocolBuffers {
...
@@ -88,12 +88,12 @@ namespace Google.ProtocolBuffers {
this
.
file
=
baseDescriptor
.
File
;
this
.
file
=
baseDescriptor
.
File
;
// TODO(jonskeet): We've got 2 dependencies, not 1 - because of the C# options. Hmm.
// TODO(jonskeet): We've got 2 dependencies, not 1 - because of the C# options. Hmm.
// Assert.AreEqual(1, file.Dependencies.Count);
// Assert.AreEqual(1, file.Dependencies.Count);
// TODO(jonskeet): Find dependency by name instead of number?
// TODO(jonskeet): Find dependency by name instead of number?
this
.
importFile
=
file
.
Dependencies
[
1
];
this
.
importFile
=
file
.
Dependencies
[
1
];
MessageDescriptor
testAllTypes
;
MessageDescriptor
testAllTypes
;
if
(
extensionRegistry
==
null
)
{
if
(
baseDescriptor
.
Name
==
"TestAllTypes"
)
{
testAllTypes
=
baseDescriptor
;
testAllTypes
=
baseDescriptor
;
}
else
{
}
else
{
testAllTypes
=
file
.
FindTypeByName
<
MessageDescriptor
>(
"TestAllTypes"
);
testAllTypes
=
file
.
FindTypeByName
<
MessageDescriptor
>(
"TestAllTypes"
);
...
@@ -101,10 +101,13 @@ namespace Google.ProtocolBuffers {
...
@@ -101,10 +101,13 @@ namespace Google.ProtocolBuffers {
}
}
if
(
extensionRegistry
==
null
)
{
if
(
extensionRegistry
==
null
)
{
// Use testAllTypes, rather than baseDescriptor, to allow
// initialization using TestPackedTypes descriptors. These objects
// won't be used by the methods for packed fields.
this
.
optionalGroup
=
this
.
optionalGroup
=
baseDescriptor
.
FindDescriptor
<
MessageDescriptor
>(
"OptionalGroup"
);
testAllTypes
.
FindDescriptor
<
MessageDescriptor
>(
"OptionalGroup"
);
this
.
repeatedGroup
=
this
.
repeatedGroup
=
baseDescriptor
.
FindDescriptor
<
MessageDescriptor
>(
"RepeatedGroup"
);
testAllTypes
.
FindDescriptor
<
MessageDescriptor
>(
"RepeatedGroup"
);
}
else
{
}
else
{
this
.
optionalGroup
=
this
.
optionalGroup
=
file
.
FindTypeByName
<
MessageDescriptor
>(
"OptionalGroup_extension"
);
file
.
FindTypeByName
<
MessageDescriptor
>(
"OptionalGroup_extension"
);
...
@@ -119,18 +122,18 @@ namespace Google.ProtocolBuffers {
...
@@ -119,18 +122,18 @@ namespace Google.ProtocolBuffers {
this
.
foreignEnum
=
file
.
FindTypeByName
<
EnumDescriptor
>(
"ForeignEnum"
);
this
.
foreignEnum
=
file
.
FindTypeByName
<
EnumDescriptor
>(
"ForeignEnum"
);
this
.
importEnum
=
importFile
.
FindTypeByName
<
EnumDescriptor
>(
"ImportEnum"
);
this
.
importEnum
=
importFile
.
FindTypeByName
<
EnumDescriptor
>(
"ImportEnum"
);
Assert
.
IsNotNull
(
optionalGroup
);
Assert
.
IsNotNull
(
optionalGroup
);
Assert
.
IsNotNull
(
repeatedGroup
);
Assert
.
IsNotNull
(
repeatedGroup
);
Assert
.
IsNotNull
(
nestedMessage
);
Assert
.
IsNotNull
(
nestedMessage
);
Assert
.
IsNotNull
(
foreignMessage
);
Assert
.
IsNotNull
(
foreignMessage
);
Assert
.
IsNotNull
(
importMessage
);
Assert
.
IsNotNull
(
importMessage
);
Assert
.
IsNotNull
(
nestedEnum
);
Assert
.
IsNotNull
(
nestedEnum
);
Assert
.
IsNotNull
(
foreignEnum
);
Assert
.
IsNotNull
(
foreignEnum
);
Assert
.
IsNotNull
(
importEnum
);
Assert
.
IsNotNull
(
importEnum
);
this
.
nestedB
=
nestedMessage
.
FindDescriptor
<
FieldDescriptor
>(
"bb"
);
this
.
nestedB
=
nestedMessage
.
FindDescriptor
<
FieldDescriptor
>(
"bb"
);
this
.
foreignC
=
foreignMessage
.
FindDescriptor
<
FieldDescriptor
>(
"c"
);
this
.
foreignC
=
foreignMessage
.
FindDescriptor
<
FieldDescriptor
>(
"c"
);
this
.
importD
=
importMessage
.
FindDescriptor
<
FieldDescriptor
>(
"d"
);
this
.
importD
=
importMessage
.
FindDescriptor
<
FieldDescriptor
>(
"d"
);
this
.
nestedFoo
=
nestedEnum
.
FindValueByName
(
"FOO"
);
this
.
nestedFoo
=
nestedEnum
.
FindValueByName
(
"FOO"
);
this
.
nestedBar
=
nestedEnum
.
FindValueByName
(
"BAR"
);
this
.
nestedBar
=
nestedEnum
.
FindValueByName
(
"BAR"
);
this
.
nestedBaz
=
nestedEnum
.
FindValueByName
(
"BAZ"
);
this
.
nestedBaz
=
nestedEnum
.
FindValueByName
(
"BAZ"
);
...
@@ -144,20 +147,20 @@ namespace Google.ProtocolBuffers {
...
@@ -144,20 +147,20 @@ namespace Google.ProtocolBuffers {
this
.
groupA
=
optionalGroup
.
FindDescriptor
<
FieldDescriptor
>(
"a"
);
this
.
groupA
=
optionalGroup
.
FindDescriptor
<
FieldDescriptor
>(
"a"
);
this
.
repeatedGroupA
=
repeatedGroup
.
FindDescriptor
<
FieldDescriptor
>(
"a"
);
this
.
repeatedGroupA
=
repeatedGroup
.
FindDescriptor
<
FieldDescriptor
>(
"a"
);
Assert
.
IsNotNull
(
groupA
);
Assert
.
IsNotNull
(
groupA
);
Assert
.
IsNotNull
(
repeatedGroupA
);
Assert
.
IsNotNull
(
repeatedGroupA
);
Assert
.
IsNotNull
(
nestedB
);
Assert
.
IsNotNull
(
nestedB
);
Assert
.
IsNotNull
(
foreignC
);
Assert
.
IsNotNull
(
foreignC
);
Assert
.
IsNotNull
(
importD
);
Assert
.
IsNotNull
(
importD
);
Assert
.
IsNotNull
(
nestedFoo
);
Assert
.
IsNotNull
(
nestedFoo
);
Assert
.
IsNotNull
(
nestedBar
);
Assert
.
IsNotNull
(
nestedBar
);
Assert
.
IsNotNull
(
nestedBaz
);
Assert
.
IsNotNull
(
nestedBaz
);
Assert
.
IsNotNull
(
foreignFoo
);
Assert
.
IsNotNull
(
foreignFoo
);
Assert
.
IsNotNull
(
foreignBar
);
Assert
.
IsNotNull
(
foreignBar
);
Assert
.
IsNotNull
(
foreignBaz
);
Assert
.
IsNotNull
(
foreignBaz
);
Assert
.
IsNotNull
(
importFoo
);
Assert
.
IsNotNull
(
importFoo
);
Assert
.
IsNotNull
(
importBar
);
Assert
.
IsNotNull
(
importBar
);
Assert
.
IsNotNull
(
importBaz
);
Assert
.
IsNotNull
(
importBaz
);
}
}
/// <summary>
/// <summary>
...
@@ -171,10 +174,17 @@ namespace Google.ProtocolBuffers {
...
@@ -171,10 +174,17 @@ namespace Google.ProtocolBuffers {
/// Creates an instance for the TestAllExtensions message, with an
/// Creates an instance for the TestAllExtensions message, with an
/// extension registry from TestUtil.CreateExtensionRegistry.
/// extension registry from TestUtil.CreateExtensionRegistry.
/// </summary>
/// </summary>
public
static
ReflectionTester
CreateTestAllExtensionsInstance
()
{
public
static
ReflectionTester
CreateTestAllExtensionsInstance
()
{
return
new
ReflectionTester
(
TestAllExtensions
.
Descriptor
,
TestUtil
.
CreateExtensionRegistry
());
return
new
ReflectionTester
(
TestAllExtensions
.
Descriptor
,
TestUtil
.
CreateExtensionRegistry
());
}
}
/// <summary>
/// Creates an instance for the TestPackedTypes message, with no extensions.
/// </summary>
public
static
ReflectionTester
CreateTestPackedTypesInstance
()
{
return
new
ReflectionTester
(
TestPackedTypes
.
Descriptor
,
null
);
}
/// <summary>
/// <summary>
/// Shorthand to get a FieldDescriptor for a field of unittest::TestAllTypes.
/// Shorthand to get a FieldDescriptor for a field of unittest::TestAllTypes.
/// </summary>
/// </summary>
...
@@ -210,20 +220,20 @@ namespace Google.ProtocolBuffers {
...
@@ -210,20 +220,20 @@ namespace Google.ProtocolBuffers {
/// </summary>
/// </summary>
/// <param name="message"></param>
/// <param name="message"></param>
internal
void
SetAllFieldsViaReflection
(
IBuilder
message
)
{
internal
void
SetAllFieldsViaReflection
(
IBuilder
message
)
{
message
[
f
(
"optional_int32"
)]
=
101
;
message
[
f
(
"optional_int32"
)]
=
101
;
message
[
f
(
"optional_int64"
)]
=
102L
;
message
[
f
(
"optional_int64"
)]
=
102L
;
message
[
f
(
"optional_uint32"
)]
=
103U
;
message
[
f
(
"optional_uint32"
)]
=
103U
;
message
[
f
(
"optional_uint64"
)]
=
104U
L
;
message
[
f
(
"optional_uint64"
)]
=
104U
L
;
message
[
f
(
"optional_sint32"
)]
=
105
;
message
[
f
(
"optional_sint32"
)]
=
105
;
message
[
f
(
"optional_sint64"
)]
=
106L
;
message
[
f
(
"optional_sint64"
)]
=
106L
;
message
[
f
(
"optional_fixed32"
)]
=
107U
;
message
[
f
(
"optional_fixed32"
)]
=
107U
;
message
[
f
(
"optional_fixed64"
)]
=
108U
L
;
message
[
f
(
"optional_fixed64"
)]
=
108U
L
;
message
[
f
(
"optional_sfixed32"
)]
=
109
;
message
[
f
(
"optional_sfixed32"
)]
=
109
;
message
[
f
(
"optional_sfixed64"
)]
=
110L
;
message
[
f
(
"optional_sfixed64"
)]
=
110L
;
message
[
f
(
"optional_float"
)]
=
111F
;
message
[
f
(
"optional_float"
)]
=
111F
;
message
[
f
(
"optional_double"
)]
=
112D
;
message
[
f
(
"optional_double"
)]
=
112D
;
message
[
f
(
"optional_bool"
)]
=
true
;
message
[
f
(
"optional_bool"
)]
=
true
;
message
[
f
(
"optional_string"
)]
=
"115"
;
message
[
f
(
"optional_string"
)]
=
"115"
;
message
[
f
(
"optional_bytes"
)]
=
TestUtil
.
ToBytes
(
"116"
);
message
[
f
(
"optional_bytes"
)]
=
TestUtil
.
ToBytes
(
"116"
);
message
[
f
(
"optionalgroup"
)]
=
CreateBuilderForField
(
message
,
f
(
"optionalgroup"
)).
SetField
(
groupA
,
117
).
WeakBuild
();
message
[
f
(
"optionalgroup"
)]
=
CreateBuilderForField
(
message
,
f
(
"optionalgroup"
)).
SetField
(
groupA
,
117
).
WeakBuild
();
...
@@ -231,30 +241,30 @@ namespace Google.ProtocolBuffers {
...
@@ -231,30 +241,30 @@ namespace Google.ProtocolBuffers {
message
[
f
(
"optional_foreign_message"
)]
=
CreateBuilderForField
(
message
,
f
(
"optional_foreign_message"
)).
SetField
(
foreignC
,
119
).
WeakBuild
();
message
[
f
(
"optional_foreign_message"
)]
=
CreateBuilderForField
(
message
,
f
(
"optional_foreign_message"
)).
SetField
(
foreignC
,
119
).
WeakBuild
();
message
[
f
(
"optional_import_message"
)]
=
CreateBuilderForField
(
message
,
f
(
"optional_import_message"
)).
SetField
(
importD
,
120
).
WeakBuild
();
message
[
f
(
"optional_import_message"
)]
=
CreateBuilderForField
(
message
,
f
(
"optional_import_message"
)).
SetField
(
importD
,
120
).
WeakBuild
();
message
[
f
(
"optional_nested_enum"
)]
=
nestedBaz
;
message
[
f
(
"optional_nested_enum"
)]
=
nestedBaz
;
message
[
f
(
"optional_foreign_enum"
)]
=
foreignBaz
;
message
[
f
(
"optional_foreign_enum"
)]
=
foreignBaz
;
message
[
f
(
"optional_import_enum"
)]
=
importBaz
;
message
[
f
(
"optional_import_enum"
)]
=
importBaz
;
message
[
f
(
"optional_string_piece"
)]
=
"124"
;
message
[
f
(
"optional_string_piece"
)]
=
"124"
;
message
[
f
(
"optional_cord"
)]
=
"125"
;
message
[
f
(
"optional_cord"
)]
=
"125"
;
// -----------------------------------------------------------------
// -----------------------------------------------------------------
message
.
WeakAddRepeatedField
(
f
(
"repeated_int32"
),
201
);
message
.
WeakAddRepeatedField
(
f
(
"repeated_int32"
),
201
);
message
.
WeakAddRepeatedField
(
f
(
"repeated_int64"
),
202L
);
message
.
WeakAddRepeatedField
(
f
(
"repeated_int64"
),
202L
);
message
.
WeakAddRepeatedField
(
f
(
"repeated_uint32"
),
203U
);
message
.
WeakAddRepeatedField
(
f
(
"repeated_uint32"
),
203U
);
message
.
WeakAddRepeatedField
(
f
(
"repeated_uint64"
),
204U
L
);
message
.
WeakAddRepeatedField
(
f
(
"repeated_uint64"
),
204U
L
);
message
.
WeakAddRepeatedField
(
f
(
"repeated_sint32"
),
205
);
message
.
WeakAddRepeatedField
(
f
(
"repeated_sint32"
),
205
);
message
.
WeakAddRepeatedField
(
f
(
"repeated_sint64"
),
206L
);
message
.
WeakAddRepeatedField
(
f
(
"repeated_sint64"
),
206L
);
message
.
WeakAddRepeatedField
(
f
(
"repeated_fixed32"
),
207U
);
message
.
WeakAddRepeatedField
(
f
(
"repeated_fixed32"
),
207U
);
message
.
WeakAddRepeatedField
(
f
(
"repeated_fixed64"
),
208U
L
);
message
.
WeakAddRepeatedField
(
f
(
"repeated_fixed64"
),
208U
L
);
message
.
WeakAddRepeatedField
(
f
(
"repeated_sfixed32"
),
209
);
message
.
WeakAddRepeatedField
(
f
(
"repeated_sfixed32"
),
209
);
message
.
WeakAddRepeatedField
(
f
(
"repeated_sfixed64"
),
210L
);
message
.
WeakAddRepeatedField
(
f
(
"repeated_sfixed64"
),
210L
);
message
.
WeakAddRepeatedField
(
f
(
"repeated_float"
),
211F
);
message
.
WeakAddRepeatedField
(
f
(
"repeated_float"
),
211F
);
message
.
WeakAddRepeatedField
(
f
(
"repeated_double"
),
212D
);
message
.
WeakAddRepeatedField
(
f
(
"repeated_double"
),
212D
);
message
.
WeakAddRepeatedField
(
f
(
"repeated_bool"
),
true
);
message
.
WeakAddRepeatedField
(
f
(
"repeated_bool"
),
true
);
message
.
WeakAddRepeatedField
(
f
(
"repeated_string"
),
"215"
);
message
.
WeakAddRepeatedField
(
f
(
"repeated_string"
),
"215"
);
message
.
WeakAddRepeatedField
(
f
(
"repeated_bytes"
),
TestUtil
.
ToBytes
(
"216"
));
message
.
WeakAddRepeatedField
(
f
(
"repeated_bytes"
),
TestUtil
.
ToBytes
(
"216"
));
message
.
WeakAddRepeatedField
(
f
(
"repeatedgroup"
),
CreateBuilderForField
(
message
,
f
(
"repeatedgroup"
)).
SetField
(
repeatedGroupA
,
217
).
WeakBuild
());
message
.
WeakAddRepeatedField
(
f
(
"repeatedgroup"
),
CreateBuilderForField
(
message
,
f
(
"repeatedgroup"
)).
SetField
(
repeatedGroupA
,
217
).
WeakBuild
());
...
@@ -262,29 +272,29 @@ namespace Google.ProtocolBuffers {
...
@@ -262,29 +272,29 @@ namespace Google.ProtocolBuffers {
message
.
WeakAddRepeatedField
(
f
(
"repeated_foreign_message"
),
CreateBuilderForField
(
message
,
f
(
"repeated_foreign_message"
)).
SetField
(
foreignC
,
219
).
WeakBuild
());
message
.
WeakAddRepeatedField
(
f
(
"repeated_foreign_message"
),
CreateBuilderForField
(
message
,
f
(
"repeated_foreign_message"
)).
SetField
(
foreignC
,
219
).
WeakBuild
());
message
.
WeakAddRepeatedField
(
f
(
"repeated_import_message"
),
CreateBuilderForField
(
message
,
f
(
"repeated_import_message"
)).
SetField
(
importD
,
220
).
WeakBuild
());
message
.
WeakAddRepeatedField
(
f
(
"repeated_import_message"
),
CreateBuilderForField
(
message
,
f
(
"repeated_import_message"
)).
SetField
(
importD
,
220
).
WeakBuild
());
message
.
WeakAddRepeatedField
(
f
(
"repeated_nested_enum"
),
nestedBar
);
message
.
WeakAddRepeatedField
(
f
(
"repeated_nested_enum"
),
nestedBar
);
message
.
WeakAddRepeatedField
(
f
(
"repeated_foreign_enum"
),
foreignBar
);
message
.
WeakAddRepeatedField
(
f
(
"repeated_foreign_enum"
),
foreignBar
);
message
.
WeakAddRepeatedField
(
f
(
"repeated_import_enum"
),
importBar
);
message
.
WeakAddRepeatedField
(
f
(
"repeated_import_enum"
),
importBar
);
message
.
WeakAddRepeatedField
(
f
(
"repeated_string_piece"
),
"224"
);
message
.
WeakAddRepeatedField
(
f
(
"repeated_string_piece"
),
"224"
);
message
.
WeakAddRepeatedField
(
f
(
"repeated_cord"
),
"225"
);
message
.
WeakAddRepeatedField
(
f
(
"repeated_cord"
),
"225"
);
// Add a second one of each field.
// Add a second one of each field.
message
.
WeakAddRepeatedField
(
f
(
"repeated_int32"
),
301
);
message
.
WeakAddRepeatedField
(
f
(
"repeated_int32"
),
301
);
message
.
WeakAddRepeatedField
(
f
(
"repeated_int64"
),
302L
);
message
.
WeakAddRepeatedField
(
f
(
"repeated_int64"
),
302L
);
message
.
WeakAddRepeatedField
(
f
(
"repeated_uint32"
),
303U
);
message
.
WeakAddRepeatedField
(
f
(
"repeated_uint32"
),
303U
);
message
.
WeakAddRepeatedField
(
f
(
"repeated_uint64"
),
304U
L
);
message
.
WeakAddRepeatedField
(
f
(
"repeated_uint64"
),
304U
L
);
message
.
WeakAddRepeatedField
(
f
(
"repeated_sint32"
),
305
);
message
.
WeakAddRepeatedField
(
f
(
"repeated_sint32"
),
305
);
message
.
WeakAddRepeatedField
(
f
(
"repeated_sint64"
),
306L
);
message
.
WeakAddRepeatedField
(
f
(
"repeated_sint64"
),
306L
);
message
.
WeakAddRepeatedField
(
f
(
"repeated_fixed32"
),
307U
);
message
.
WeakAddRepeatedField
(
f
(
"repeated_fixed32"
),
307U
);
message
.
WeakAddRepeatedField
(
f
(
"repeated_fixed64"
),
308U
L
);
message
.
WeakAddRepeatedField
(
f
(
"repeated_fixed64"
),
308U
L
);
message
.
WeakAddRepeatedField
(
f
(
"repeated_sfixed32"
),
309
);
message
.
WeakAddRepeatedField
(
f
(
"repeated_sfixed32"
),
309
);
message
.
WeakAddRepeatedField
(
f
(
"repeated_sfixed64"
),
310L
);
message
.
WeakAddRepeatedField
(
f
(
"repeated_sfixed64"
),
310L
);
message
.
WeakAddRepeatedField
(
f
(
"repeated_float"
),
311F
);
message
.
WeakAddRepeatedField
(
f
(
"repeated_float"
),
311F
);
message
.
WeakAddRepeatedField
(
f
(
"repeated_double"
),
312D
);
message
.
WeakAddRepeatedField
(
f
(
"repeated_double"
),
312D
);
message
.
WeakAddRepeatedField
(
f
(
"repeated_bool"
),
false
);
message
.
WeakAddRepeatedField
(
f
(
"repeated_bool"
),
false
);
message
.
WeakAddRepeatedField
(
f
(
"repeated_string"
),
"315"
);
message
.
WeakAddRepeatedField
(
f
(
"repeated_string"
),
"315"
);
message
.
WeakAddRepeatedField
(
f
(
"repeated_bytes"
),
TestUtil
.
ToBytes
(
"316"
));
message
.
WeakAddRepeatedField
(
f
(
"repeated_bytes"
),
TestUtil
.
ToBytes
(
"316"
));
message
.
WeakAddRepeatedField
(
f
(
"repeatedgroup"
),
message
.
WeakAddRepeatedField
(
f
(
"repeatedgroup"
),
CreateBuilderForField
(
message
,
f
(
"repeatedgroup"
))
CreateBuilderForField
(
message
,
f
(
"repeatedgroup"
))
...
@@ -299,37 +309,37 @@ namespace Google.ProtocolBuffers {
...
@@ -299,37 +309,37 @@ namespace Google.ProtocolBuffers {
CreateBuilderForField
(
message
,
f
(
"repeated_import_message"
))
CreateBuilderForField
(
message
,
f
(
"repeated_import_message"
))
.
SetField
(
importD
,
320
).
WeakBuild
());
.
SetField
(
importD
,
320
).
WeakBuild
());
message
.
WeakAddRepeatedField
(
f
(
"repeated_nested_enum"
),
nestedBaz
);
message
.
WeakAddRepeatedField
(
f
(
"repeated_nested_enum"
),
nestedBaz
);
message
.
WeakAddRepeatedField
(
f
(
"repeated_foreign_enum"
),
foreignBaz
);
message
.
WeakAddRepeatedField
(
f
(
"repeated_foreign_enum"
),
foreignBaz
);
message
.
WeakAddRepeatedField
(
f
(
"repeated_import_enum"
),
importBaz
);
message
.
WeakAddRepeatedField
(
f
(
"repeated_import_enum"
),
importBaz
);
message
.
WeakAddRepeatedField
(
f
(
"repeated_string_piece"
),
"324"
);
message
.
WeakAddRepeatedField
(
f
(
"repeated_string_piece"
),
"324"
);
message
.
WeakAddRepeatedField
(
f
(
"repeated_cord"
),
"325"
);
message
.
WeakAddRepeatedField
(
f
(
"repeated_cord"
),
"325"
);
// -----------------------------------------------------------------
// -----------------------------------------------------------------
message
[
f
(
"default_int32"
)]
=
401
;
message
[
f
(
"default_int32"
)]
=
401
;
message
[
f
(
"default_int64"
)]
=
402L
;
message
[
f
(
"default_int64"
)]
=
402L
;
message
[
f
(
"default_uint32"
)]
=
403U
;
message
[
f
(
"default_uint32"
)]
=
403U
;
message
[
f
(
"default_uint64"
)]
=
404U
L
;
message
[
f
(
"default_uint64"
)]
=
404U
L
;
message
[
f
(
"default_sint32"
)]
=
405
;
message
[
f
(
"default_sint32"
)]
=
405
;
message
[
f
(
"default_sint64"
)]
=
406L
;
message
[
f
(
"default_sint64"
)]
=
406L
;
message
[
f
(
"default_fixed32"
)]
=
407U
;
message
[
f
(
"default_fixed32"
)]
=
407U
;
message
[
f
(
"default_fixed64"
)]
=
408U
L
;
message
[
f
(
"default_fixed64"
)]
=
408U
L
;
message
[
f
(
"default_sfixed32"
)]
=
409
;
message
[
f
(
"default_sfixed32"
)]
=
409
;
message
[
f
(
"default_sfixed64"
)]
=
410L
;
message
[
f
(
"default_sfixed64"
)]
=
410L
;
message
[
f
(
"default_float"
)]
=
411F
;
message
[
f
(
"default_float"
)]
=
411F
;
message
[
f
(
"default_double"
)]
=
412D
;
message
[
f
(
"default_double"
)]
=
412D
;
message
[
f
(
"default_bool"
)]
=
false
;
message
[
f
(
"default_bool"
)]
=
false
;
message
[
f
(
"default_string"
)]
=
"415"
;
message
[
f
(
"default_string"
)]
=
"415"
;
message
[
f
(
"default_bytes"
)]
=
TestUtil
.
ToBytes
(
"416"
);
message
[
f
(
"default_bytes"
)]
=
TestUtil
.
ToBytes
(
"416"
);
message
[
f
(
"default_nested_enum"
)]
=
nestedFoo
;
message
[
f
(
"default_nested_enum"
)]
=
nestedFoo
;
message
[
f
(
"default_foreign_enum"
)]
=
foreignFoo
;
message
[
f
(
"default_foreign_enum"
)]
=
foreignFoo
;
message
[
f
(
"default_import_enum"
)]
=
importFoo
;
message
[
f
(
"default_import_enum"
)]
=
importFoo
;
message
[
f
(
"default_string_piece"
)]
=
"424"
;
message
[
f
(
"default_string_piece"
)]
=
"424"
;
message
[
f
(
"default_cord"
)]
=
"425"
;
message
[
f
(
"default_cord"
)]
=
"425"
;
}
}
// -------------------------------------------------------------------
// -------------------------------------------------------------------
...
@@ -340,30 +350,30 @@ namespace Google.ProtocolBuffers {
...
@@ -340,30 +350,30 @@ namespace Google.ProtocolBuffers {
/// reflection interface.
/// reflection interface.
/// </summary>
/// </summary>
internal
void
ModifyRepeatedFieldsViaReflection
(
IBuilder
message
)
{
internal
void
ModifyRepeatedFieldsViaReflection
(
IBuilder
message
)
{
message
[
f
(
"repeated_int32"
),
1
]
=
501
;
message
[
f
(
"repeated_int32"
),
1
]
=
501
;
message
[
f
(
"repeated_int64"
),
1
]
=
502L
;
message
[
f
(
"repeated_int64"
),
1
]
=
502L
;
message
[
f
(
"repeated_uint32"
),
1
]
=
503U
;
message
[
f
(
"repeated_uint32"
),
1
]
=
503U
;
message
[
f
(
"repeated_uint64"
),
1
]
=
504U
L
;
message
[
f
(
"repeated_uint64"
),
1
]
=
504U
L
;
message
[
f
(
"repeated_sint32"
),
1
]
=
505
;
message
[
f
(
"repeated_sint32"
),
1
]
=
505
;
message
[
f
(
"repeated_sint64"
),
1
]
=
506L
;
message
[
f
(
"repeated_sint64"
),
1
]
=
506L
;
message
[
f
(
"repeated_fixed32"
),
1
]
=
507U
;
message
[
f
(
"repeated_fixed32"
),
1
]
=
507U
;
message
[
f
(
"repeated_fixed64"
),
1
]
=
508U
L
;
message
[
f
(
"repeated_fixed64"
),
1
]
=
508U
L
;
message
[
f
(
"repeated_sfixed32"
),
1
]
=
509
;
message
[
f
(
"repeated_sfixed32"
),
1
]
=
509
;
message
[
f
(
"repeated_sfixed64"
),
1
]
=
510L
;
message
[
f
(
"repeated_sfixed64"
),
1
]
=
510L
;
message
[
f
(
"repeated_float"
),
1
]
=
511F
;
message
[
f
(
"repeated_float"
),
1
]
=
511F
;
message
[
f
(
"repeated_double"
),
1
]
=
512D
;
message
[
f
(
"repeated_double"
),
1
]
=
512D
;
message
[
f
(
"repeated_bool"
),
1
]
=
true
;
message
[
f
(
"repeated_bool"
),
1
]
=
true
;
message
[
f
(
"repeated_string"
),
1
]
=
"515"
;
message
[
f
(
"repeated_string"
),
1
]
=
"515"
;
message
.
SetRepeatedField
(
f
(
"repeated_bytes"
),
1
,
TestUtil
.
ToBytes
(
"516"
));
message
.
SetRepeatedField
(
f
(
"repeated_bytes"
),
1
,
TestUtil
.
ToBytes
(
"516"
));
message
.
SetRepeatedField
(
f
(
"repeatedgroup"
),
1
,
CreateBuilderForField
(
message
,
f
(
"repeatedgroup"
)).
SetField
(
repeatedGroupA
,
517
).
WeakBuild
());
message
.
SetRepeatedField
(
f
(
"repeatedgroup"
),
1
,
CreateBuilderForField
(
message
,
f
(
"repeatedgroup"
)).
SetField
(
repeatedGroupA
,
517
).
WeakBuild
());
message
.
SetRepeatedField
(
f
(
"repeated_nested_message"
),
1
,
CreateBuilderForField
(
message
,
f
(
"repeated_nested_message"
)).
SetField
(
nestedB
,
518
).
WeakBuild
());
message
.
SetRepeatedField
(
f
(
"repeated_nested_message"
),
1
,
CreateBuilderForField
(
message
,
f
(
"repeated_nested_message"
)).
SetField
(
nestedB
,
518
).
WeakBuild
());
message
.
SetRepeatedField
(
f
(
"repeated_foreign_message"
),
1
,
CreateBuilderForField
(
message
,
f
(
"repeated_foreign_message"
)).
SetField
(
foreignC
,
519
).
WeakBuild
());
message
.
SetRepeatedField
(
f
(
"repeated_foreign_message"
),
1
,
CreateBuilderForField
(
message
,
f
(
"repeated_foreign_message"
)).
SetField
(
foreignC
,
519
).
WeakBuild
());
message
.
SetRepeatedField
(
f
(
"repeated_import_message"
),
1
,
CreateBuilderForField
(
message
,
f
(
"repeated_import_message"
)).
SetField
(
importD
,
520
).
WeakBuild
());
message
.
SetRepeatedField
(
f
(
"repeated_import_message"
),
1
,
CreateBuilderForField
(
message
,
f
(
"repeated_import_message"
)).
SetField
(
importD
,
520
).
WeakBuild
());
message
[
f
(
"repeated_nested_enum"
),
1
]
=
nestedFoo
;
message
[
f
(
"repeated_nested_enum"
),
1
]
=
nestedFoo
;
message
[
f
(
"repeated_foreign_enum"
),
1
]
=
foreignFoo
;
message
[
f
(
"repeated_foreign_enum"
),
1
]
=
foreignFoo
;
message
[
f
(
"repeated_import_enum"
),
1
]
=
importFoo
;
message
[
f
(
"repeated_import_enum"
),
1
]
=
importFoo
;
message
[
f
(
"repeated_string_piece"
),
1
]
=
"524"
;
message
[
f
(
"repeated_string_piece"
),
1
]
=
"524"
;
message
[
f
(
"repeated_cord"
),
1
]
=
"525"
;
message
[
f
(
"repeated_cord"
),
1
]
=
"525"
;
...
@@ -376,196 +386,196 @@ namespace Google.ProtocolBuffers {
...
@@ -376,196 +386,196 @@ namespace Google.ProtocolBuffers {
/// assigned by SetAllFields, using the IMessage reflection interface.
/// assigned by SetAllFields, using the IMessage reflection interface.
/// </summary>
/// </summary>
public
void
AssertAllFieldsSetViaReflection
(
IMessage
message
)
{
public
void
AssertAllFieldsSetViaReflection
(
IMessage
message
)
{
Assert
.
IsTrue
(
message
.
HasField
(
f
(
"optional_int32"
)));
Assert
.
IsTrue
(
message
.
HasField
(
f
(
"optional_int32"
)));
Assert
.
IsTrue
(
message
.
HasField
(
f
(
"optional_int64"
)));
Assert
.
IsTrue
(
message
.
HasField
(
f
(
"optional_int64"
)));
Assert
.
IsTrue
(
message
.
HasField
(
f
(
"optional_uint32"
)));
Assert
.
IsTrue
(
message
.
HasField
(
f
(
"optional_uint32"
)));
Assert
.
IsTrue
(
message
.
HasField
(
f
(
"optional_uint64"
)));
Assert
.
IsTrue
(
message
.
HasField
(
f
(
"optional_uint64"
)));
Assert
.
IsTrue
(
message
.
HasField
(
f
(
"optional_sint32"
)));
Assert
.
IsTrue
(
message
.
HasField
(
f
(
"optional_sint32"
)));
Assert
.
IsTrue
(
message
.
HasField
(
f
(
"optional_sint64"
)));
Assert
.
IsTrue
(
message
.
HasField
(
f
(
"optional_sint64"
)));
Assert
.
IsTrue
(
message
.
HasField
(
f
(
"optional_fixed32"
)));
Assert
.
IsTrue
(
message
.
HasField
(
f
(
"optional_fixed32"
)));
Assert
.
IsTrue
(
message
.
HasField
(
f
(
"optional_fixed64"
)));
Assert
.
IsTrue
(
message
.
HasField
(
f
(
"optional_fixed64"
)));
Assert
.
IsTrue
(
message
.
HasField
(
f
(
"optional_sfixed32"
)));
Assert
.
IsTrue
(
message
.
HasField
(
f
(
"optional_sfixed32"
)));
Assert
.
IsTrue
(
message
.
HasField
(
f
(
"optional_sfixed64"
)));
Assert
.
IsTrue
(
message
.
HasField
(
f
(
"optional_sfixed64"
)));
Assert
.
IsTrue
(
message
.
HasField
(
f
(
"optional_float"
)));
Assert
.
IsTrue
(
message
.
HasField
(
f
(
"optional_float"
)));
Assert
.
IsTrue
(
message
.
HasField
(
f
(
"optional_double"
)));
Assert
.
IsTrue
(
message
.
HasField
(
f
(
"optional_double"
)));
Assert
.
IsTrue
(
message
.
HasField
(
f
(
"optional_bool"
)));
Assert
.
IsTrue
(
message
.
HasField
(
f
(
"optional_bool"
)));
Assert
.
IsTrue
(
message
.
HasField
(
f
(
"optional_string"
)));
Assert
.
IsTrue
(
message
.
HasField
(
f
(
"optional_string"
)));
Assert
.
IsTrue
(
message
.
HasField
(
f
(
"optional_bytes"
)));
Assert
.
IsTrue
(
message
.
HasField
(
f
(
"optional_bytes"
)));
Assert
.
IsTrue
(
message
.
HasField
(
f
(
"optionalgroup"
)));
Assert
.
IsTrue
(
message
.
HasField
(
f
(
"optionalgroup"
)));
Assert
.
IsTrue
(
message
.
HasField
(
f
(
"optional_nested_message"
)));
Assert
.
IsTrue
(
message
.
HasField
(
f
(
"optional_nested_message"
)));
Assert
.
IsTrue
(
message
.
HasField
(
f
(
"optional_foreign_message"
)));
Assert
.
IsTrue
(
message
.
HasField
(
f
(
"optional_foreign_message"
)));
Assert
.
IsTrue
(
message
.
HasField
(
f
(
"optional_import_message"
)));
Assert
.
IsTrue
(
message
.
HasField
(
f
(
"optional_import_message"
)));
Assert
.
IsTrue
(((
IMessage
)
message
[
f
(
"optionalgroup"
)]).
HasField
(
groupA
));
Assert
.
IsTrue
(((
IMessage
)
message
[
f
(
"optionalgroup"
)]).
HasField
(
groupA
));
Assert
.
IsTrue
(((
IMessage
)
message
[
f
(
"optional_nested_message"
)]).
HasField
(
nestedB
));
Assert
.
IsTrue
(((
IMessage
)
message
[
f
(
"optional_nested_message"
)]).
HasField
(
nestedB
));
Assert
.
IsTrue
(((
IMessage
)
message
[
f
(
"optional_foreign_message"
)]).
HasField
(
foreignC
));
Assert
.
IsTrue
(((
IMessage
)
message
[
f
(
"optional_foreign_message"
)]).
HasField
(
foreignC
));
Assert
.
IsTrue
(((
IMessage
)
message
[
f
(
"optional_import_message"
)]).
HasField
(
importD
));
Assert
.
IsTrue
(((
IMessage
)
message
[
f
(
"optional_import_message"
)]).
HasField
(
importD
));
Assert
.
IsTrue
(
message
.
HasField
(
f
(
"optional_nested_enum"
)));
Assert
.
IsTrue
(
message
.
HasField
(
f
(
"optional_nested_enum"
)));
Assert
.
IsTrue
(
message
.
HasField
(
f
(
"optional_foreign_enum"
)));
Assert
.
IsTrue
(
message
.
HasField
(
f
(
"optional_foreign_enum"
)));
Assert
.
IsTrue
(
message
.
HasField
(
f
(
"optional_import_enum"
)));
Assert
.
IsTrue
(
message
.
HasField
(
f
(
"optional_import_enum"
)));
Assert
.
IsTrue
(
message
.
HasField
(
f
(
"optional_string_piece"
)));
Assert
.
IsTrue
(
message
.
HasField
(
f
(
"optional_string_piece"
)));
Assert
.
IsTrue
(
message
.
HasField
(
f
(
"optional_cord"
)));
Assert
.
IsTrue
(
message
.
HasField
(
f
(
"optional_cord"
)));
Assert
.
AreEqual
(
101
,
message
[
f
(
"optional_int32"
)]);
Assert
.
AreEqual
(
101
,
message
[
f
(
"optional_int32"
)]);
Assert
.
AreEqual
(
102L
,
message
[
f
(
"optional_int64"
)]);
Assert
.
AreEqual
(
102L
,
message
[
f
(
"optional_int64"
)]);
Assert
.
AreEqual
(
103U
,
message
[
f
(
"optional_uint32"
)]);
Assert
.
AreEqual
(
103U
,
message
[
f
(
"optional_uint32"
)]);
Assert
.
AreEqual
(
104U
L
,
message
[
f
(
"optional_uint64"
)]);
Assert
.
AreEqual
(
104U
L
,
message
[
f
(
"optional_uint64"
)]);
Assert
.
AreEqual
(
105
,
message
[
f
(
"optional_sint32"
)]);
Assert
.
AreEqual
(
105
,
message
[
f
(
"optional_sint32"
)]);
Assert
.
AreEqual
(
106L
,
message
[
f
(
"optional_sint64"
)]);
Assert
.
AreEqual
(
106L
,
message
[
f
(
"optional_sint64"
)]);
Assert
.
AreEqual
(
107U
,
message
[
f
(
"optional_fixed32"
)]);
Assert
.
AreEqual
(
107U
,
message
[
f
(
"optional_fixed32"
)]);
Assert
.
AreEqual
(
108U
L
,
message
[
f
(
"optional_fixed64"
)]);
Assert
.
AreEqual
(
108U
L
,
message
[
f
(
"optional_fixed64"
)]);
Assert
.
AreEqual
(
109
,
message
[
f
(
"optional_sfixed32"
)]);
Assert
.
AreEqual
(
109
,
message
[
f
(
"optional_sfixed32"
)]);
Assert
.
AreEqual
(
110L
,
message
[
f
(
"optional_sfixed64"
)]);
Assert
.
AreEqual
(
110L
,
message
[
f
(
"optional_sfixed64"
)]);
Assert
.
AreEqual
(
111F
,
message
[
f
(
"optional_float"
)]);
Assert
.
AreEqual
(
111F
,
message
[
f
(
"optional_float"
)]);
Assert
.
AreEqual
(
112D
,
message
[
f
(
"optional_double"
)]);
Assert
.
AreEqual
(
112D
,
message
[
f
(
"optional_double"
)]);
Assert
.
AreEqual
(
true
,
message
[
f
(
"optional_bool"
)]);
Assert
.
AreEqual
(
true
,
message
[
f
(
"optional_bool"
)]);
Assert
.
AreEqual
(
"115"
,
message
[
f
(
"optional_string"
)]);
Assert
.
AreEqual
(
"115"
,
message
[
f
(
"optional_string"
)]);
Assert
.
AreEqual
(
TestUtil
.
ToBytes
(
"116"
),
message
[
f
(
"optional_bytes"
)]);
Assert
.
AreEqual
(
TestUtil
.
ToBytes
(
"116"
),
message
[
f
(
"optional_bytes"
)]);
Assert
.
AreEqual
(
117
,((
IMessage
)
message
[
f
(
"optionalgroup"
)])[
groupA
]);
Assert
.
AreEqual
(
117
,
((
IMessage
)
message
[
f
(
"optionalgroup"
)])[
groupA
]);
Assert
.
AreEqual
(
118
,((
IMessage
)
message
[
f
(
"optional_nested_message"
)])[
nestedB
]);
Assert
.
AreEqual
(
118
,
((
IMessage
)
message
[
f
(
"optional_nested_message"
)])[
nestedB
]);
Assert
.
AreEqual
(
119
,((
IMessage
)
message
[
f
(
"optional_foreign_message"
)])[
foreignC
]);
Assert
.
AreEqual
(
119
,
((
IMessage
)
message
[
f
(
"optional_foreign_message"
)])[
foreignC
]);
Assert
.
AreEqual
(
120
,((
IMessage
)
message
[
f
(
"optional_import_message"
)])[
importD
]);
Assert
.
AreEqual
(
120
,
((
IMessage
)
message
[
f
(
"optional_import_message"
)])[
importD
]);
Assert
.
AreEqual
(
nestedBaz
,
message
[
f
(
"optional_nested_enum"
)]);
Assert
.
AreEqual
(
nestedBaz
,
message
[
f
(
"optional_nested_enum"
)]);
Assert
.
AreEqual
(
foreignBaz
,
message
[
f
(
"optional_foreign_enum"
)]);
Assert
.
AreEqual
(
foreignBaz
,
message
[
f
(
"optional_foreign_enum"
)]);
Assert
.
AreEqual
(
importBaz
,
message
[
f
(
"optional_import_enum"
)]);
Assert
.
AreEqual
(
importBaz
,
message
[
f
(
"optional_import_enum"
)]);
Assert
.
AreEqual
(
"124"
,
message
[
f
(
"optional_string_piece"
)]);
Assert
.
AreEqual
(
"124"
,
message
[
f
(
"optional_string_piece"
)]);
Assert
.
AreEqual
(
"125"
,
message
[
f
(
"optional_cord"
)]);
Assert
.
AreEqual
(
"125"
,
message
[
f
(
"optional_cord"
)]);
// -----------------------------------------------------------------
// -----------------------------------------------------------------
Assert
.
AreEqual
(
2
,
message
.
GetRepeatedFieldCount
(
f
(
"repeated_int32"
)));
Assert
.
AreEqual
(
2
,
message
.
GetRepeatedFieldCount
(
f
(
"repeated_int32"
)));
Assert
.
AreEqual
(
2
,
message
.
GetRepeatedFieldCount
(
f
(
"repeated_int64"
)));
Assert
.
AreEqual
(
2
,
message
.
GetRepeatedFieldCount
(
f
(
"repeated_int64"
)));
Assert
.
AreEqual
(
2
,
message
.
GetRepeatedFieldCount
(
f
(
"repeated_uint32"
)));
Assert
.
AreEqual
(
2
,
message
.
GetRepeatedFieldCount
(
f
(
"repeated_uint32"
)));
Assert
.
AreEqual
(
2
,
message
.
GetRepeatedFieldCount
(
f
(
"repeated_uint64"
)));
Assert
.
AreEqual
(
2
,
message
.
GetRepeatedFieldCount
(
f
(
"repeated_uint64"
)));
Assert
.
AreEqual
(
2
,
message
.
GetRepeatedFieldCount
(
f
(
"repeated_sint32"
)));
Assert
.
AreEqual
(
2
,
message
.
GetRepeatedFieldCount
(
f
(
"repeated_sint32"
)));
Assert
.
AreEqual
(
2
,
message
.
GetRepeatedFieldCount
(
f
(
"repeated_sint64"
)));
Assert
.
AreEqual
(
2
,
message
.
GetRepeatedFieldCount
(
f
(
"repeated_sint64"
)));
Assert
.
AreEqual
(
2
,
message
.
GetRepeatedFieldCount
(
f
(
"repeated_fixed32"
)));
Assert
.
AreEqual
(
2
,
message
.
GetRepeatedFieldCount
(
f
(
"repeated_fixed32"
)));
Assert
.
AreEqual
(
2
,
message
.
GetRepeatedFieldCount
(
f
(
"repeated_fixed64"
)));
Assert
.
AreEqual
(
2
,
message
.
GetRepeatedFieldCount
(
f
(
"repeated_fixed64"
)));
Assert
.
AreEqual
(
2
,
message
.
GetRepeatedFieldCount
(
f
(
"repeated_sfixed32"
)));
Assert
.
AreEqual
(
2
,
message
.
GetRepeatedFieldCount
(
f
(
"repeated_sfixed32"
)));
Assert
.
AreEqual
(
2
,
message
.
GetRepeatedFieldCount
(
f
(
"repeated_sfixed64"
)));
Assert
.
AreEqual
(
2
,
message
.
GetRepeatedFieldCount
(
f
(
"repeated_sfixed64"
)));
Assert
.
AreEqual
(
2
,
message
.
GetRepeatedFieldCount
(
f
(
"repeated_float"
)));
Assert
.
AreEqual
(
2
,
message
.
GetRepeatedFieldCount
(
f
(
"repeated_float"
)));
Assert
.
AreEqual
(
2
,
message
.
GetRepeatedFieldCount
(
f
(
"repeated_double"
)));
Assert
.
AreEqual
(
2
,
message
.
GetRepeatedFieldCount
(
f
(
"repeated_double"
)));
Assert
.
AreEqual
(
2
,
message
.
GetRepeatedFieldCount
(
f
(
"repeated_bool"
)));
Assert
.
AreEqual
(
2
,
message
.
GetRepeatedFieldCount
(
f
(
"repeated_bool"
)));
Assert
.
AreEqual
(
2
,
message
.
GetRepeatedFieldCount
(
f
(
"repeated_string"
)));
Assert
.
AreEqual
(
2
,
message
.
GetRepeatedFieldCount
(
f
(
"repeated_string"
)));
Assert
.
AreEqual
(
2
,
message
.
GetRepeatedFieldCount
(
f
(
"repeated_bytes"
)));
Assert
.
AreEqual
(
2
,
message
.
GetRepeatedFieldCount
(
f
(
"repeated_bytes"
)));
Assert
.
AreEqual
(
2
,
message
.
GetRepeatedFieldCount
(
f
(
"repeatedgroup"
)));
Assert
.
AreEqual
(
2
,
message
.
GetRepeatedFieldCount
(
f
(
"repeatedgroup"
)));
Assert
.
AreEqual
(
2
,
message
.
GetRepeatedFieldCount
(
f
(
"repeated_nested_message"
)));
Assert
.
AreEqual
(
2
,
message
.
GetRepeatedFieldCount
(
f
(
"repeated_nested_message"
)));
Assert
.
AreEqual
(
2
,
message
.
GetRepeatedFieldCount
(
f
(
"repeated_foreign_message"
)));
Assert
.
AreEqual
(
2
,
message
.
GetRepeatedFieldCount
(
f
(
"repeated_foreign_message"
)));
Assert
.
AreEqual
(
2
,
message
.
GetRepeatedFieldCount
(
f
(
"repeated_import_message"
)));
Assert
.
AreEqual
(
2
,
message
.
GetRepeatedFieldCount
(
f
(
"repeated_import_message"
)));
Assert
.
AreEqual
(
2
,
message
.
GetRepeatedFieldCount
(
f
(
"repeated_nested_enum"
)));
Assert
.
AreEqual
(
2
,
message
.
GetRepeatedFieldCount
(
f
(
"repeated_nested_enum"
)));
Assert
.
AreEqual
(
2
,
message
.
GetRepeatedFieldCount
(
f
(
"repeated_foreign_enum"
)));
Assert
.
AreEqual
(
2
,
message
.
GetRepeatedFieldCount
(
f
(
"repeated_foreign_enum"
)));
Assert
.
AreEqual
(
2
,
message
.
GetRepeatedFieldCount
(
f
(
"repeated_import_enum"
)));
Assert
.
AreEqual
(
2
,
message
.
GetRepeatedFieldCount
(
f
(
"repeated_import_enum"
)));
Assert
.
AreEqual
(
2
,
message
.
GetRepeatedFieldCount
(
f
(
"repeated_string_piece"
)));
Assert
.
AreEqual
(
2
,
message
.
GetRepeatedFieldCount
(
f
(
"repeated_string_piece"
)));
Assert
.
AreEqual
(
2
,
message
.
GetRepeatedFieldCount
(
f
(
"repeated_cord"
)));
Assert
.
AreEqual
(
2
,
message
.
GetRepeatedFieldCount
(
f
(
"repeated_cord"
)));
Assert
.
AreEqual
(
201
,
message
[
f
(
"repeated_int32"
),
0
]);
Assert
.
AreEqual
(
201
,
message
[
f
(
"repeated_int32"
),
0
]);
Assert
.
AreEqual
(
202L
,
message
[
f
(
"repeated_int64"
),
0
]);
Assert
.
AreEqual
(
202L
,
message
[
f
(
"repeated_int64"
),
0
]);
Assert
.
AreEqual
(
203U
,
message
[
f
(
"repeated_uint32"
),
0
]);
Assert
.
AreEqual
(
203U
,
message
[
f
(
"repeated_uint32"
),
0
]);
Assert
.
AreEqual
(
204U
L
,
message
[
f
(
"repeated_uint64"
),
0
]);
Assert
.
AreEqual
(
204U
L
,
message
[
f
(
"repeated_uint64"
),
0
]);
Assert
.
AreEqual
(
205
,
message
[
f
(
"repeated_sint32"
),
0
]);
Assert
.
AreEqual
(
205
,
message
[
f
(
"repeated_sint32"
),
0
]);
Assert
.
AreEqual
(
206L
,
message
[
f
(
"repeated_sint64"
),
0
]);
Assert
.
AreEqual
(
206L
,
message
[
f
(
"repeated_sint64"
),
0
]);
Assert
.
AreEqual
(
207U
,
message
[
f
(
"repeated_fixed32"
),
0
]);
Assert
.
AreEqual
(
207U
,
message
[
f
(
"repeated_fixed32"
),
0
]);
Assert
.
AreEqual
(
208U
L
,
message
[
f
(
"repeated_fixed64"
),
0
]);
Assert
.
AreEqual
(
208U
L
,
message
[
f
(
"repeated_fixed64"
),
0
]);
Assert
.
AreEqual
(
209
,
message
[
f
(
"repeated_sfixed32"
),
0
]);
Assert
.
AreEqual
(
209
,
message
[
f
(
"repeated_sfixed32"
),
0
]);
Assert
.
AreEqual
(
210L
,
message
[
f
(
"repeated_sfixed64"
),
0
]);
Assert
.
AreEqual
(
210L
,
message
[
f
(
"repeated_sfixed64"
),
0
]);
Assert
.
AreEqual
(
211F
,
message
[
f
(
"repeated_float"
),
0
]);
Assert
.
AreEqual
(
211F
,
message
[
f
(
"repeated_float"
),
0
]);
Assert
.
AreEqual
(
212D
,
message
[
f
(
"repeated_double"
),
0
]);
Assert
.
AreEqual
(
212D
,
message
[
f
(
"repeated_double"
),
0
]);
Assert
.
AreEqual
(
true
,
message
[
f
(
"repeated_bool"
),
0
]);
Assert
.
AreEqual
(
true
,
message
[
f
(
"repeated_bool"
),
0
]);
Assert
.
AreEqual
(
"215"
,
message
[
f
(
"repeated_string"
),
0
]);
Assert
.
AreEqual
(
"215"
,
message
[
f
(
"repeated_string"
),
0
]);
Assert
.
AreEqual
(
TestUtil
.
ToBytes
(
"216"
),
message
[
f
(
"repeated_bytes"
),
0
]);
Assert
.
AreEqual
(
TestUtil
.
ToBytes
(
"216"
),
message
[
f
(
"repeated_bytes"
),
0
]);
Assert
.
AreEqual
(
217
,((
IMessage
)
message
[
f
(
"repeatedgroup"
),
0
])[
repeatedGroupA
]);
Assert
.
AreEqual
(
217
,
((
IMessage
)
message
[
f
(
"repeatedgroup"
),
0
])[
repeatedGroupA
]);
Assert
.
AreEqual
(
218
,((
IMessage
)
message
[
f
(
"repeated_nested_message"
),
0
])[
nestedB
]);
Assert
.
AreEqual
(
218
,
((
IMessage
)
message
[
f
(
"repeated_nested_message"
),
0
])[
nestedB
]);
Assert
.
AreEqual
(
219
,((
IMessage
)
message
[
f
(
"repeated_foreign_message"
),
0
])[
foreignC
]);
Assert
.
AreEqual
(
219
,
((
IMessage
)
message
[
f
(
"repeated_foreign_message"
),
0
])[
foreignC
]);
Assert
.
AreEqual
(
220
,((
IMessage
)
message
[
f
(
"repeated_import_message"
),
0
])[
importD
]);
Assert
.
AreEqual
(
220
,
((
IMessage
)
message
[
f
(
"repeated_import_message"
),
0
])[
importD
]);
Assert
.
AreEqual
(
nestedBar
,
message
[
f
(
"repeated_nested_enum"
),
0
]);
Assert
.
AreEqual
(
nestedBar
,
message
[
f
(
"repeated_nested_enum"
),
0
]);
Assert
.
AreEqual
(
foreignBar
,
message
[
f
(
"repeated_foreign_enum"
),
0
]);
Assert
.
AreEqual
(
foreignBar
,
message
[
f
(
"repeated_foreign_enum"
),
0
]);
Assert
.
AreEqual
(
importBar
,
message
[
f
(
"repeated_import_enum"
),
0
]);
Assert
.
AreEqual
(
importBar
,
message
[
f
(
"repeated_import_enum"
),
0
]);
Assert
.
AreEqual
(
"224"
,
message
[
f
(
"repeated_string_piece"
),
0
]);
Assert
.
AreEqual
(
"224"
,
message
[
f
(
"repeated_string_piece"
),
0
]);
Assert
.
AreEqual
(
"225"
,
message
[
f
(
"repeated_cord"
),
0
]);
Assert
.
AreEqual
(
"225"
,
message
[
f
(
"repeated_cord"
),
0
]);
Assert
.
AreEqual
(
301
,
message
[
f
(
"repeated_int32"
),
1
]);
Assert
.
AreEqual
(
301
,
message
[
f
(
"repeated_int32"
),
1
]);
Assert
.
AreEqual
(
302L
,
message
[
f
(
"repeated_int64"
),
1
]);
Assert
.
AreEqual
(
302L
,
message
[
f
(
"repeated_int64"
),
1
]);
Assert
.
AreEqual
(
303U
,
message
[
f
(
"repeated_uint32"
),
1
]);
Assert
.
AreEqual
(
303U
,
message
[
f
(
"repeated_uint32"
),
1
]);
Assert
.
AreEqual
(
304U
L
,
message
[
f
(
"repeated_uint64"
),
1
]);
Assert
.
AreEqual
(
304U
L
,
message
[
f
(
"repeated_uint64"
),
1
]);
Assert
.
AreEqual
(
305
,
message
[
f
(
"repeated_sint32"
),
1
]);
Assert
.
AreEqual
(
305
,
message
[
f
(
"repeated_sint32"
),
1
]);
Assert
.
AreEqual
(
306L
,
message
[
f
(
"repeated_sint64"
),
1
]);
Assert
.
AreEqual
(
306L
,
message
[
f
(
"repeated_sint64"
),
1
]);
Assert
.
AreEqual
(
307U
,
message
[
f
(
"repeated_fixed32"
),
1
]);
Assert
.
AreEqual
(
307U
,
message
[
f
(
"repeated_fixed32"
),
1
]);
Assert
.
AreEqual
(
308U
L
,
message
[
f
(
"repeated_fixed64"
),
1
]);
Assert
.
AreEqual
(
308U
L
,
message
[
f
(
"repeated_fixed64"
),
1
]);
Assert
.
AreEqual
(
309
,
message
[
f
(
"repeated_sfixed32"
),
1
]);
Assert
.
AreEqual
(
309
,
message
[
f
(
"repeated_sfixed32"
),
1
]);
Assert
.
AreEqual
(
310L
,
message
[
f
(
"repeated_sfixed64"
),
1
]);
Assert
.
AreEqual
(
310L
,
message
[
f
(
"repeated_sfixed64"
),
1
]);
Assert
.
AreEqual
(
311F
,
message
[
f
(
"repeated_float"
),
1
]);
Assert
.
AreEqual
(
311F
,
message
[
f
(
"repeated_float"
),
1
]);
Assert
.
AreEqual
(
312D
,
message
[
f
(
"repeated_double"
),
1
]);
Assert
.
AreEqual
(
312D
,
message
[
f
(
"repeated_double"
),
1
]);
Assert
.
AreEqual
(
false
,
message
[
f
(
"repeated_bool"
),
1
]);
Assert
.
AreEqual
(
false
,
message
[
f
(
"repeated_bool"
),
1
]);
Assert
.
AreEqual
(
"315"
,
message
[
f
(
"repeated_string"
),
1
]);
Assert
.
AreEqual
(
"315"
,
message
[
f
(
"repeated_string"
),
1
]);
Assert
.
AreEqual
(
TestUtil
.
ToBytes
(
"316"
),
message
[
f
(
"repeated_bytes"
),
1
]);
Assert
.
AreEqual
(
TestUtil
.
ToBytes
(
"316"
),
message
[
f
(
"repeated_bytes"
),
1
]);
Assert
.
AreEqual
(
317
,((
IMessage
)
message
[
f
(
"repeatedgroup"
),
1
])[
repeatedGroupA
]);
Assert
.
AreEqual
(
317
,
((
IMessage
)
message
[
f
(
"repeatedgroup"
),
1
])[
repeatedGroupA
]);
Assert
.
AreEqual
(
318
,((
IMessage
)
message
[
f
(
"repeated_nested_message"
),
1
])[
nestedB
]);
Assert
.
AreEqual
(
318
,
((
IMessage
)
message
[
f
(
"repeated_nested_message"
),
1
])[
nestedB
]);
Assert
.
AreEqual
(
319
,((
IMessage
)
message
[
f
(
"repeated_foreign_message"
),
1
])[
foreignC
]);
Assert
.
AreEqual
(
319
,
((
IMessage
)
message
[
f
(
"repeated_foreign_message"
),
1
])[
foreignC
]);
Assert
.
AreEqual
(
320
,((
IMessage
)
message
[
f
(
"repeated_import_message"
),
1
])[
importD
]);
Assert
.
AreEqual
(
320
,
((
IMessage
)
message
[
f
(
"repeated_import_message"
),
1
])[
importD
]);
Assert
.
AreEqual
(
nestedBaz
,
message
[
f
(
"repeated_nested_enum"
),
1
]);
Assert
.
AreEqual
(
nestedBaz
,
message
[
f
(
"repeated_nested_enum"
),
1
]);
Assert
.
AreEqual
(
foreignBaz
,
message
[
f
(
"repeated_foreign_enum"
),
1
]);
Assert
.
AreEqual
(
foreignBaz
,
message
[
f
(
"repeated_foreign_enum"
),
1
]);
Assert
.
AreEqual
(
importBaz
,
message
[
f
(
"repeated_import_enum"
),
1
]);
Assert
.
AreEqual
(
importBaz
,
message
[
f
(
"repeated_import_enum"
),
1
]);
Assert
.
AreEqual
(
"324"
,
message
[
f
(
"repeated_string_piece"
),
1
]);
Assert
.
AreEqual
(
"324"
,
message
[
f
(
"repeated_string_piece"
),
1
]);
Assert
.
AreEqual
(
"325"
,
message
[
f
(
"repeated_cord"
),
1
]);
Assert
.
AreEqual
(
"325"
,
message
[
f
(
"repeated_cord"
),
1
]);
// -----------------------------------------------------------------
// -----------------------------------------------------------------
Assert
.
IsTrue
(
message
.
HasField
(
f
(
"default_int32"
)));
Assert
.
IsTrue
(
message
.
HasField
(
f
(
"default_int32"
)));
Assert
.
IsTrue
(
message
.
HasField
(
f
(
"default_int64"
)));
Assert
.
IsTrue
(
message
.
HasField
(
f
(
"default_int64"
)));
Assert
.
IsTrue
(
message
.
HasField
(
f
(
"default_uint32"
)));
Assert
.
IsTrue
(
message
.
HasField
(
f
(
"default_uint32"
)));
Assert
.
IsTrue
(
message
.
HasField
(
f
(
"default_uint64"
)));
Assert
.
IsTrue
(
message
.
HasField
(
f
(
"default_uint64"
)));
Assert
.
IsTrue
(
message
.
HasField
(
f
(
"default_sint32"
)));
Assert
.
IsTrue
(
message
.
HasField
(
f
(
"default_sint32"
)));
Assert
.
IsTrue
(
message
.
HasField
(
f
(
"default_sint64"
)));
Assert
.
IsTrue
(
message
.
HasField
(
f
(
"default_sint64"
)));
Assert
.
IsTrue
(
message
.
HasField
(
f
(
"default_fixed32"
)));
Assert
.
IsTrue
(
message
.
HasField
(
f
(
"default_fixed32"
)));
Assert
.
IsTrue
(
message
.
HasField
(
f
(
"default_fixed64"
)));
Assert
.
IsTrue
(
message
.
HasField
(
f
(
"default_fixed64"
)));
Assert
.
IsTrue
(
message
.
HasField
(
f
(
"default_sfixed32"
)));
Assert
.
IsTrue
(
message
.
HasField
(
f
(
"default_sfixed32"
)));
Assert
.
IsTrue
(
message
.
HasField
(
f
(
"default_sfixed64"
)));
Assert
.
IsTrue
(
message
.
HasField
(
f
(
"default_sfixed64"
)));
Assert
.
IsTrue
(
message
.
HasField
(
f
(
"default_float"
)));
Assert
.
IsTrue
(
message
.
HasField
(
f
(
"default_float"
)));
Assert
.
IsTrue
(
message
.
HasField
(
f
(
"default_double"
)));
Assert
.
IsTrue
(
message
.
HasField
(
f
(
"default_double"
)));
Assert
.
IsTrue
(
message
.
HasField
(
f
(
"default_bool"
)));
Assert
.
IsTrue
(
message
.
HasField
(
f
(
"default_bool"
)));
Assert
.
IsTrue
(
message
.
HasField
(
f
(
"default_string"
)));
Assert
.
IsTrue
(
message
.
HasField
(
f
(
"default_string"
)));
Assert
.
IsTrue
(
message
.
HasField
(
f
(
"default_bytes"
)));
Assert
.
IsTrue
(
message
.
HasField
(
f
(
"default_bytes"
)));
Assert
.
IsTrue
(
message
.
HasField
(
f
(
"default_nested_enum"
)));
Assert
.
IsTrue
(
message
.
HasField
(
f
(
"default_nested_enum"
)));
Assert
.
IsTrue
(
message
.
HasField
(
f
(
"default_foreign_enum"
)));
Assert
.
IsTrue
(
message
.
HasField
(
f
(
"default_foreign_enum"
)));
Assert
.
IsTrue
(
message
.
HasField
(
f
(
"default_import_enum"
)));
Assert
.
IsTrue
(
message
.
HasField
(
f
(
"default_import_enum"
)));
Assert
.
IsTrue
(
message
.
HasField
(
f
(
"default_string_piece"
)));
Assert
.
IsTrue
(
message
.
HasField
(
f
(
"default_string_piece"
)));
Assert
.
IsTrue
(
message
.
HasField
(
f
(
"default_cord"
)));
Assert
.
IsTrue
(
message
.
HasField
(
f
(
"default_cord"
)));
Assert
.
AreEqual
(
401
,
message
[
f
(
"default_int32"
)]);
Assert
.
AreEqual
(
401
,
message
[
f
(
"default_int32"
)]);
Assert
.
AreEqual
(
402L
,
message
[
f
(
"default_int64"
)]);
Assert
.
AreEqual
(
402L
,
message
[
f
(
"default_int64"
)]);
Assert
.
AreEqual
(
403U
,
message
[
f
(
"default_uint32"
)]);
Assert
.
AreEqual
(
403U
,
message
[
f
(
"default_uint32"
)]);
Assert
.
AreEqual
(
404U
L
,
message
[
f
(
"default_uint64"
)]);
Assert
.
AreEqual
(
404U
L
,
message
[
f
(
"default_uint64"
)]);
Assert
.
AreEqual
(
405
,
message
[
f
(
"default_sint32"
)]);
Assert
.
AreEqual
(
405
,
message
[
f
(
"default_sint32"
)]);
Assert
.
AreEqual
(
406L
,
message
[
f
(
"default_sint64"
)]);
Assert
.
AreEqual
(
406L
,
message
[
f
(
"default_sint64"
)]);
Assert
.
AreEqual
(
407U
,
message
[
f
(
"default_fixed32"
)]);
Assert
.
AreEqual
(
407U
,
message
[
f
(
"default_fixed32"
)]);
Assert
.
AreEqual
(
408U
L
,
message
[
f
(
"default_fixed64"
)]);
Assert
.
AreEqual
(
408U
L
,
message
[
f
(
"default_fixed64"
)]);
Assert
.
AreEqual
(
409
,
message
[
f
(
"default_sfixed32"
)]);
Assert
.
AreEqual
(
409
,
message
[
f
(
"default_sfixed32"
)]);
Assert
.
AreEqual
(
410L
,
message
[
f
(
"default_sfixed64"
)]);
Assert
.
AreEqual
(
410L
,
message
[
f
(
"default_sfixed64"
)]);
Assert
.
AreEqual
(
411F
,
message
[
f
(
"default_float"
)]);
Assert
.
AreEqual
(
411F
,
message
[
f
(
"default_float"
)]);
Assert
.
AreEqual
(
412D
,
message
[
f
(
"default_double"
)]);
Assert
.
AreEqual
(
412D
,
message
[
f
(
"default_double"
)]);
Assert
.
AreEqual
(
false
,
message
[
f
(
"default_bool"
)]);
Assert
.
AreEqual
(
false
,
message
[
f
(
"default_bool"
)]);
Assert
.
AreEqual
(
"415"
,
message
[
f
(
"default_string"
)]);
Assert
.
AreEqual
(
"415"
,
message
[
f
(
"default_string"
)]);
Assert
.
AreEqual
(
TestUtil
.
ToBytes
(
"416"
),
message
[
f
(
"default_bytes"
)]);
Assert
.
AreEqual
(
TestUtil
.
ToBytes
(
"416"
),
message
[
f
(
"default_bytes"
)]);
Assert
.
AreEqual
(
nestedFoo
,
message
[
f
(
"default_nested_enum"
)]);
Assert
.
AreEqual
(
nestedFoo
,
message
[
f
(
"default_nested_enum"
)]);
Assert
.
AreEqual
(
foreignFoo
,
message
[
f
(
"default_foreign_enum"
)]);
Assert
.
AreEqual
(
foreignFoo
,
message
[
f
(
"default_foreign_enum"
)]);
Assert
.
AreEqual
(
importFoo
,
message
[
f
(
"default_import_enum"
)]);
Assert
.
AreEqual
(
importFoo
,
message
[
f
(
"default_import_enum"
)]);
Assert
.
AreEqual
(
"424"
,
message
[
f
(
"default_string_piece"
)]);
Assert
.
AreEqual
(
"424"
,
message
[
f
(
"default_string_piece"
)]);
Assert
.
AreEqual
(
"425"
,
message
[
f
(
"default_cord"
)]);
Assert
.
AreEqual
(
"425"
,
message
[
f
(
"default_cord"
)]);
...
@@ -577,49 +587,49 @@ namespace Google.ProtocolBuffers {
...
@@ -577,49 +587,49 @@ namespace Google.ProtocolBuffers {
/// </summary>
/// </summary>
public
void
AssertClearViaReflection
(
IMessage
message
)
{
public
void
AssertClearViaReflection
(
IMessage
message
)
{
// has_blah() should initially be false for all optional fields.
// has_blah() should initially be false for all optional fields.
Assert
.
IsFalse
(
message
.
HasField
(
f
(
"optional_int32"
)));
Assert
.
IsFalse
(
message
.
HasField
(
f
(
"optional_int32"
)));
Assert
.
IsFalse
(
message
.
HasField
(
f
(
"optional_int64"
)));
Assert
.
IsFalse
(
message
.
HasField
(
f
(
"optional_int64"
)));
Assert
.
IsFalse
(
message
.
HasField
(
f
(
"optional_uint32"
)));
Assert
.
IsFalse
(
message
.
HasField
(
f
(
"optional_uint32"
)));
Assert
.
IsFalse
(
message
.
HasField
(
f
(
"optional_uint64"
)));
Assert
.
IsFalse
(
message
.
HasField
(
f
(
"optional_uint64"
)));
Assert
.
IsFalse
(
message
.
HasField
(
f
(
"optional_sint32"
)));
Assert
.
IsFalse
(
message
.
HasField
(
f
(
"optional_sint32"
)));
Assert
.
IsFalse
(
message
.
HasField
(
f
(
"optional_sint64"
)));
Assert
.
IsFalse
(
message
.
HasField
(
f
(
"optional_sint64"
)));
Assert
.
IsFalse
(
message
.
HasField
(
f
(
"optional_fixed32"
)));
Assert
.
IsFalse
(
message
.
HasField
(
f
(
"optional_fixed32"
)));
Assert
.
IsFalse
(
message
.
HasField
(
f
(
"optional_fixed64"
)));
Assert
.
IsFalse
(
message
.
HasField
(
f
(
"optional_fixed64"
)));
Assert
.
IsFalse
(
message
.
HasField
(
f
(
"optional_sfixed32"
)));
Assert
.
IsFalse
(
message
.
HasField
(
f
(
"optional_sfixed32"
)));
Assert
.
IsFalse
(
message
.
HasField
(
f
(
"optional_sfixed64"
)));
Assert
.
IsFalse
(
message
.
HasField
(
f
(
"optional_sfixed64"
)));
Assert
.
IsFalse
(
message
.
HasField
(
f
(
"optional_float"
)));
Assert
.
IsFalse
(
message
.
HasField
(
f
(
"optional_float"
)));
Assert
.
IsFalse
(
message
.
HasField
(
f
(
"optional_double"
)));
Assert
.
IsFalse
(
message
.
HasField
(
f
(
"optional_double"
)));
Assert
.
IsFalse
(
message
.
HasField
(
f
(
"optional_bool"
)));
Assert
.
IsFalse
(
message
.
HasField
(
f
(
"optional_bool"
)));
Assert
.
IsFalse
(
message
.
HasField
(
f
(
"optional_string"
)));
Assert
.
IsFalse
(
message
.
HasField
(
f
(
"optional_string"
)));
Assert
.
IsFalse
(
message
.
HasField
(
f
(
"optional_bytes"
)));
Assert
.
IsFalse
(
message
.
HasField
(
f
(
"optional_bytes"
)));
Assert
.
IsFalse
(
message
.
HasField
(
f
(
"optionalgroup"
)));
Assert
.
IsFalse
(
message
.
HasField
(
f
(
"optionalgroup"
)));
Assert
.
IsFalse
(
message
.
HasField
(
f
(
"optional_nested_message"
)));
Assert
.
IsFalse
(
message
.
HasField
(
f
(
"optional_nested_message"
)));
Assert
.
IsFalse
(
message
.
HasField
(
f
(
"optional_foreign_message"
)));
Assert
.
IsFalse
(
message
.
HasField
(
f
(
"optional_foreign_message"
)));
Assert
.
IsFalse
(
message
.
HasField
(
f
(
"optional_import_message"
)));
Assert
.
IsFalse
(
message
.
HasField
(
f
(
"optional_import_message"
)));
Assert
.
IsFalse
(
message
.
HasField
(
f
(
"optional_nested_enum"
)));
Assert
.
IsFalse
(
message
.
HasField
(
f
(
"optional_nested_enum"
)));
Assert
.
IsFalse
(
message
.
HasField
(
f
(
"optional_foreign_enum"
)));
Assert
.
IsFalse
(
message
.
HasField
(
f
(
"optional_foreign_enum"
)));
Assert
.
IsFalse
(
message
.
HasField
(
f
(
"optional_import_enum"
)));
Assert
.
IsFalse
(
message
.
HasField
(
f
(
"optional_import_enum"
)));
Assert
.
IsFalse
(
message
.
HasField
(
f
(
"optional_string_piece"
)));
Assert
.
IsFalse
(
message
.
HasField
(
f
(
"optional_string_piece"
)));
Assert
.
IsFalse
(
message
.
HasField
(
f
(
"optional_cord"
)));
Assert
.
IsFalse
(
message
.
HasField
(
f
(
"optional_cord"
)));
// Optional fields without defaults are set to zero or something like it.
// Optional fields without defaults are set to zero or something like it.
Assert
.
AreEqual
(
0
,
message
[
f
(
"optional_int32"
)]);
Assert
.
AreEqual
(
0
,
message
[
f
(
"optional_int32"
)]);
Assert
.
AreEqual
(
0L
,
message
[
f
(
"optional_int64"
)]);
Assert
.
AreEqual
(
0L
,
message
[
f
(
"optional_int64"
)]);
Assert
.
AreEqual
(
0U
,
message
[
f
(
"optional_uint32"
)]);
Assert
.
AreEqual
(
0U
,
message
[
f
(
"optional_uint32"
)]);
Assert
.
AreEqual
(
0U
L
,
message
[
f
(
"optional_uint64"
)]);
Assert
.
AreEqual
(
0U
L
,
message
[
f
(
"optional_uint64"
)]);
Assert
.
AreEqual
(
0
,
message
[
f
(
"optional_sint32"
)]);
Assert
.
AreEqual
(
0
,
message
[
f
(
"optional_sint32"
)]);
Assert
.
AreEqual
(
0L
,
message
[
f
(
"optional_sint64"
)]);
Assert
.
AreEqual
(
0L
,
message
[
f
(
"optional_sint64"
)]);
Assert
.
AreEqual
(
0U
,
message
[
f
(
"optional_fixed32"
)]);
Assert
.
AreEqual
(
0U
,
message
[
f
(
"optional_fixed32"
)]);
Assert
.
AreEqual
(
0U
L
,
message
[
f
(
"optional_fixed64"
)]);
Assert
.
AreEqual
(
0U
L
,
message
[
f
(
"optional_fixed64"
)]);
Assert
.
AreEqual
(
0
,
message
[
f
(
"optional_sfixed32"
)]);
Assert
.
AreEqual
(
0
,
message
[
f
(
"optional_sfixed32"
)]);
Assert
.
AreEqual
(
0L
,
message
[
f
(
"optional_sfixed64"
)]);
Assert
.
AreEqual
(
0L
,
message
[
f
(
"optional_sfixed64"
)]);
Assert
.
AreEqual
(
0F
,
message
[
f
(
"optional_float"
)]);
Assert
.
AreEqual
(
0F
,
message
[
f
(
"optional_float"
)]);
Assert
.
AreEqual
(
0D
,
message
[
f
(
"optional_double"
)]);
Assert
.
AreEqual
(
0D
,
message
[
f
(
"optional_double"
)]);
Assert
.
AreEqual
(
false
,
message
[
f
(
"optional_bool"
)]);
Assert
.
AreEqual
(
false
,
message
[
f
(
"optional_bool"
)]);
Assert
.
AreEqual
(
""
,
message
[
f
(
"optional_string"
)]);
Assert
.
AreEqual
(
""
,
message
[
f
(
"optional_string"
)]);
Assert
.
AreEqual
(
ByteString
.
Empty
,
message
[
f
(
"optional_bytes"
)]);
Assert
.
AreEqual
(
ByteString
.
Empty
,
message
[
f
(
"optional_bytes"
)]);
// Embedded messages should also be clear.
// Embedded messages should also be clear.
...
@@ -631,91 +641,91 @@ namespace Google.ProtocolBuffers {
...
@@ -631,91 +641,91 @@ namespace Google.ProtocolBuffers {
Assert
.
IsFalse
(((
IMessage
)
message
[
f
(
"optional_import_message"
)])
Assert
.
IsFalse
(((
IMessage
)
message
[
f
(
"optional_import_message"
)])
.
HasField
(
importD
));
.
HasField
(
importD
));
Assert
.
AreEqual
(
0
,((
IMessage
)
message
[
f
(
"optionalgroup"
)])[
groupA
]);
Assert
.
AreEqual
(
0
,
((
IMessage
)
message
[
f
(
"optionalgroup"
)])[
groupA
]);
Assert
.
AreEqual
(
0
,((
IMessage
)
message
[
f
(
"optional_nested_message"
)])[
nestedB
]);
Assert
.
AreEqual
(
0
,
((
IMessage
)
message
[
f
(
"optional_nested_message"
)])[
nestedB
]);
Assert
.
AreEqual
(
0
,((
IMessage
)
message
[
f
(
"optional_foreign_message"
)])[
foreignC
]);
Assert
.
AreEqual
(
0
,
((
IMessage
)
message
[
f
(
"optional_foreign_message"
)])[
foreignC
]);
Assert
.
AreEqual
(
0
,((
IMessage
)
message
[
f
(
"optional_import_message"
)])[
importD
]);
Assert
.
AreEqual
(
0
,
((
IMessage
)
message
[
f
(
"optional_import_message"
)])[
importD
]);
// Enums without defaults are set to the first value in the enum.
// Enums without defaults are set to the first value in the enum.
Assert
.
AreEqual
(
nestedFoo
,
message
[
f
(
"optional_nested_enum"
)]);
Assert
.
AreEqual
(
nestedFoo
,
message
[
f
(
"optional_nested_enum"
)]);
Assert
.
AreEqual
(
foreignFoo
,
message
[
f
(
"optional_foreign_enum"
)]);
Assert
.
AreEqual
(
foreignFoo
,
message
[
f
(
"optional_foreign_enum"
)]);
Assert
.
AreEqual
(
importFoo
,
message
[
f
(
"optional_import_enum"
)]);
Assert
.
AreEqual
(
importFoo
,
message
[
f
(
"optional_import_enum"
)]);
Assert
.
AreEqual
(
""
,
message
[
f
(
"optional_string_piece"
)]);
Assert
.
AreEqual
(
""
,
message
[
f
(
"optional_string_piece"
)]);
Assert
.
AreEqual
(
""
,
message
[
f
(
"optional_cord"
)]);
Assert
.
AreEqual
(
""
,
message
[
f
(
"optional_cord"
)]);
// Repeated fields are empty.
// Repeated fields are empty.
Assert
.
AreEqual
(
0
,
message
.
GetRepeatedFieldCount
(
f
(
"repeated_int32"
)));
Assert
.
AreEqual
(
0
,
message
.
GetRepeatedFieldCount
(
f
(
"repeated_int32"
)));
Assert
.
AreEqual
(
0
,
message
.
GetRepeatedFieldCount
(
f
(
"repeated_int64"
)));
Assert
.
AreEqual
(
0
,
message
.
GetRepeatedFieldCount
(
f
(
"repeated_int64"
)));
Assert
.
AreEqual
(
0
,
message
.
GetRepeatedFieldCount
(
f
(
"repeated_uint32"
)));
Assert
.
AreEqual
(
0
,
message
.
GetRepeatedFieldCount
(
f
(
"repeated_uint32"
)));
Assert
.
AreEqual
(
0
,
message
.
GetRepeatedFieldCount
(
f
(
"repeated_uint64"
)));
Assert
.
AreEqual
(
0
,
message
.
GetRepeatedFieldCount
(
f
(
"repeated_uint64"
)));
Assert
.
AreEqual
(
0
,
message
.
GetRepeatedFieldCount
(
f
(
"repeated_sint32"
)));
Assert
.
AreEqual
(
0
,
message
.
GetRepeatedFieldCount
(
f
(
"repeated_sint32"
)));
Assert
.
AreEqual
(
0
,
message
.
GetRepeatedFieldCount
(
f
(
"repeated_sint64"
)));
Assert
.
AreEqual
(
0
,
message
.
GetRepeatedFieldCount
(
f
(
"repeated_sint64"
)));
Assert
.
AreEqual
(
0
,
message
.
GetRepeatedFieldCount
(
f
(
"repeated_fixed32"
)));
Assert
.
AreEqual
(
0
,
message
.
GetRepeatedFieldCount
(
f
(
"repeated_fixed32"
)));
Assert
.
AreEqual
(
0
,
message
.
GetRepeatedFieldCount
(
f
(
"repeated_fixed64"
)));
Assert
.
AreEqual
(
0
,
message
.
GetRepeatedFieldCount
(
f
(
"repeated_fixed64"
)));
Assert
.
AreEqual
(
0
,
message
.
GetRepeatedFieldCount
(
f
(
"repeated_sfixed32"
)));
Assert
.
AreEqual
(
0
,
message
.
GetRepeatedFieldCount
(
f
(
"repeated_sfixed32"
)));
Assert
.
AreEqual
(
0
,
message
.
GetRepeatedFieldCount
(
f
(
"repeated_sfixed64"
)));
Assert
.
AreEqual
(
0
,
message
.
GetRepeatedFieldCount
(
f
(
"repeated_sfixed64"
)));
Assert
.
AreEqual
(
0
,
message
.
GetRepeatedFieldCount
(
f
(
"repeated_float"
)));
Assert
.
AreEqual
(
0
,
message
.
GetRepeatedFieldCount
(
f
(
"repeated_float"
)));
Assert
.
AreEqual
(
0
,
message
.
GetRepeatedFieldCount
(
f
(
"repeated_double"
)));
Assert
.
AreEqual
(
0
,
message
.
GetRepeatedFieldCount
(
f
(
"repeated_double"
)));
Assert
.
AreEqual
(
0
,
message
.
GetRepeatedFieldCount
(
f
(
"repeated_bool"
)));
Assert
.
AreEqual
(
0
,
message
.
GetRepeatedFieldCount
(
f
(
"repeated_bool"
)));
Assert
.
AreEqual
(
0
,
message
.
GetRepeatedFieldCount
(
f
(
"repeated_string"
)));
Assert
.
AreEqual
(
0
,
message
.
GetRepeatedFieldCount
(
f
(
"repeated_string"
)));
Assert
.
AreEqual
(
0
,
message
.
GetRepeatedFieldCount
(
f
(
"repeated_bytes"
)));
Assert
.
AreEqual
(
0
,
message
.
GetRepeatedFieldCount
(
f
(
"repeated_bytes"
)));
Assert
.
AreEqual
(
0
,
message
.
GetRepeatedFieldCount
(
f
(
"repeatedgroup"
)));
Assert
.
AreEqual
(
0
,
message
.
GetRepeatedFieldCount
(
f
(
"repeatedgroup"
)));
Assert
.
AreEqual
(
0
,
message
.
GetRepeatedFieldCount
(
f
(
"repeated_nested_message"
)));
Assert
.
AreEqual
(
0
,
message
.
GetRepeatedFieldCount
(
f
(
"repeated_nested_message"
)));
Assert
.
AreEqual
(
0
,
message
.
GetRepeatedFieldCount
(
f
(
"repeated_foreign_message"
)));
Assert
.
AreEqual
(
0
,
message
.
GetRepeatedFieldCount
(
f
(
"repeated_foreign_message"
)));
Assert
.
AreEqual
(
0
,
message
.
GetRepeatedFieldCount
(
f
(
"repeated_import_message"
)));
Assert
.
AreEqual
(
0
,
message
.
GetRepeatedFieldCount
(
f
(
"repeated_import_message"
)));
Assert
.
AreEqual
(
0
,
message
.
GetRepeatedFieldCount
(
f
(
"repeated_nested_enum"
)));
Assert
.
AreEqual
(
0
,
message
.
GetRepeatedFieldCount
(
f
(
"repeated_nested_enum"
)));
Assert
.
AreEqual
(
0
,
message
.
GetRepeatedFieldCount
(
f
(
"repeated_foreign_enum"
)));
Assert
.
AreEqual
(
0
,
message
.
GetRepeatedFieldCount
(
f
(
"repeated_foreign_enum"
)));
Assert
.
AreEqual
(
0
,
message
.
GetRepeatedFieldCount
(
f
(
"repeated_import_enum"
)));
Assert
.
AreEqual
(
0
,
message
.
GetRepeatedFieldCount
(
f
(
"repeated_import_enum"
)));
Assert
.
AreEqual
(
0
,
message
.
GetRepeatedFieldCount
(
f
(
"repeated_string_piece"
)));
Assert
.
AreEqual
(
0
,
message
.
GetRepeatedFieldCount
(
f
(
"repeated_string_piece"
)));
Assert
.
AreEqual
(
0
,
message
.
GetRepeatedFieldCount
(
f
(
"repeated_cord"
)));
Assert
.
AreEqual
(
0
,
message
.
GetRepeatedFieldCount
(
f
(
"repeated_cord"
)));
// has_blah() should also be false for all default fields.
// has_blah() should also be false for all default fields.
Assert
.
IsFalse
(
message
.
HasField
(
f
(
"default_int32"
)));
Assert
.
IsFalse
(
message
.
HasField
(
f
(
"default_int32"
)));
Assert
.
IsFalse
(
message
.
HasField
(
f
(
"default_int64"
)));
Assert
.
IsFalse
(
message
.
HasField
(
f
(
"default_int64"
)));
Assert
.
IsFalse
(
message
.
HasField
(
f
(
"default_uint32"
)));
Assert
.
IsFalse
(
message
.
HasField
(
f
(
"default_uint32"
)));
Assert
.
IsFalse
(
message
.
HasField
(
f
(
"default_uint64"
)));
Assert
.
IsFalse
(
message
.
HasField
(
f
(
"default_uint64"
)));
Assert
.
IsFalse
(
message
.
HasField
(
f
(
"default_sint32"
)));
Assert
.
IsFalse
(
message
.
HasField
(
f
(
"default_sint32"
)));
Assert
.
IsFalse
(
message
.
HasField
(
f
(
"default_sint64"
)));
Assert
.
IsFalse
(
message
.
HasField
(
f
(
"default_sint64"
)));
Assert
.
IsFalse
(
message
.
HasField
(
f
(
"default_fixed32"
)));
Assert
.
IsFalse
(
message
.
HasField
(
f
(
"default_fixed32"
)));
Assert
.
IsFalse
(
message
.
HasField
(
f
(
"default_fixed64"
)));
Assert
.
IsFalse
(
message
.
HasField
(
f
(
"default_fixed64"
)));
Assert
.
IsFalse
(
message
.
HasField
(
f
(
"default_sfixed32"
)));
Assert
.
IsFalse
(
message
.
HasField
(
f
(
"default_sfixed32"
)));
Assert
.
IsFalse
(
message
.
HasField
(
f
(
"default_sfixed64"
)));
Assert
.
IsFalse
(
message
.
HasField
(
f
(
"default_sfixed64"
)));
Assert
.
IsFalse
(
message
.
HasField
(
f
(
"default_float"
)));
Assert
.
IsFalse
(
message
.
HasField
(
f
(
"default_float"
)));
Assert
.
IsFalse
(
message
.
HasField
(
f
(
"default_double"
)));
Assert
.
IsFalse
(
message
.
HasField
(
f
(
"default_double"
)));
Assert
.
IsFalse
(
message
.
HasField
(
f
(
"default_bool"
)));
Assert
.
IsFalse
(
message
.
HasField
(
f
(
"default_bool"
)));
Assert
.
IsFalse
(
message
.
HasField
(
f
(
"default_string"
)));
Assert
.
IsFalse
(
message
.
HasField
(
f
(
"default_string"
)));
Assert
.
IsFalse
(
message
.
HasField
(
f
(
"default_bytes"
)));
Assert
.
IsFalse
(
message
.
HasField
(
f
(
"default_bytes"
)));
Assert
.
IsFalse
(
message
.
HasField
(
f
(
"default_nested_enum"
)));
Assert
.
IsFalse
(
message
.
HasField
(
f
(
"default_nested_enum"
)));
Assert
.
IsFalse
(
message
.
HasField
(
f
(
"default_foreign_enum"
)));
Assert
.
IsFalse
(
message
.
HasField
(
f
(
"default_foreign_enum"
)));
Assert
.
IsFalse
(
message
.
HasField
(
f
(
"default_import_enum"
)));
Assert
.
IsFalse
(
message
.
HasField
(
f
(
"default_import_enum"
)));
Assert
.
IsFalse
(
message
.
HasField
(
f
(
"default_string_piece"
)));
Assert
.
IsFalse
(
message
.
HasField
(
f
(
"default_string_piece"
)));
Assert
.
IsFalse
(
message
.
HasField
(
f
(
"default_cord"
)));
Assert
.
IsFalse
(
message
.
HasField
(
f
(
"default_cord"
)));
// Fields with defaults have their default values (duh).
// Fields with defaults have their default values (duh).
Assert
.
AreEqual
(
41
,
message
[
f
(
"default_int32"
)]);
Assert
.
AreEqual
(
41
,
message
[
f
(
"default_int32"
)]);
Assert
.
AreEqual
(
42L
,
message
[
f
(
"default_int64"
)]);
Assert
.
AreEqual
(
42L
,
message
[
f
(
"default_int64"
)]);
Assert
.
AreEqual
(
43U
,
message
[
f
(
"default_uint32"
)]);
Assert
.
AreEqual
(
43U
,
message
[
f
(
"default_uint32"
)]);
Assert
.
AreEqual
(
44U
L
,
message
[
f
(
"default_uint64"
)]);
Assert
.
AreEqual
(
44U
L
,
message
[
f
(
"default_uint64"
)]);
Assert
.
AreEqual
(-
45
,
message
[
f
(
"default_sint32"
)]);
Assert
.
AreEqual
(-
45
,
message
[
f
(
"default_sint32"
)]);
Assert
.
AreEqual
(
46L
,
message
[
f
(
"default_sint64"
)]);
Assert
.
AreEqual
(
46L
,
message
[
f
(
"default_sint64"
)]);
Assert
.
AreEqual
(
47U
,
message
[
f
(
"default_fixed32"
)]);
Assert
.
AreEqual
(
47U
,
message
[
f
(
"default_fixed32"
)]);
Assert
.
AreEqual
(
48U
L
,
message
[
f
(
"default_fixed64"
)]);
Assert
.
AreEqual
(
48U
L
,
message
[
f
(
"default_fixed64"
)]);
Assert
.
AreEqual
(
49
,
message
[
f
(
"default_sfixed32"
)]);
Assert
.
AreEqual
(
49
,
message
[
f
(
"default_sfixed32"
)]);
Assert
.
AreEqual
(-
50L
,
message
[
f
(
"default_sfixed64"
)]);
Assert
.
AreEqual
(-
50L
,
message
[
f
(
"default_sfixed64"
)]);
Assert
.
AreEqual
(
51.5F
,
message
[
f
(
"default_float"
)]);
Assert
.
AreEqual
(
51.5F
,
message
[
f
(
"default_float"
)]);
Assert
.
AreEqual
(
52
e3D
,
message
[
f
(
"default_double"
)]);
Assert
.
AreEqual
(
52
e3D
,
message
[
f
(
"default_double"
)]);
Assert
.
AreEqual
(
true
,
message
[
f
(
"default_bool"
)]);
Assert
.
AreEqual
(
true
,
message
[
f
(
"default_bool"
)]);
Assert
.
AreEqual
(
"hello"
,
message
[
f
(
"default_string"
)]);
Assert
.
AreEqual
(
"hello"
,
message
[
f
(
"default_string"
)]);
Assert
.
AreEqual
(
TestUtil
.
ToBytes
(
"world"
),
message
[
f
(
"default_bytes"
)]);
Assert
.
AreEqual
(
TestUtil
.
ToBytes
(
"world"
),
message
[
f
(
"default_bytes"
)]);
Assert
.
AreEqual
(
nestedBar
,
message
[
f
(
"default_nested_enum"
)]);
Assert
.
AreEqual
(
nestedBar
,
message
[
f
(
"default_nested_enum"
)]);
Assert
.
AreEqual
(
foreignBar
,
message
[
f
(
"default_foreign_enum"
)]);
Assert
.
AreEqual
(
foreignBar
,
message
[
f
(
"default_foreign_enum"
)]);
Assert
.
AreEqual
(
importBar
,
message
[
f
(
"default_import_enum"
)]);
Assert
.
AreEqual
(
importBar
,
message
[
f
(
"default_import_enum"
)]);
Assert
.
AreEqual
(
"abc"
,
message
[
f
(
"default_string_piece"
)]);
Assert
.
AreEqual
(
"abc"
,
message
[
f
(
"default_string_piece"
)]);
Assert
.
AreEqual
(
"123"
,
message
[
f
(
"default_cord"
)]);
Assert
.
AreEqual
(
"123"
,
message
[
f
(
"default_cord"
)]);
...
@@ -727,85 +737,85 @@ namespace Google.ProtocolBuffers {
...
@@ -727,85 +737,85 @@ namespace Google.ProtocolBuffers {
// ModifyRepeatedFields only sets the second repeated element of each
// ModifyRepeatedFields only sets the second repeated element of each
// field. In addition to verifying this, we also verify that the first
// field. In addition to verifying this, we also verify that the first
// element and size were *not* modified.
// element and size were *not* modified.
Assert
.
AreEqual
(
2
,
message
.
GetRepeatedFieldCount
(
f
(
"repeated_int32"
)));
Assert
.
AreEqual
(
2
,
message
.
GetRepeatedFieldCount
(
f
(
"repeated_int32"
)));
Assert
.
AreEqual
(
2
,
message
.
GetRepeatedFieldCount
(
f
(
"repeated_int64"
)));
Assert
.
AreEqual
(
2
,
message
.
GetRepeatedFieldCount
(
f
(
"repeated_int64"
)));
Assert
.
AreEqual
(
2
,
message
.
GetRepeatedFieldCount
(
f
(
"repeated_uint32"
)));
Assert
.
AreEqual
(
2
,
message
.
GetRepeatedFieldCount
(
f
(
"repeated_uint32"
)));
Assert
.
AreEqual
(
2
,
message
.
GetRepeatedFieldCount
(
f
(
"repeated_uint64"
)));
Assert
.
AreEqual
(
2
,
message
.
GetRepeatedFieldCount
(
f
(
"repeated_uint64"
)));
Assert
.
AreEqual
(
2
,
message
.
GetRepeatedFieldCount
(
f
(
"repeated_sint32"
)));
Assert
.
AreEqual
(
2
,
message
.
GetRepeatedFieldCount
(
f
(
"repeated_sint32"
)));
Assert
.
AreEqual
(
2
,
message
.
GetRepeatedFieldCount
(
f
(
"repeated_sint64"
)));
Assert
.
AreEqual
(
2
,
message
.
GetRepeatedFieldCount
(
f
(
"repeated_sint64"
)));
Assert
.
AreEqual
(
2
,
message
.
GetRepeatedFieldCount
(
f
(
"repeated_fixed32"
)));
Assert
.
AreEqual
(
2
,
message
.
GetRepeatedFieldCount
(
f
(
"repeated_fixed32"
)));
Assert
.
AreEqual
(
2
,
message
.
GetRepeatedFieldCount
(
f
(
"repeated_fixed64"
)));
Assert
.
AreEqual
(
2
,
message
.
GetRepeatedFieldCount
(
f
(
"repeated_fixed64"
)));
Assert
.
AreEqual
(
2
,
message
.
GetRepeatedFieldCount
(
f
(
"repeated_sfixed32"
)));
Assert
.
AreEqual
(
2
,
message
.
GetRepeatedFieldCount
(
f
(
"repeated_sfixed32"
)));
Assert
.
AreEqual
(
2
,
message
.
GetRepeatedFieldCount
(
f
(
"repeated_sfixed64"
)));
Assert
.
AreEqual
(
2
,
message
.
GetRepeatedFieldCount
(
f
(
"repeated_sfixed64"
)));
Assert
.
AreEqual
(
2
,
message
.
GetRepeatedFieldCount
(
f
(
"repeated_float"
)));
Assert
.
AreEqual
(
2
,
message
.
GetRepeatedFieldCount
(
f
(
"repeated_float"
)));
Assert
.
AreEqual
(
2
,
message
.
GetRepeatedFieldCount
(
f
(
"repeated_double"
)));
Assert
.
AreEqual
(
2
,
message
.
GetRepeatedFieldCount
(
f
(
"repeated_double"
)));
Assert
.
AreEqual
(
2
,
message
.
GetRepeatedFieldCount
(
f
(
"repeated_bool"
)));
Assert
.
AreEqual
(
2
,
message
.
GetRepeatedFieldCount
(
f
(
"repeated_bool"
)));
Assert
.
AreEqual
(
2
,
message
.
GetRepeatedFieldCount
(
f
(
"repeated_string"
)));
Assert
.
AreEqual
(
2
,
message
.
GetRepeatedFieldCount
(
f
(
"repeated_string"
)));
Assert
.
AreEqual
(
2
,
message
.
GetRepeatedFieldCount
(
f
(
"repeated_bytes"
)));
Assert
.
AreEqual
(
2
,
message
.
GetRepeatedFieldCount
(
f
(
"repeated_bytes"
)));
Assert
.
AreEqual
(
2
,
message
.
GetRepeatedFieldCount
(
f
(
"repeatedgroup"
)));
Assert
.
AreEqual
(
2
,
message
.
GetRepeatedFieldCount
(
f
(
"repeatedgroup"
)));
Assert
.
AreEqual
(
2
,
message
.
GetRepeatedFieldCount
(
f
(
"repeated_nested_message"
)));
Assert
.
AreEqual
(
2
,
message
.
GetRepeatedFieldCount
(
f
(
"repeated_nested_message"
)));
Assert
.
AreEqual
(
2
,
message
.
GetRepeatedFieldCount
(
f
(
"repeated_foreign_message"
)));
Assert
.
AreEqual
(
2
,
message
.
GetRepeatedFieldCount
(
f
(
"repeated_foreign_message"
)));
Assert
.
AreEqual
(
2
,
message
.
GetRepeatedFieldCount
(
f
(
"repeated_import_message"
)));
Assert
.
AreEqual
(
2
,
message
.
GetRepeatedFieldCount
(
f
(
"repeated_import_message"
)));
Assert
.
AreEqual
(
2
,
message
.
GetRepeatedFieldCount
(
f
(
"repeated_nested_enum"
)));
Assert
.
AreEqual
(
2
,
message
.
GetRepeatedFieldCount
(
f
(
"repeated_nested_enum"
)));
Assert
.
AreEqual
(
2
,
message
.
GetRepeatedFieldCount
(
f
(
"repeated_foreign_enum"
)));
Assert
.
AreEqual
(
2
,
message
.
GetRepeatedFieldCount
(
f
(
"repeated_foreign_enum"
)));
Assert
.
AreEqual
(
2
,
message
.
GetRepeatedFieldCount
(
f
(
"repeated_import_enum"
)));
Assert
.
AreEqual
(
2
,
message
.
GetRepeatedFieldCount
(
f
(
"repeated_import_enum"
)));
Assert
.
AreEqual
(
2
,
message
.
GetRepeatedFieldCount
(
f
(
"repeated_string_piece"
)));
Assert
.
AreEqual
(
2
,
message
.
GetRepeatedFieldCount
(
f
(
"repeated_string_piece"
)));
Assert
.
AreEqual
(
2
,
message
.
GetRepeatedFieldCount
(
f
(
"repeated_cord"
)));
Assert
.
AreEqual
(
2
,
message
.
GetRepeatedFieldCount
(
f
(
"repeated_cord"
)));
Assert
.
AreEqual
(
201
,
message
[
f
(
"repeated_int32"
),
0
]);
Assert
.
AreEqual
(
201
,
message
[
f
(
"repeated_int32"
),
0
]);
Assert
.
AreEqual
(
202L
,
message
[
f
(
"repeated_int64"
),
0
]);
Assert
.
AreEqual
(
202L
,
message
[
f
(
"repeated_int64"
),
0
]);
Assert
.
AreEqual
(
203U
,
message
[
f
(
"repeated_uint32"
),
0
]);
Assert
.
AreEqual
(
203U
,
message
[
f
(
"repeated_uint32"
),
0
]);
Assert
.
AreEqual
(
204U
L
,
message
[
f
(
"repeated_uint64"
),
0
]);
Assert
.
AreEqual
(
204U
L
,
message
[
f
(
"repeated_uint64"
),
0
]);
Assert
.
AreEqual
(
205
,
message
[
f
(
"repeated_sint32"
),
0
]);
Assert
.
AreEqual
(
205
,
message
[
f
(
"repeated_sint32"
),
0
]);
Assert
.
AreEqual
(
206L
,
message
[
f
(
"repeated_sint64"
),
0
]);
Assert
.
AreEqual
(
206L
,
message
[
f
(
"repeated_sint64"
),
0
]);
Assert
.
AreEqual
(
207U
,
message
[
f
(
"repeated_fixed32"
),
0
]);
Assert
.
AreEqual
(
207U
,
message
[
f
(
"repeated_fixed32"
),
0
]);
Assert
.
AreEqual
(
208U
L
,
message
[
f
(
"repeated_fixed64"
),
0
]);
Assert
.
AreEqual
(
208U
L
,
message
[
f
(
"repeated_fixed64"
),
0
]);
Assert
.
AreEqual
(
209
,
message
[
f
(
"repeated_sfixed32"
),
0
]);
Assert
.
AreEqual
(
209
,
message
[
f
(
"repeated_sfixed32"
),
0
]);
Assert
.
AreEqual
(
210L
,
message
[
f
(
"repeated_sfixed64"
),
0
]);
Assert
.
AreEqual
(
210L
,
message
[
f
(
"repeated_sfixed64"
),
0
]);
Assert
.
AreEqual
(
211F
,
message
[
f
(
"repeated_float"
),
0
]);
Assert
.
AreEqual
(
211F
,
message
[
f
(
"repeated_float"
),
0
]);
Assert
.
AreEqual
(
212D
,
message
[
f
(
"repeated_double"
),
0
]);
Assert
.
AreEqual
(
212D
,
message
[
f
(
"repeated_double"
),
0
]);
Assert
.
AreEqual
(
true
,
message
[
f
(
"repeated_bool"
),
0
]);
Assert
.
AreEqual
(
true
,
message
[
f
(
"repeated_bool"
),
0
]);
Assert
.
AreEqual
(
"215"
,
message
[
f
(
"repeated_string"
),
0
]);
Assert
.
AreEqual
(
"215"
,
message
[
f
(
"repeated_string"
),
0
]);
Assert
.
AreEqual
(
TestUtil
.
ToBytes
(
"216"
),
message
[
f
(
"repeated_bytes"
),
0
]);
Assert
.
AreEqual
(
TestUtil
.
ToBytes
(
"216"
),
message
[
f
(
"repeated_bytes"
),
0
]);
Assert
.
AreEqual
(
217
,((
IMessage
)
message
[
f
(
"repeatedgroup"
),
0
])[
repeatedGroupA
]);
Assert
.
AreEqual
(
217
,
((
IMessage
)
message
[
f
(
"repeatedgroup"
),
0
])[
repeatedGroupA
]);
Assert
.
AreEqual
(
218
,((
IMessage
)
message
[
f
(
"repeated_nested_message"
),
0
])[
nestedB
]);
Assert
.
AreEqual
(
218
,
((
IMessage
)
message
[
f
(
"repeated_nested_message"
),
0
])[
nestedB
]);
Assert
.
AreEqual
(
219
,((
IMessage
)
message
[
f
(
"repeated_foreign_message"
),
0
])[
foreignC
]);
Assert
.
AreEqual
(
219
,
((
IMessage
)
message
[
f
(
"repeated_foreign_message"
),
0
])[
foreignC
]);
Assert
.
AreEqual
(
220
,((
IMessage
)
message
[
f
(
"repeated_import_message"
),
0
])[
importD
]);
Assert
.
AreEqual
(
220
,
((
IMessage
)
message
[
f
(
"repeated_import_message"
),
0
])[
importD
]);
Assert
.
AreEqual
(
nestedBar
,
message
[
f
(
"repeated_nested_enum"
),
0
]);
Assert
.
AreEqual
(
nestedBar
,
message
[
f
(
"repeated_nested_enum"
),
0
]);
Assert
.
AreEqual
(
foreignBar
,
message
[
f
(
"repeated_foreign_enum"
),
0
]);
Assert
.
AreEqual
(
foreignBar
,
message
[
f
(
"repeated_foreign_enum"
),
0
]);
Assert
.
AreEqual
(
importBar
,
message
[
f
(
"repeated_import_enum"
),
0
]);
Assert
.
AreEqual
(
importBar
,
message
[
f
(
"repeated_import_enum"
),
0
]);
Assert
.
AreEqual
(
"224"
,
message
[
f
(
"repeated_string_piece"
),
0
]);
Assert
.
AreEqual
(
"224"
,
message
[
f
(
"repeated_string_piece"
),
0
]);
Assert
.
AreEqual
(
"225"
,
message
[
f
(
"repeated_cord"
),
0
]);
Assert
.
AreEqual
(
"225"
,
message
[
f
(
"repeated_cord"
),
0
]);
Assert
.
AreEqual
(
501
,
message
[
f
(
"repeated_int32"
),
1
]);
Assert
.
AreEqual
(
501
,
message
[
f
(
"repeated_int32"
),
1
]);
Assert
.
AreEqual
(
502L
,
message
[
f
(
"repeated_int64"
),
1
]);
Assert
.
AreEqual
(
502L
,
message
[
f
(
"repeated_int64"
),
1
]);
Assert
.
AreEqual
(
503U
,
message
[
f
(
"repeated_uint32"
),
1
]);
Assert
.
AreEqual
(
503U
,
message
[
f
(
"repeated_uint32"
),
1
]);
Assert
.
AreEqual
(
504U
L
,
message
[
f
(
"repeated_uint64"
),
1
]);
Assert
.
AreEqual
(
504U
L
,
message
[
f
(
"repeated_uint64"
),
1
]);
Assert
.
AreEqual
(
505
,
message
[
f
(
"repeated_sint32"
),
1
]);
Assert
.
AreEqual
(
505
,
message
[
f
(
"repeated_sint32"
),
1
]);
Assert
.
AreEqual
(
506L
,
message
[
f
(
"repeated_sint64"
),
1
]);
Assert
.
AreEqual
(
506L
,
message
[
f
(
"repeated_sint64"
),
1
]);
Assert
.
AreEqual
(
507U
,
message
[
f
(
"repeated_fixed32"
),
1
]);
Assert
.
AreEqual
(
507U
,
message
[
f
(
"repeated_fixed32"
),
1
]);
Assert
.
AreEqual
(
508U
L
,
message
[
f
(
"repeated_fixed64"
),
1
]);
Assert
.
AreEqual
(
508U
L
,
message
[
f
(
"repeated_fixed64"
),
1
]);
Assert
.
AreEqual
(
509
,
message
[
f
(
"repeated_sfixed32"
),
1
]);
Assert
.
AreEqual
(
509
,
message
[
f
(
"repeated_sfixed32"
),
1
]);
Assert
.
AreEqual
(
510L
,
message
[
f
(
"repeated_sfixed64"
),
1
]);
Assert
.
AreEqual
(
510L
,
message
[
f
(
"repeated_sfixed64"
),
1
]);
Assert
.
AreEqual
(
511F
,
message
[
f
(
"repeated_float"
),
1
]);
Assert
.
AreEqual
(
511F
,
message
[
f
(
"repeated_float"
),
1
]);
Assert
.
AreEqual
(
512D
,
message
[
f
(
"repeated_double"
),
1
]);
Assert
.
AreEqual
(
512D
,
message
[
f
(
"repeated_double"
),
1
]);
Assert
.
AreEqual
(
true
,
message
[
f
(
"repeated_bool"
),
1
]);
Assert
.
AreEqual
(
true
,
message
[
f
(
"repeated_bool"
),
1
]);
Assert
.
AreEqual
(
"515"
,
message
[
f
(
"repeated_string"
),
1
]);
Assert
.
AreEqual
(
"515"
,
message
[
f
(
"repeated_string"
),
1
]);
Assert
.
AreEqual
(
TestUtil
.
ToBytes
(
"516"
),
message
[
f
(
"repeated_bytes"
),
1
]);
Assert
.
AreEqual
(
TestUtil
.
ToBytes
(
"516"
),
message
[
f
(
"repeated_bytes"
),
1
]);
Assert
.
AreEqual
(
517
,((
IMessage
)
message
[
f
(
"repeatedgroup"
),
1
])[
repeatedGroupA
]);
Assert
.
AreEqual
(
517
,
((
IMessage
)
message
[
f
(
"repeatedgroup"
),
1
])[
repeatedGroupA
]);
Assert
.
AreEqual
(
518
,((
IMessage
)
message
[
f
(
"repeated_nested_message"
),
1
])[
nestedB
]);
Assert
.
AreEqual
(
518
,
((
IMessage
)
message
[
f
(
"repeated_nested_message"
),
1
])[
nestedB
]);
Assert
.
AreEqual
(
519
,((
IMessage
)
message
[
f
(
"repeated_foreign_message"
),
1
])[
foreignC
]);
Assert
.
AreEqual
(
519
,
((
IMessage
)
message
[
f
(
"repeated_foreign_message"
),
1
])[
foreignC
]);
Assert
.
AreEqual
(
520
,((
IMessage
)
message
[
f
(
"repeated_import_message"
),
1
])[
importD
]);
Assert
.
AreEqual
(
520
,
((
IMessage
)
message
[
f
(
"repeated_import_message"
),
1
])[
importD
]);
Assert
.
AreEqual
(
nestedFoo
,
message
[
f
(
"repeated_nested_enum"
),
1
]);
Assert
.
AreEqual
(
nestedFoo
,
message
[
f
(
"repeated_nested_enum"
),
1
]);
Assert
.
AreEqual
(
foreignFoo
,
message
[
f
(
"repeated_foreign_enum"
),
1
]);
Assert
.
AreEqual
(
foreignFoo
,
message
[
f
(
"repeated_foreign_enum"
),
1
]);
Assert
.
AreEqual
(
importFoo
,
message
[
f
(
"repeated_import_enum"
),
1
]);
Assert
.
AreEqual
(
importFoo
,
message
[
f
(
"repeated_import_enum"
),
1
]);
Assert
.
AreEqual
(
"524"
,
message
[
f
(
"repeated_string_piece"
),
1
]);
Assert
.
AreEqual
(
"524"
,
message
[
f
(
"repeated_string_piece"
),
1
]);
Assert
.
AreEqual
(
"525"
,
message
[
f
(
"repeated_cord"
),
1
]);
Assert
.
AreEqual
(
"525"
,
message
[
f
(
"repeated_cord"
),
1
]);
...
@@ -842,5 +852,82 @@ namespace Google.ProtocolBuffers {
...
@@ -842,5 +852,82 @@ namespace Google.ProtocolBuffers {
new
TestAllTypes
.
Types
.
NestedMessage
.
Builder
{
Bb
=
218
}.
Build
());
new
TestAllTypes
.
Types
.
NestedMessage
.
Builder
{
Bb
=
218
}.
Build
());
TestUtil
.
AssertArgumentNullException
(()
=>
builder
.
SetRepeatedField
(
f
(
"repeated_nested_message"
),
0
,
null
));
TestUtil
.
AssertArgumentNullException
(()
=>
builder
.
SetRepeatedField
(
f
(
"repeated_nested_message"
),
0
,
null
));
}
}
public
void
SetPackedFieldsViaReflection
(
IBuilder
message
)
{
message
.
WeakAddRepeatedField
(
f
(
"packed_int32"
),
601
);
message
.
WeakAddRepeatedField
(
f
(
"packed_int64"
),
602L
);
message
.
WeakAddRepeatedField
(
f
(
"packed_uint32"
),
603U
);
message
.
WeakAddRepeatedField
(
f
(
"packed_uint64"
),
604U
L
);
message
.
WeakAddRepeatedField
(
f
(
"packed_sint32"
),
605
);
message
.
WeakAddRepeatedField
(
f
(
"packed_sint64"
),
606L
);
message
.
WeakAddRepeatedField
(
f
(
"packed_fixed32"
),
607U
);
message
.
WeakAddRepeatedField
(
f
(
"packed_fixed64"
),
608U
L
);
message
.
WeakAddRepeatedField
(
f
(
"packed_sfixed32"
),
609
);
message
.
WeakAddRepeatedField
(
f
(
"packed_sfixed64"
),
610L
);
message
.
WeakAddRepeatedField
(
f
(
"packed_float"
),
611F
);
message
.
WeakAddRepeatedField
(
f
(
"packed_double"
),
612D
);
message
.
WeakAddRepeatedField
(
f
(
"packed_bool"
),
true
);
message
.
WeakAddRepeatedField
(
f
(
"packed_enum"
),
foreignBar
);
// Add a second one of each field.
message
.
WeakAddRepeatedField
(
f
(
"packed_int32"
),
701
);
message
.
WeakAddRepeatedField
(
f
(
"packed_int64"
),
702L
);
message
.
WeakAddRepeatedField
(
f
(
"packed_uint32"
),
703U
);
message
.
WeakAddRepeatedField
(
f
(
"packed_uint64"
),
704U
L
);
message
.
WeakAddRepeatedField
(
f
(
"packed_sint32"
),
705
);
message
.
WeakAddRepeatedField
(
f
(
"packed_sint64"
),
706L
);
message
.
WeakAddRepeatedField
(
f
(
"packed_fixed32"
),
707U
);
message
.
WeakAddRepeatedField
(
f
(
"packed_fixed64"
),
708U
L
);
message
.
WeakAddRepeatedField
(
f
(
"packed_sfixed32"
),
709
);
message
.
WeakAddRepeatedField
(
f
(
"packed_sfixed64"
),
710L
);
message
.
WeakAddRepeatedField
(
f
(
"packed_float"
),
711F
);
message
.
WeakAddRepeatedField
(
f
(
"packed_double"
),
712D
);
message
.
WeakAddRepeatedField
(
f
(
"packed_bool"
),
false
);
message
.
WeakAddRepeatedField
(
f
(
"packed_enum"
),
foreignBaz
);
}
public
void
AssertPackedFieldsSetViaReflection
(
IMessage
message
)
{
Assert
.
AreEqual
(
2
,
message
.
GetRepeatedFieldCount
(
f
(
"packed_int32"
)));
Assert
.
AreEqual
(
2
,
message
.
GetRepeatedFieldCount
(
f
(
"packed_int64"
)));
Assert
.
AreEqual
(
2
,
message
.
GetRepeatedFieldCount
(
f
(
"packed_uint32"
)));
Assert
.
AreEqual
(
2
,
message
.
GetRepeatedFieldCount
(
f
(
"packed_uint64"
)));
Assert
.
AreEqual
(
2
,
message
.
GetRepeatedFieldCount
(
f
(
"packed_sint32"
)));
Assert
.
AreEqual
(
2
,
message
.
GetRepeatedFieldCount
(
f
(
"packed_sint64"
)));
Assert
.
AreEqual
(
2
,
message
.
GetRepeatedFieldCount
(
f
(
"packed_fixed32"
)));
Assert
.
AreEqual
(
2
,
message
.
GetRepeatedFieldCount
(
f
(
"packed_fixed64"
)));
Assert
.
AreEqual
(
2
,
message
.
GetRepeatedFieldCount
(
f
(
"packed_sfixed32"
)));
Assert
.
AreEqual
(
2
,
message
.
GetRepeatedFieldCount
(
f
(
"packed_sfixed64"
)));
Assert
.
AreEqual
(
2
,
message
.
GetRepeatedFieldCount
(
f
(
"packed_float"
)));
Assert
.
AreEqual
(
2
,
message
.
GetRepeatedFieldCount
(
f
(
"packed_double"
)));
Assert
.
AreEqual
(
2
,
message
.
GetRepeatedFieldCount
(
f
(
"packed_bool"
)));
Assert
.
AreEqual
(
2
,
message
.
GetRepeatedFieldCount
(
f
(
"packed_enum"
)));
Assert
.
AreEqual
(
601
,
message
[
f
(
"packed_int32"
),
0
]);
Assert
.
AreEqual
(
602L
,
message
[
f
(
"packed_int64"
),
0
]);
Assert
.
AreEqual
(
603
,
message
[
f
(
"packed_uint32"
),
0
]);
Assert
.
AreEqual
(
604L
,
message
[
f
(
"packed_uint64"
),
0
]);
Assert
.
AreEqual
(
605
,
message
[
f
(
"packed_sint32"
),
0
]);
Assert
.
AreEqual
(
606L
,
message
[
f
(
"packed_sint64"
),
0
]);
Assert
.
AreEqual
(
607
,
message
[
f
(
"packed_fixed32"
),
0
]);
Assert
.
AreEqual
(
608L
,
message
[
f
(
"packed_fixed64"
),
0
]);
Assert
.
AreEqual
(
609
,
message
[
f
(
"packed_sfixed32"
),
0
]);
Assert
.
AreEqual
(
610L
,
message
[
f
(
"packed_sfixed64"
),
0
]);
Assert
.
AreEqual
(
611F
,
message
[
f
(
"packed_float"
),
0
]);
Assert
.
AreEqual
(
612D
,
message
[
f
(
"packed_double"
),
0
]);
Assert
.
AreEqual
(
true
,
message
[
f
(
"packed_bool"
),
0
]);
Assert
.
AreEqual
(
foreignBar
,
message
[
f
(
"packed_enum"
),
0
]);
Assert
.
AreEqual
(
701
,
message
[
f
(
"packed_int32"
),
1
]);
Assert
.
AreEqual
(
702L
,
message
[
f
(
"packed_int64"
),
1
]);
Assert
.
AreEqual
(
703
,
message
[
f
(
"packed_uint32"
),
1
]);
Assert
.
AreEqual
(
704L
,
message
[
f
(
"packed_uint64"
),
1
]);
Assert
.
AreEqual
(
705
,
message
[
f
(
"packed_sint32"
),
1
]);
Assert
.
AreEqual
(
706L
,
message
[
f
(
"packed_sint64"
),
1
]);
Assert
.
AreEqual
(
707
,
message
[
f
(
"packed_fixed32"
),
1
]);
Assert
.
AreEqual
(
708L
,
message
[
f
(
"packed_fixed64"
),
1
]);
Assert
.
AreEqual
(
709
,
message
[
f
(
"packed_sfixed32"
),
1
]);
Assert
.
AreEqual
(
710L
,
message
[
f
(
"packed_sfixed64"
),
1
]);
Assert
.
AreEqual
(
711F
,
message
[
f
(
"packed_float"
),
1
]);
Assert
.
AreEqual
(
712D
,
message
[
f
(
"packed_double"
),
1
]);
Assert
.
AreEqual
(
false
,
message
[
f
(
"packed_bool"
),
1
]);
Assert
.
AreEqual
(
foreignBaz
,
message
[
f
(
"packed_enum"
),
1
]);
}
}
}
}
}
src/ProtocolBuffers.Test/TestProtos/UnitTestCustomOptionsProtoFile.cs
View file @
25a28580
...
@@ -17,101 +17,97 @@ namespace Google.ProtocolBuffers.TestProtos {
...
@@ -17,101 +17,97 @@ namespace Google.ProtocolBuffers.TestProtos {
"Ci1nb29nbGUvcHJvdG9idWYvdW5pdHRlc3RfY3VzdG9tX29wdGlvbnMucHJv"
+
"Ci1nb29nbGUvcHJvdG9idWYvdW5pdHRlc3RfY3VzdG9tX29wdGlvbnMucHJv"
+
"dG8SEXByb3RvYnVmX3VuaXR0ZXN0GiRnb29nbGUvcHJvdG9idWYvY3NoYXJw"
+
"dG8SEXByb3RvYnVmX3VuaXR0ZXN0GiRnb29nbGUvcHJvdG9idWYvY3NoYXJw"
+
"X29wdGlvbnMucHJvdG8aIGdvb2dsZS9wcm90b2J1Zi9kZXNjcmlwdG9yLnBy"
+
"X29wdGlvbnMucHJvdG8aIGdvb2dsZS9wcm90b2J1Zi9kZXNjcmlwdG9yLnBy"
+
"b3RvIpoBChxUZXN0TWVzc2FnZVdpdGhDdXN0b21PcHRpb25zEioKBmZpZWxk"
+
"b3RvIoYBChxUZXN0TWVzc2FnZVdpdGhDdXN0b21PcHRpb25zEh4KBmZpZWxk"
+
"MRgBIAEoCUIaCAHB4MMdLeF1CgIAAADB4MMdLeF1CgIAAAAiPAoGQW5FbnVt"
+
"MRgBIAEoCUIOCAHB4MMdLeF1CgIAAAAiNAoGQW5FbnVtEg8KC0FORU5VTV9W"
+
"Eg8KC0FORU5VTV9WQUwxEAESDwoLQU5FTlVNX1ZBTDIQAhoQxfbJHev8///F"
+
"QUwxEAESDwoLQU5FTlVNX1ZBTDIQAhoIxfbJHev8//86EAgA4OnCHcj/////"
+
"9skd6/z//zoQCADg6cIdyP//////////ASIYChZDdXN0b21PcHRpb25Gb29S"
+
"/////wEiGAoWQ3VzdG9tT3B0aW9uRm9vUmVxdWVzdCIZChdDdXN0b21PcHRp"
+
"ZXF1ZXN0IhkKF0N1c3RvbU9wdGlvbkZvb1Jlc3BvbnNlIm0KGkR1bW15TWVz"
+
"b25Gb29SZXNwb25zZSJtChpEdW1teU1lc3NhZ2VDb250YWluaW5nRW51bSJP"
+
"c2FnZUNvbnRhaW5pbmdFbnVtIk8KDFRlc3RFbnVtVHlwZRIaChZURVNUX09Q"
+
"CgxUZXN0RW51bVR5cGUSGgoWVEVTVF9PUFRJT05fRU5VTV9UWVBFMRAWEiMK"
+
"VElPTl9FTlVNX1RZUEUxEBYSIwoWVEVTVF9PUFRJT05fRU5VTV9UWVBFMhDp"
+
"FlRFU1RfT1BUSU9OX0VOVU1fVFlQRTIQ6f//////////ASIhCh9EdW1teU1l"
+
"//////////8BIiEKH0R1bW15TWVzc2FnZUludmFsaWRBc09wdGlvblR5cGUi"
+
"c3NhZ2VJbnZhbGlkQXNPcHRpb25UeXBlIooBChxDdXN0b21PcHRpb25NaW5J"
+
"swEKHEN1c3RvbU9wdGlvbk1pbkludGVnZXJWYWx1ZXM6kgGZ1qgdAAAAAAAA"
+
"bnRlZ2VyVmFsdWVzOmqZ1qgdAAAAAAAAAICtja8dAAAAgJHurx0AAAAAAAAA"
+
"AICZ1qgdAAAAAAAAAICtja8dAAAAgK2Nrx0AAACAke6vHQAAAAAAAAAAke6v"
+
"AJ31rx0AAAAA+JewHf///////////wGAxLAd/////w/49bAdAICTsh0AsLyy"
+
"HQAAAAAAAAAAnfWvHQAAAACd9a8dAAAAAPiXsB3///////////8BgMSwHf//"
+
"HYCAgICAgICAgAHoxrIdgICAgPj/////AdDesh0AIpEBChxDdXN0b21PcHRp"
+
"//8P+PWwHQCAk7IdALC8sh2AgICAgICAgIAB6MayHYCAgID4/////wHQ3rId"
+
"b25NYXhJbnRlZ2VyVmFsdWVzOnGZ1qgd/////////3+tja8d////f5Hurx3/"
+
"ACK6AQocQ3VzdG9tT3B0aW9uTWF4SW50ZWdlclZhbHVlczqZAZnWqB3/////"
+
"/////////531rx3/////+JewHf7//////////wGAxLAd/v///w/49bAd////"
+
"////f5nWqB3/////////f62Nrx3///9/rY2vHf///3+R7q8d//////////+R"
+
"////////AYCTsh3/////D7C8sh3//////////3/oxrId/////wfQ3rIdASJu"
+
"7q8d//////////+d9a8d/////531rx3/////+JewHf7//////////wGAxLAd"
+
"ChdDdXN0b21PcHRpb25PdGhlclZhbHVlczpTiNmiHen//////////wGy2aId"
+
"/v///w/49bAd////////////AYCTsh3/////D7C8sh3//////////3/oxrId"
+
"C0hlbGxvAFdvcmxkqtyiHQ5IZWxsbywgIldvcmxkIuncoh37WYxCysDzP/Xf"
+
"/////wfQ3rIdASKCAQoXQ3VzdG9tT3B0aW9uT3RoZXJWYWx1ZXM6Z4jZoh3p"
+
"ox3nh0VB6MayHZz//////////wEiNAocU2V0dGluZ1JlYWxzRnJvbVBvc2l0"
+
"//////////8BstmiHQtIZWxsbwBXb3JsZKrcoh0OSGVsbG8sICJXb3JsZCLp"
+
"aXZlSW50czoU6dyiHQAAAAAAQGNA9d+jHQAAQEEiNAocU2V0dGluZ1JlYWxz"
+
"3KId+1mMQsrA8z/p3KId+1mMQsrA8z/136Md54dFQfXfox3nh0VB6MayHZz/"
+
"RnJvbU5lZ2F0aXZlSW50czoU6dyiHQAAAAAAQGPA9d+jHQAAQMEiKwoSQ29t"
+
"/////////wEiSAocU2V0dGluZ1JlYWxzRnJvbVBvc2l0aXZlSW50czoo6dyi"
+
"cGxleE9wdGlvblR5cGUxEgsKA2ZvbxgBIAEoBSoICGQQgICAgAIiwQIKEkNv"
+
"HQAAAAAAQGNA6dyiHQAAAAAAQGNA9d+jHQAAQEH136MdAABAQSJIChxTZXR0"
+
"bXBsZXhPcHRpb25UeXBlMhIyCgNiYXIYASABKAsyJS5wcm90b2J1Zl91bml0"
+
"aW5nUmVhbHNGcm9tTmVnYXRpdmVJbnRzOijp3KIdAAAAAABAY8Dp3KIdAAAA"
+
"dGVzdC5Db21wbGV4T3B0aW9uVHlwZTESCwoDYmF6GAIgASgFEkYKBGZyZWQY"
+
"AABAY8D136MdAABAwfXfox0AAEDBIisKEkNvbXBsZXhPcHRpb25UeXBlMRIL"
+
"AyABKAsyOC5wcm90b2J1Zl91bml0dGVzdC5Db21wbGV4T3B0aW9uVHlwZTIu"
+
"CgNmb28YASABKAUqCAhkEICAgIACIsECChJDb21wbGV4T3B0aW9uVHlwZTIS"
+
"Q29tcGxleE9wdGlvblR5cGU0GpcBChJDb21wbGV4T3B0aW9uVHlwZTQSDQoF"
+
"MgoDYmFyGAEgASgLMiUucHJvdG9idWZfdW5pdHRlc3QuQ29tcGxleE9wdGlv"
+
"d2FsZG8YASABKAUycgoMY29tcGxleF9vcHQ0Eh8uZ29vZ2xlLnByb3RvYnVm"
+
"blR5cGUxEgsKA2JhehgCIAEoBRJGCgRmcmVkGAMgASgLMjgucHJvdG9idWZf"
+
"Lk1lc3NhZ2VPcHRpb25zGIr10QMgASgLMjgucHJvdG9idWZfdW5pdHRlc3Qu"
+
"dW5pdHRlc3QuQ29tcGxleE9wdGlvblR5cGUyLkNvbXBsZXhPcHRpb25UeXBl"
+
"Q29tcGxleE9wdGlvblR5cGUyLkNvbXBsZXhPcHRpb25UeXBlNCoICGQQgICA"
+
"NBqXAQoSQ29tcGxleE9wdGlvblR5cGU0Eg0KBXdhbGRvGAEgASgFMnIKDGNv"
+
"gAIinAEKEkNvbXBsZXhPcHRpb25UeXBlMxILCgNxdXgYASABKAUSVAoSY29t"
+
"bXBsZXhfb3B0NBIfLmdvb2dsZS5wcm90b2J1Zi5NZXNzYWdlT3B0aW9ucxiK"
+
"cGxleG9wdGlvbnR5cGU1GAIgASgKMjgucHJvdG9idWZfdW5pdHRlc3QuQ29t"
+
"9dEDIAEoCzI4LnByb3RvYnVmX3VuaXR0ZXN0LkNvbXBsZXhPcHRpb25UeXBl"
+
"cGxleE9wdGlvblR5cGUzLkNvbXBsZXhPcHRpb25UeXBlNRojChJDb21wbGV4"
+
"Mi5Db21wbGV4T3B0aW9uVHlwZTQqCAhkEICAgIACIpwBChJDb21wbGV4T3B0"
+
"T3B0aW9uVHlwZTUSDQoFcGx1Z2gYAyABKAUiHwoLQ29tcGxleE9wdDYSEAoF"
+
"aW9uVHlwZTMSCwoDcXV4GAEgASgFElQKEmNvbXBsZXhvcHRpb250eXBlNRgC"
+
"eHl6enkY37/PAyABKAUi0AEKFVZhcmlvdXNDb21wbGV4T3B0aW9uczq2AePc"
+
"IAEoCjI4LnByb3RvYnVmX3VuaXR0ZXN0LkNvbXBsZXhPcHRpb25UeXBlMy5D"
+
"/Bz4/fscGOTc/BzSqI8dAwizD/rekB0CCAn63pAdBBMYFhSq/ZAdAxDbB6r9"
+
"b21wbGV4T3B0aW9uVHlwZTUaIwoSQ29tcGxleE9wdGlvblR5cGU1Eg0KBXBs"
+
"kB0G+OaXHY4Fqv2QHQUKAwjnBar9kB0ICgbYhZ4dzw+q/ZAdCgoIkvWdHQMI"
+
"dWdoGAMgASgFIh8KC0NvbXBsZXhPcHQ2EhAKBXh5enp5GN+/zwMgASgFItAB"
+
"2A+q/ZAdCMKslx0DCOUFqv2QHQvCrJcdBtiFnh3OD6r9kB0NwqyXHQiS9Z0d"
+
"ChVWYXJpb3VzQ29tcGxleE9wdGlvbnM6tgHj3Pwc+P37HBjk3Pwc0qiPHQMI"
+
"AwjJEKr9kB0FGgMIwQKi4pUdAggqouKVHQbYhZ4dxAKi4pUdCJL1nR0DCOwG"
+
"sw/63pAdAggJ+t6QHQQTGBYUqv2QHQMQ2weq/ZAdBvjmlx2OBar9kB0FCgMI"
+
"KjYKCk1ldGhvZE9wdDESEwoPTUVUSE9ET1BUMV9WQUwxEAESEwoPTUVUSE9E"
+
"5wWq/ZAdCAoG2IWeHc8Pqv2QHQoKCJL1nR0DCNgPqv2QHQjCrJcdAwjlBar9"
+
"T1BUMV9WQUwyEAIyjgEKHFRlc3RTZXJ2aWNlV2l0aEN1c3RvbU9wdGlvbnMS"
+
"kB0LwqyXHQbYhZ4dzg+q/ZAdDcKslx0IkvWdHQMIyRCq/ZAdBRoDCMECouKV"
+
"YwoDRm9vEikucHJvdG9idWZfdW5pdHRlc3QuQ3VzdG9tT3B0aW9uRm9vUmVx"
+
"HQIIKqLilR0G2IWeHcQCouKVHQiS9Z0dAwjsBio2CgpNZXRob2RPcHQxEhMK"
+
"dWVzdBoqLnByb3RvYnVmX3VuaXR0ZXN0LkN1c3RvbU9wdGlvbkZvb1Jlc3Bv"
+
"D01FVEhPRE9QVDFfVkFMMRABEhMKD01FVEhPRE9QVDFfVkFMMhACMo4BChxU"
+
"bnNlIgXg+oweAhoJkLKLHtPbgMtJOjIKCWZpbGVfb3B0MRIcLmdvb2dsZS5w"
+
"ZXN0U2VydmljZVdpdGhDdXN0b21PcHRpb25zEmMKA0ZvbxIpLnByb3RvYnVm"
+
"cm90b2J1Zi5GaWxlT3B0aW9ucxiOndgDIAEoBDo4CgxtZXNzYWdlX29wdDES"
+
"X3VuaXR0ZXN0LkN1c3RvbU9wdGlvbkZvb1JlcXVlc3QaKi5wcm90b2J1Zl91"
+
"Hy5nb29nbGUucHJvdG9idWYuTWVzc2FnZU9wdGlvbnMYnK3YAyABKAU6NAoK"
+
"bml0dGVzdC5DdXN0b21PcHRpb25Gb29SZXNwb25zZSIF4PqMHgIaCZCyix7T"
+
"ZmllbGRfb3B0MRIdLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMYiLzY"
+
"24DLSToyCglmaWxlX29wdDESHC5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlv"
+
"AyABKAY6OAoKZmllbGRfb3B0MhIdLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE9w"
+
"bnMYjp3YAyABKAQ6OAoMbWVzc2FnZV9vcHQxEh8uZ29vZ2xlLnByb3RvYnVm"
+
"dGlvbnMYuaHZAyABKAU6AjQyOjIKCWVudW1fb3B0MRIcLmdvb2dsZS5wcm90"
+
"Lk1lc3NhZ2VPcHRpb25zGJyt2AMgASgFOjQKCmZpZWxkX29wdDESHS5nb29n"
+
"b2J1Zi5FbnVtT3B0aW9ucxjontkDIAEoDzo4CgxzZXJ2aWNlX29wdDESHy5n"
+
"bGUucHJvdG9idWYuRmllbGRPcHRpb25zGIi82AMgASgGOjgKCmZpZWxkX29w"
+
"b29nbGUucHJvdG9idWYuU2VydmljZU9wdGlvbnMYorbhAyABKBI6VQoLbWV0"
+
"dDISHS5nb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zGLmh2QMgASgFOgI0"
+
"aG9kX29wdDESHi5nb29nbGUucHJvdG9idWYuTWV0aG9kT3B0aW9ucxisz+ED"
+
"MjoyCgllbnVtX29wdDESHC5nb29nbGUucHJvdG9idWYuRW51bU9wdGlvbnMY"
+
"IAEoDjIdLnByb3RvYnVmX3VuaXR0ZXN0Lk1ldGhvZE9wdDE6NAoIYm9vbF9v"
+
"6J7ZAyABKA86OAoMc2VydmljZV9vcHQxEh8uZ29vZ2xlLnByb3RvYnVmLlNl"
+
"cHQSHy5nb29nbGUucHJvdG9idWYuTWVzc2FnZU9wdGlvbnMY6qvWAyABKAg6"
+
"cnZpY2VPcHRpb25zGKK24QMgASgSOlUKC21ldGhvZF9vcHQxEh4uZ29vZ2xl"
+
"NQoJaW50MzJfb3B0Eh8uZ29vZ2xlLnByb3RvYnVmLk1lc3NhZ2VPcHRpb25z"
+
"LnByb3RvYnVmLk1ldGhvZE9wdGlvbnMYrM/hAyABKA4yHS5wcm90b2J1Zl91"
+
"GO2o1gMgASgFOjUKCWludDY0X29wdBIfLmdvb2dsZS5wcm90b2J1Zi5NZXNz"
+
"bml0dGVzdC5NZXRob2RPcHQxOjQKCGJvb2xfb3B0Eh8uZ29vZ2xlLnByb3Rv"
+
"YWdlT3B0aW9ucxjGp9YDIAEoAzo2Cgp1aW50MzJfb3B0Eh8uZ29vZ2xlLnBy"
+
"YnVmLk1lc3NhZ2VPcHRpb25zGOqr1gMgASgIOjUKCWludDMyX29wdBIfLmdv"
+
"b3RvYnVmLk1lc3NhZ2VPcHRpb25zGLCi1gMgASgNOjYKCnVpbnQ2NF9vcHQS"
+
"b2dsZS5wcm90b2J1Zi5NZXNzYWdlT3B0aW9ucxjtqNYDIAEoBTo1CglpbnQ2"
+
"Hy5nb29nbGUucHJvdG9idWYuTWVzc2FnZU9wdGlvbnMY347WAyABKAQ6NgoK"
+
"NF9vcHQSHy5nb29nbGUucHJvdG9idWYuTWVzc2FnZU9wdGlvbnMYxqfWAyAB"
+
"c2ludDMyX29wdBIfLmdvb2dsZS5wcm90b2J1Zi5NZXNzYWdlT3B0aW9ucxjA"
+
"KAM6NgoKdWludDMyX29wdBIfLmdvb2dsZS5wcm90b2J1Zi5NZXNzYWdlT3B0"
+
"iNYDIAEoETo2CgpzaW50NjRfb3B0Eh8uZ29vZ2xlLnByb3RvYnVmLk1lc3Nh"
+
"aW9ucxiwotYDIAEoDTo2Cgp1aW50NjRfb3B0Eh8uZ29vZ2xlLnByb3RvYnVm"
+
"Z2VPcHRpb25zGP+C1gMgASgSOjcKC2ZpeGVkMzJfb3B0Eh8uZ29vZ2xlLnBy"
+
"Lk1lc3NhZ2VPcHRpb25zGN+O1gMgASgEOjYKCnNpbnQzMl9vcHQSHy5nb29n"
+
"b3RvYnVmLk1lc3NhZ2VPcHRpb25zGNP+1QMgASgHOjcKC2ZpeGVkNjRfb3B0"
+
"bGUucHJvdG9idWYuTWVzc2FnZU9wdGlvbnMYwIjWAyABKBE6NgoKc2ludDY0"
+
"Eh8uZ29vZ2xlLnByb3RvYnVmLk1lc3NhZ2VPcHRpb25zGOL91QMgASgGOjgK"
+
"X29wdBIfLmdvb2dsZS5wcm90b2J1Zi5NZXNzYWdlT3B0aW9ucxj/gtYDIAEo"
+
"DHNmaXhlZDMyX29wdBIfLmdvb2dsZS5wcm90b2J1Zi5NZXNzYWdlT3B0aW9u"
+
"Ejo3CgtmaXhlZDMyX29wdBIfLmdvb2dsZS5wcm90b2J1Zi5NZXNzYWdlT3B0"
+
"cxjV8dUDIAEoDzo4CgxzZml4ZWQ2NF9vcHQSHy5nb29nbGUucHJvdG9idWYu"
+
"aW9ucxjT/tUDIAEoBzo3CgtmaXhlZDY0X29wdBIfLmdvb2dsZS5wcm90b2J1"
+
"TWVzc2FnZU9wdGlvbnMY44rVAyABKBA6NQoJZmxvYXRfb3B0Eh8uZ29vZ2xl"
+
"Zi5NZXNzYWdlT3B0aW9ucxji/dUDIAEoBjo4CgxzZml4ZWQzMl9vcHQSHy5n"
+
"LnByb3RvYnVmLk1lc3NhZ2VPcHRpb25zGP671AMgASgCOjYKCmRvdWJsZV9v"
+
"b29nbGUucHJvdG9idWYuTWVzc2FnZU9wdGlvbnMY1fHVAyABKA86OAoMc2Zp"
+
"cHQSHy5nb29nbGUucHJvdG9idWYuTWVzc2FnZU9wdGlvbnMYzavUAyABKAE6"
+
"eGVkNjRfb3B0Eh8uZ29vZ2xlLnByb3RvYnVmLk1lc3NhZ2VPcHRpb25zGOOK"
+
"NgoKc3RyaW5nX29wdBIfLmdvb2dsZS5wcm90b2J1Zi5NZXNzYWdlT3B0aW9u"
+
"1QMgASgQOjUKCWZsb2F0X29wdBIfLmdvb2dsZS5wcm90b2J1Zi5NZXNzYWdl"
+
"cxjFq9QDIAEoCTo1CglieXRlc19vcHQSHy5nb29nbGUucHJvdG9idWYuTWVz"
+
"T3B0aW9ucxj+u9QDIAEoAjo2Cgpkb3VibGVfb3B0Eh8uZ29vZ2xlLnByb3Rv"
+
"c2FnZU9wdGlvbnMYlqvUAyABKAw6cAoIZW51bV9vcHQSHy5nb29nbGUucHJv"
+
"YnVmLk1lc3NhZ2VPcHRpb25zGM2r1AMgASgBOjYKCnN0cmluZ19vcHQSHy5n"
+
"dG9idWYuTWVzc2FnZU9wdGlvbnMYkavUAyABKA4yOi5wcm90b2J1Zl91bml0"
+
"b29nbGUucHJvdG9idWYuTWVzc2FnZU9wdGlvbnMYxavUAyABKAk6NQoJYnl0"
+
"dGVzdC5EdW1teU1lc3NhZ2VDb250YWluaW5nRW51bS5UZXN0RW51bVR5cGU6"
+
"ZXNfb3B0Eh8uZ29vZ2xlLnByb3RvYnVmLk1lc3NhZ2VPcHRpb25zGJar1AMg"
+
"cAoQbWVzc2FnZV90eXBlX29wdBIfLmdvb2dsZS5wcm90b2J1Zi5NZXNzYWdl"
+
"ASgMOnAKCGVudW1fb3B0Eh8uZ29vZ2xlLnByb3RvYnVmLk1lc3NhZ2VPcHRp"
+
"T3B0aW9ucxiv8tMDIAEoCzIyLnByb3RvYnVmX3VuaXR0ZXN0LkR1bW15TWVz"
+
"b25zGJGr1AMgASgOMjoucHJvdG9idWZfdW5pdHRlc3QuRHVtbXlNZXNzYWdl"
+
"c2FnZUludmFsaWRBc09wdGlvblR5cGU6NgoEcXV1eBIlLnByb3RvYnVmX3Vu"
+
"Q29udGFpbmluZ0VudW0uVGVzdEVudW1UeXBlOnAKEG1lc3NhZ2VfdHlwZV9v"
+
"aXR0ZXN0LkNvbXBsZXhPcHRpb25UeXBlMRjb4NMDIAEoBTpeCgVjb3JnZRIl"
+
"cHQSHy5nb29nbGUucHJvdG9idWYuTWVzc2FnZU9wdGlvbnMYr/LTAyABKAsy"
+
"LnByb3RvYnVmX3VuaXR0ZXN0LkNvbXBsZXhPcHRpb25UeXBlMRjS3tMDIAEo"
+
"Mi5wcm90b2J1Zl91bml0dGVzdC5EdW1teU1lc3NhZ2VJbnZhbGlkQXNPcHRp"
+
"CzIlLnByb3RvYnVmX3VuaXR0ZXN0LkNvbXBsZXhPcHRpb25UeXBlMzo4CgZn"
+
"b25UeXBlOjYKBHF1dXgSJS5wcm90b2J1Zl91bml0dGVzdC5Db21wbGV4T3B0"
+
"cmF1bHQSJS5wcm90b2J1Zl91bml0dGVzdC5Db21wbGV4T3B0aW9uVHlwZTIY"
+
"aW9uVHlwZTEY2+DTAyABKAU6XgoFY29yZ2USJS5wcm90b2J1Zl91bml0dGVz"
+
"7/zSAyABKAU6XwoGZ2FycGx5EiUucHJvdG9idWZfdW5pdHRlc3QuQ29tcGxl"
+
"dC5Db21wbGV4T3B0aW9uVHlwZTEY0t7TAyABKAsyJS5wcm90b2J1Zl91bml0"
+
"eE9wdGlvblR5cGUyGMj10gMgASgLMiUucHJvdG9idWZfdW5pdHRlc3QuQ29t"
+
"dGVzdC5Db21wbGV4T3B0aW9uVHlwZTM6OAoGZ3JhdWx0EiUucHJvdG9idWZf"
+
"cGxleE9wdGlvblR5cGUxOl8KDGNvbXBsZXhfb3B0MRIfLmdvb2dsZS5wcm90"
+
"dW5pdHRlc3QuQ29tcGxleE9wdGlvblR5cGUyGO/80gMgASgFOl8KBmdhcnBs"
+
"b2J1Zi5NZXNzYWdlT3B0aW9ucxik3NIDIAEoCzIlLnByb3RvYnVmX3VuaXR0"
+
"eRIlLnByb3RvYnVmX3VuaXR0ZXN0LkNvbXBsZXhPcHRpb25UeXBlMhjI9dID"
+
"ZXN0LkNvbXBsZXhPcHRpb25UeXBlMTpfCgxjb21wbGV4X29wdDISHy5nb29n"
+
"IAEoCzIlLnByb3RvYnVmX3VuaXR0ZXN0LkNvbXBsZXhPcHRpb25UeXBlMTpf"
+
"bGUucHJvdG9idWYuTWVzc2FnZU9wdGlvbnMY1Y/SAyABKAsyJS5wcm90b2J1"
+
"Cgxjb21wbGV4X29wdDESHy5nb29nbGUucHJvdG9idWYuTWVzc2FnZU9wdGlv"
+
"Zl91bml0dGVzdC5Db21wbGV4T3B0aW9uVHlwZTI6XwoMY29tcGxleF9vcHQz"
+
"bnMYpNzSAyABKAsyJS5wcm90b2J1Zl91bml0dGVzdC5Db21wbGV4T3B0aW9u"
+
"Eh8uZ29vZ2xlLnByb3RvYnVmLk1lc3NhZ2VPcHRpb25zGO+L0gMgASgLMiUu"
+
"VHlwZTE6XwoMY29tcGxleF9vcHQyEh8uZ29vZ2xlLnByb3RvYnVmLk1lc3Nh"
+
"cHJvdG9idWZfdW5pdHRlc3QuQ29tcGxleE9wdGlvblR5cGUzOlcKC2NvbXBs"
+
"Z2VPcHRpb25zGNWP0gMgASgLMiUucHJvdG9idWZfdW5pdHRlc3QuQ29tcGxl"
+
"ZXhvcHQ2Eh8uZ29vZ2xlLnByb3RvYnVmLk1lc3NhZ2VPcHRpb25zGMzLzwMg"
+
"eE9wdGlvblR5cGUyOl8KDGNvbXBsZXhfb3B0MxIfLmdvb2dsZS5wcm90b2J1"
+
"ASgKMh4ucHJvdG9idWZfdW5pdHRlc3QuQ29tcGxleE9wdDZCT8I+QwohR29v"
+
"Zi5NZXNzYWdlT3B0aW9ucxjvi9IDIAEoCzIlLnByb3RvYnVmX3VuaXR0ZXN0"
+
"Z2xlLlByb3RvY29sQnVmZmVycy5UZXN0UHJvdG9zEh5Vbml0VGVzdEN1c3Rv"
+
"LkNvbXBsZXhPcHRpb25UeXBlMzpXCgtjb21wbGV4b3B0NhIfLmdvb2dsZS5w"
+
"bU9wdGlvbnNQcm90b0ZpbGXw6MEd6q3A5SQ="
),
"cm90b2J1Zi5NZXNzYWdlT3B0aW9ucxjMy88DIAEoCjIeLnByb3RvYnVmX3Vu"
+
"aXR0ZXN0LkNvbXBsZXhPcHQ2Qk/CPkMKIUdvb2dsZS5Qcm90b2NvbEJ1ZmZl"
+
"cnMuVGVzdFByb3RvcxIeVW5pdFRlc3RDdXN0b21PcHRpb25zUHJvdG9GaWxl"
+
"8OjBHeqtwOUk"
),
new
pbd
::
FileDescriptor
[]
{
new
pbd
::
FileDescriptor
[]
{
global
::
Google
.
ProtocolBuffers
.
DescriptorProtos
.
CSharpOptions
.
Descriptor
,
global
::
Google
.
ProtocolBuffers
.
DescriptorProtos
.
CSharpOptions
.
Descriptor
,
global
::
Google
.
ProtocolBuffers
.
DescriptorProtos
.
DescriptorProtoFile
.
Descriptor
,
global
::
Google
.
ProtocolBuffers
.
DescriptorProtos
.
DescriptorProtoFile
.
Descriptor
,
...
...
src/ProtocolBuffers.Test/TestProtos/UnitTestProtoFile.cs
View file @
25a28580
This source diff could not be displayed because it is too large. You can
view the blob
instead.
src/ProtocolBuffers.Test/TestUtil.cs
View file @
25a28580
...
@@ -158,6 +158,21 @@ namespace Google.ProtocolBuffers {
...
@@ -158,6 +158,21 @@ namespace Google.ProtocolBuffers {
registry
.
Add
(
UnitTestProtoFile
.
DefaultImportEnumExtension
);
registry
.
Add
(
UnitTestProtoFile
.
DefaultImportEnumExtension
);
registry
.
Add
(
UnitTestProtoFile
.
DefaultStringPieceExtension
);
registry
.
Add
(
UnitTestProtoFile
.
DefaultStringPieceExtension
);
registry
.
Add
(
UnitTestProtoFile
.
DefaultCordExtension
);
registry
.
Add
(
UnitTestProtoFile
.
DefaultCordExtension
);
registry
.
Add
(
UnitTestProtoFile
.
PackedInt32Extension
);
registry
.
Add
(
UnitTestProtoFile
.
PackedInt64Extension
);
registry
.
Add
(
UnitTestProtoFile
.
PackedUint32Extension
);
registry
.
Add
(
UnitTestProtoFile
.
PackedUint64Extension
);
registry
.
Add
(
UnitTestProtoFile
.
PackedSint32Extension
);
registry
.
Add
(
UnitTestProtoFile
.
PackedSint64Extension
);
registry
.
Add
(
UnitTestProtoFile
.
PackedFixed32Extension
);
registry
.
Add
(
UnitTestProtoFile
.
PackedFixed64Extension
);
registry
.
Add
(
UnitTestProtoFile
.
PackedSfixed32Extension
);
registry
.
Add
(
UnitTestProtoFile
.
PackedSfixed64Extension
);
registry
.
Add
(
UnitTestProtoFile
.
PackedFloatExtension
);
registry
.
Add
(
UnitTestProtoFile
.
PackedDoubleExtension
);
registry
.
Add
(
UnitTestProtoFile
.
PackedBoolExtension
);
registry
.
Add
(
UnitTestProtoFile
.
PackedEnumExtension
);
}
}
internal
static
string
ReadTextFromFile
(
string
filePath
)
{
internal
static
string
ReadTextFromFile
(
string
filePath
)
{
...
@@ -653,6 +668,18 @@ namespace Google.ProtocolBuffers {
...
@@ -653,6 +668,18 @@ namespace Google.ProtocolBuffers {
return
builder
.
Build
();
return
builder
.
Build
();
}
}
public
static
TestPackedTypes
GetPackedSet
()
{
TestPackedTypes
.
Builder
builder
=
TestPackedTypes
.
CreateBuilder
();
SetPackedFields
(
builder
);
return
builder
.
Build
();
}
public
static
TestPackedExtensions
GetPackedExtensionsSet
()
{
TestPackedExtensions
.
Builder
builder
=
TestPackedExtensions
.
CreateBuilder
();
SetPackedExtensions
(
builder
);
return
builder
.
Build
();
}
/// <summary>
/// <summary>
/// Sets every field of the specified builder to the values expected by
/// Sets every field of the specified builder to the values expected by
/// AssertAllExtensionsSet.
/// AssertAllExtensionsSet.
...
@@ -1373,6 +1400,184 @@ namespace Google.ProtocolBuffers {
...
@@ -1373,6 +1400,184 @@ namespace Google.ProtocolBuffers {
Assert
.
AreEqual
(
"123"
,
message
.
GetExtension
(
UnitTestProtoFile
.
DefaultCordExtension
));
Assert
.
AreEqual
(
"123"
,
message
.
GetExtension
(
UnitTestProtoFile
.
DefaultCordExtension
));
}
}
/// <summary>
/// Set every field of the specified message to a unique value.
/// </summary>
public
static
void
SetPackedFields
(
TestPackedTypes
.
Builder
message
)
{
message
.
AddPackedInt32
(
601
);
message
.
AddPackedInt64
(
602
);
message
.
AddPackedUint32
(
603
);
message
.
AddPackedUint64
(
604
);
message
.
AddPackedSint32
(
605
);
message
.
AddPackedSint64
(
606
);
message
.
AddPackedFixed32
(
607
);
message
.
AddPackedFixed64
(
608
);
message
.
AddPackedSfixed32
(
609
);
message
.
AddPackedSfixed64
(
610
);
message
.
AddPackedFloat
(
611
);
message
.
AddPackedDouble
(
612
);
message
.
AddPackedBool
(
true
);
message
.
AddPackedEnum
(
ForeignEnum
.
FOREIGN_BAR
);
// Add a second one of each field.
message
.
AddPackedInt32
(
701
);
message
.
AddPackedInt64
(
702
);
message
.
AddPackedUint32
(
703
);
message
.
AddPackedUint64
(
704
);
message
.
AddPackedSint32
(
705
);
message
.
AddPackedSint64
(
706
);
message
.
AddPackedFixed32
(
707
);
message
.
AddPackedFixed64
(
708
);
message
.
AddPackedSfixed32
(
709
);
message
.
AddPackedSfixed64
(
710
);
message
.
AddPackedFloat
(
711
);
message
.
AddPackedDouble
(
712
);
message
.
AddPackedBool
(
false
);
message
.
AddPackedEnum
(
ForeignEnum
.
FOREIGN_BAZ
);
}
/// <summary>
/// Asserts that all the fields of the specified message are set to the values assigned
/// in SetPackedFields.
/// </summary>
public
static
void
AssertPackedFieldsSet
(
TestPackedTypes
message
)
{
Assert
.
AreEqual
(
2
,
message
.
PackedInt32Count
);
Assert
.
AreEqual
(
2
,
message
.
PackedInt64Count
);
Assert
.
AreEqual
(
2
,
message
.
PackedUint32Count
);
Assert
.
AreEqual
(
2
,
message
.
PackedUint64Count
);
Assert
.
AreEqual
(
2
,
message
.
PackedSint32Count
);
Assert
.
AreEqual
(
2
,
message
.
PackedSint64Count
);
Assert
.
AreEqual
(
2
,
message
.
PackedFixed32Count
);
Assert
.
AreEqual
(
2
,
message
.
PackedFixed64Count
);
Assert
.
AreEqual
(
2
,
message
.
PackedSfixed32Count
);
Assert
.
AreEqual
(
2
,
message
.
PackedSfixed64Count
);
Assert
.
AreEqual
(
2
,
message
.
PackedFloatCount
);
Assert
.
AreEqual
(
2
,
message
.
PackedDoubleCount
);
Assert
.
AreEqual
(
2
,
message
.
PackedBoolCount
);
Assert
.
AreEqual
(
2
,
message
.
PackedEnumCount
);
Assert
.
AreEqual
(
601
,
message
.
GetPackedInt32
(
0
));
Assert
.
AreEqual
(
602
,
message
.
GetPackedInt64
(
0
));
Assert
.
AreEqual
(
603
,
message
.
GetPackedUint32
(
0
));
Assert
.
AreEqual
(
604
,
message
.
GetPackedUint64
(
0
));
Assert
.
AreEqual
(
605
,
message
.
GetPackedSint32
(
0
));
Assert
.
AreEqual
(
606
,
message
.
GetPackedSint64
(
0
));
Assert
.
AreEqual
(
607
,
message
.
GetPackedFixed32
(
0
));
Assert
.
AreEqual
(
608
,
message
.
GetPackedFixed64
(
0
));
Assert
.
AreEqual
(
609
,
message
.
GetPackedSfixed32
(
0
));
Assert
.
AreEqual
(
610
,
message
.
GetPackedSfixed64
(
0
));
Assert
.
AreEqual
(
611
,
message
.
GetPackedFloat
(
0
),
0.0
);
Assert
.
AreEqual
(
612
,
message
.
GetPackedDouble
(
0
),
0.0
);
Assert
.
AreEqual
(
true
,
message
.
GetPackedBool
(
0
));
Assert
.
AreEqual
(
ForeignEnum
.
FOREIGN_BAR
,
message
.
GetPackedEnum
(
0
));
Assert
.
AreEqual
(
701
,
message
.
GetPackedInt32
(
1
));
Assert
.
AreEqual
(
702
,
message
.
GetPackedInt64
(
1
));
Assert
.
AreEqual
(
703
,
message
.
GetPackedUint32
(
1
));
Assert
.
AreEqual
(
704
,
message
.
GetPackedUint64
(
1
));
Assert
.
AreEqual
(
705
,
message
.
GetPackedSint32
(
1
));
Assert
.
AreEqual
(
706
,
message
.
GetPackedSint64
(
1
));
Assert
.
AreEqual
(
707
,
message
.
GetPackedFixed32
(
1
));
Assert
.
AreEqual
(
708
,
message
.
GetPackedFixed64
(
1
));
Assert
.
AreEqual
(
709
,
message
.
GetPackedSfixed32
(
1
));
Assert
.
AreEqual
(
710
,
message
.
GetPackedSfixed64
(
1
));
Assert
.
AreEqual
(
711
,
message
.
GetPackedFloat
(
1
),
0.0
);
Assert
.
AreEqual
(
712
,
message
.
GetPackedDouble
(
1
),
0.0
);
Assert
.
AreEqual
(
false
,
message
.
GetPackedBool
(
1
));
Assert
.
AreEqual
(
ForeignEnum
.
FOREIGN_BAZ
,
message
.
GetPackedEnum
(
1
));
}
public
static
void
SetPackedExtensions
(
TestPackedExtensions
.
Builder
message
)
{
message
.
AddExtension
(
UnitTestProtoFile
.
PackedInt32Extension
,
601
);
message
.
AddExtension
(
UnitTestProtoFile
.
PackedInt64Extension
,
602L
);
message
.
AddExtension
(
UnitTestProtoFile
.
PackedUint32Extension
,
603U
);
message
.
AddExtension
(
UnitTestProtoFile
.
PackedUint64Extension
,
604U
L
);
message
.
AddExtension
(
UnitTestProtoFile
.
PackedSint32Extension
,
605
);
message
.
AddExtension
(
UnitTestProtoFile
.
PackedSint64Extension
,
606L
);
message
.
AddExtension
(
UnitTestProtoFile
.
PackedFixed32Extension
,
607U
);
message
.
AddExtension
(
UnitTestProtoFile
.
PackedFixed64Extension
,
608U
L
);
message
.
AddExtension
(
UnitTestProtoFile
.
PackedSfixed32Extension
,
609
);
message
.
AddExtension
(
UnitTestProtoFile
.
PackedSfixed64Extension
,
610L
);
message
.
AddExtension
(
UnitTestProtoFile
.
PackedFloatExtension
,
611F
);
message
.
AddExtension
(
UnitTestProtoFile
.
PackedDoubleExtension
,
612D
);
message
.
AddExtension
(
UnitTestProtoFile
.
PackedBoolExtension
,
true
);
message
.
AddExtension
(
UnitTestProtoFile
.
PackedEnumExtension
,
ForeignEnum
.
FOREIGN_BAR
);
// Add a second one of each field.
message
.
AddExtension
(
UnitTestProtoFile
.
PackedInt32Extension
,
701
);
message
.
AddExtension
(
UnitTestProtoFile
.
PackedInt64Extension
,
702L
);
message
.
AddExtension
(
UnitTestProtoFile
.
PackedUint32Extension
,
703U
);
message
.
AddExtension
(
UnitTestProtoFile
.
PackedUint64Extension
,
704U
L
);
message
.
AddExtension
(
UnitTestProtoFile
.
PackedSint32Extension
,
705
);
message
.
AddExtension
(
UnitTestProtoFile
.
PackedSint64Extension
,
706L
);
message
.
AddExtension
(
UnitTestProtoFile
.
PackedFixed32Extension
,
707U
);
message
.
AddExtension
(
UnitTestProtoFile
.
PackedFixed64Extension
,
708U
L
);
message
.
AddExtension
(
UnitTestProtoFile
.
PackedSfixed32Extension
,
709
);
message
.
AddExtension
(
UnitTestProtoFile
.
PackedSfixed64Extension
,
710L
);
message
.
AddExtension
(
UnitTestProtoFile
.
PackedFloatExtension
,
711F
);
message
.
AddExtension
(
UnitTestProtoFile
.
PackedDoubleExtension
,
712D
);
message
.
AddExtension
(
UnitTestProtoFile
.
PackedBoolExtension
,
false
);
message
.
AddExtension
(
UnitTestProtoFile
.
PackedEnumExtension
,
ForeignEnum
.
FOREIGN_BAZ
);
}
public
static
void
AssertPackedExtensionsSet
(
TestPackedExtensions
message
)
{
Assert
.
AreEqual
(
2
,
message
.
GetExtensionCount
(
UnitTestProtoFile
.
PackedInt32Extension
));
Assert
.
AreEqual
(
2
,
message
.
GetExtensionCount
(
UnitTestProtoFile
.
PackedInt64Extension
));
Assert
.
AreEqual
(
2
,
message
.
GetExtensionCount
(
UnitTestProtoFile
.
PackedUint32Extension
));
Assert
.
AreEqual
(
2
,
message
.
GetExtensionCount
(
UnitTestProtoFile
.
PackedUint64Extension
));
Assert
.
AreEqual
(
2
,
message
.
GetExtensionCount
(
UnitTestProtoFile
.
PackedSint32Extension
));
Assert
.
AreEqual
(
2
,
message
.
GetExtensionCount
(
UnitTestProtoFile
.
PackedSint64Extension
));
Assert
.
AreEqual
(
2
,
message
.
GetExtensionCount
(
UnitTestProtoFile
.
PackedFixed32Extension
));
Assert
.
AreEqual
(
2
,
message
.
GetExtensionCount
(
UnitTestProtoFile
.
PackedFixed64Extension
));
Assert
.
AreEqual
(
2
,
message
.
GetExtensionCount
(
UnitTestProtoFile
.
PackedSfixed32Extension
));
Assert
.
AreEqual
(
2
,
message
.
GetExtensionCount
(
UnitTestProtoFile
.
PackedSfixed64Extension
));
Assert
.
AreEqual
(
2
,
message
.
GetExtensionCount
(
UnitTestProtoFile
.
PackedFloatExtension
));
Assert
.
AreEqual
(
2
,
message
.
GetExtensionCount
(
UnitTestProtoFile
.
PackedDoubleExtension
));
Assert
.
AreEqual
(
2
,
message
.
GetExtensionCount
(
UnitTestProtoFile
.
PackedBoolExtension
));
Assert
.
AreEqual
(
2
,
message
.
GetExtensionCount
(
UnitTestProtoFile
.
PackedEnumExtension
));
Assert
.
AreEqual
(
601
,
message
.
GetExtension
(
UnitTestProtoFile
.
PackedInt32Extension
,
0
));
Assert
.
AreEqual
(
602L
,
message
.
GetExtension
(
UnitTestProtoFile
.
PackedInt64Extension
,
0
));
Assert
.
AreEqual
(
603
,
message
.
GetExtension
(
UnitTestProtoFile
.
PackedUint32Extension
,
0
));
Assert
.
AreEqual
(
604L
,
message
.
GetExtension
(
UnitTestProtoFile
.
PackedUint64Extension
,
0
));
Assert
.
AreEqual
(
605
,
message
.
GetExtension
(
UnitTestProtoFile
.
PackedSint32Extension
,
0
));
Assert
.
AreEqual
(
606L
,
message
.
GetExtension
(
UnitTestProtoFile
.
PackedSint64Extension
,
0
));
Assert
.
AreEqual
(
607
,
message
.
GetExtension
(
UnitTestProtoFile
.
PackedFixed32Extension
,
0
));
Assert
.
AreEqual
(
608L
,
message
.
GetExtension
(
UnitTestProtoFile
.
PackedFixed64Extension
,
0
));
Assert
.
AreEqual
(
609
,
message
.
GetExtension
(
UnitTestProtoFile
.
PackedSfixed32Extension
,
0
));
Assert
.
AreEqual
(
610L
,
message
.
GetExtension
(
UnitTestProtoFile
.
PackedSfixed64Extension
,
0
));
Assert
.
AreEqual
(
611F
,
message
.
GetExtension
(
UnitTestProtoFile
.
PackedFloatExtension
,
0
));
Assert
.
AreEqual
(
612D
,
message
.
GetExtension
(
UnitTestProtoFile
.
PackedDoubleExtension
,
0
));
Assert
.
AreEqual
(
true
,
message
.
GetExtension
(
UnitTestProtoFile
.
PackedBoolExtension
,
0
));
Assert
.
AreEqual
(
ForeignEnum
.
FOREIGN_BAR
,
message
.
GetExtension
(
UnitTestProtoFile
.
PackedEnumExtension
,
0
));
Assert
.
AreEqual
(
701
,
message
.
GetExtension
(
UnitTestProtoFile
.
PackedInt32Extension
,
1
));
Assert
.
AreEqual
(
702L
,
message
.
GetExtension
(
UnitTestProtoFile
.
PackedInt64Extension
,
1
));
Assert
.
AreEqual
(
703
,
message
.
GetExtension
(
UnitTestProtoFile
.
PackedUint32Extension
,
1
));
Assert
.
AreEqual
(
704L
,
message
.
GetExtension
(
UnitTestProtoFile
.
PackedUint64Extension
,
1
));
Assert
.
AreEqual
(
705
,
message
.
GetExtension
(
UnitTestProtoFile
.
PackedSint32Extension
,
1
));
Assert
.
AreEqual
(
706L
,
message
.
GetExtension
(
UnitTestProtoFile
.
PackedSint64Extension
,
1
));
Assert
.
AreEqual
(
707
,
message
.
GetExtension
(
UnitTestProtoFile
.
PackedFixed32Extension
,
1
));
Assert
.
AreEqual
(
708L
,
message
.
GetExtension
(
UnitTestProtoFile
.
PackedFixed64Extension
,
1
));
Assert
.
AreEqual
(
709
,
message
.
GetExtension
(
UnitTestProtoFile
.
PackedSfixed32Extension
,
1
));
Assert
.
AreEqual
(
710L
,
message
.
GetExtension
(
UnitTestProtoFile
.
PackedSfixed64Extension
,
1
));
Assert
.
AreEqual
(
711F
,
message
.
GetExtension
(
UnitTestProtoFile
.
PackedFloatExtension
,
1
));
Assert
.
AreEqual
(
712D
,
message
.
GetExtension
(
UnitTestProtoFile
.
PackedDoubleExtension
,
1
));
Assert
.
AreEqual
(
false
,
message
.
GetExtension
(
UnitTestProtoFile
.
PackedBoolExtension
,
1
));
Assert
.
AreEqual
(
ForeignEnum
.
FOREIGN_BAZ
,
message
.
GetExtension
(
UnitTestProtoFile
.
PackedEnumExtension
,
1
));
}
private
static
ByteString
goldenPackedFieldsMessage
=
null
;
/// <summary>
/// Get the bytes of the "golden packed fields message". This is a serialized
/// TestPackedTypes with all fields set as they would be by SetPackedFields,
/// but it is loaded from a file on disk rather than generated dynamically.
/// The file is actually generated by C++ code, so testing against it verifies compatibility
/// with C++.
/// </summary>
public
static
ByteString
GetGoldenPackedFieldsMessage
()
{
if
(
goldenPackedFieldsMessage
==
null
)
{
goldenPackedFieldsMessage
=
ReadBytesFromFile
(
"golden_packed_fields_message"
);
}
return
goldenPackedFieldsMessage
;
}
/// <summary>
/// <summary>
/// Helper to construct a byte array from a bunch of bytes.
/// Helper to construct a byte array from a bunch of bytes.
/// </summary>
/// </summary>
...
...
src/ProtocolBuffers.Test/WireFormatTest.cs
View file @
25a28580
...
@@ -62,12 +62,20 @@ namespace Google.ProtocolBuffers {
...
@@ -62,12 +62,20 @@ namespace Google.ProtocolBuffers {
TestUtil
.
AssertAllFieldsSet
(
message2
);
TestUtil
.
AssertAllFieldsSet
(
message2
);
}
}
[
Test
]
public
void
SerializationPacked
()
{
TestPackedTypes
message
=
TestUtil
.
GetPackedSet
();
ByteString
rawBytes
=
message
.
ToByteString
();
Assert
.
AreEqual
(
rawBytes
.
Length
,
message
.
SerializedSize
);
TestPackedTypes
message2
=
TestPackedTypes
.
ParseFrom
(
rawBytes
);
TestUtil
.
AssertPackedFieldsSet
(
message2
);
}
[
Test
]
[
Test
]
public
void
SerializeExtensions
()
{
public
void
SerializeExtensions
()
{
// TestAllTypes and TestAllExtensions should have compatible wire formats,
// TestAllTypes and TestAllExtensions should have compatible wire formats,
// so if we ser
e
alize a TestAllExtensions then parse it as TestAllTypes
// so if we ser
i
alize a TestAllExtensions then parse it as TestAllTypes
// it should work.
// it should work.
TestAllExtensions
message
=
TestUtil
.
GetAllExtensionsSet
();
TestAllExtensions
message
=
TestUtil
.
GetAllExtensionsSet
();
ByteString
rawBytes
=
message
.
ToByteString
();
ByteString
rawBytes
=
message
.
ToByteString
();
Assert
.
AreEqual
(
rawBytes
.
Length
,
message
.
SerializedSize
);
Assert
.
AreEqual
(
rawBytes
.
Length
,
message
.
SerializedSize
);
...
@@ -77,6 +85,19 @@ namespace Google.ProtocolBuffers {
...
@@ -77,6 +85,19 @@ namespace Google.ProtocolBuffers {
TestUtil
.
AssertAllFieldsSet
(
message2
);
TestUtil
.
AssertAllFieldsSet
(
message2
);
}
}
[
Test
]
public
void
SerializePackedExtensions
()
{
// TestPackedTypes and TestPackedExtensions should have compatible wire
// formats; check that they serialize to the same string.
TestPackedExtensions
message
=
TestUtil
.
GetPackedExtensionsSet
();
ByteString
rawBytes
=
message
.
ToByteString
();
TestPackedTypes
message2
=
TestUtil
.
GetPackedSet
();
ByteString
rawBytes2
=
message2
.
ToByteString
();
Assert
.
AreEqual
(
rawBytes
,
rawBytes2
);
}
[
Test
]
[
Test
]
public
void
ParseExtensions
()
{
public
void
ParseExtensions
()
{
// TestAllTypes and TestAllExtensions should have compatible wire formats,
// TestAllTypes and TestAllExtensions should have compatible wire formats,
...
@@ -90,12 +111,23 @@ namespace Google.ProtocolBuffers {
...
@@ -90,12 +111,23 @@ namespace Google.ProtocolBuffers {
TestUtil
.
RegisterAllExtensions
(
registry
);
TestUtil
.
RegisterAllExtensions
(
registry
);
registry
=
registry
.
AsReadOnly
();
registry
=
registry
.
AsReadOnly
();
TestAllExtensions
message2
=
TestAllExtensions
message2
=
TestAllExtensions
.
ParseFrom
(
rawBytes
,
registry
);
TestAllExtensions
.
ParseFrom
(
rawBytes
,
registry
);
TestUtil
.
AssertAllExtensionsSet
(
message2
);
TestUtil
.
AssertAllExtensionsSet
(
message2
);
}
}
[
Test
]
public
void
ParsePackedExtensions
()
{
// Ensure that packed extensions can be properly parsed.
TestPackedExtensions
message
=
TestUtil
.
GetPackedExtensionsSet
();
ByteString
rawBytes
=
message
.
ToByteString
();
ExtensionRegistry
registry
=
TestUtil
.
CreateExtensionRegistry
();
TestPackedExtensions
message2
=
TestPackedExtensions
.
ParseFrom
(
rawBytes
,
registry
);
TestUtil
.
AssertPackedExtensionsSet
(
message2
);
}
[
Test
]
[
Test
]
public
void
ExtensionsSerializedSize
()
{
public
void
ExtensionsSerializedSize
()
{
Assert
.
AreEqual
(
TestUtil
.
GetAllSet
().
SerializedSize
,
TestUtil
.
GetAllExtensionsSet
().
SerializedSize
);
Assert
.
AreEqual
(
TestUtil
.
GetAllSet
().
SerializedSize
,
TestUtil
.
GetAllExtensionsSet
().
SerializedSize
);
...
...
src/ProtocolBuffers/AbstractMessage.cs
View file @
25a28580
...
@@ -110,8 +110,21 @@ namespace Google.ProtocolBuffers {
...
@@ -110,8 +110,21 @@ namespace Google.ProtocolBuffers {
if
(
field
.
IsRepeated
)
{
if
(
field
.
IsRepeated
)
{
// We know it's an IList<T>, but not the exact type - so
// We know it's an IList<T>, but not the exact type - so
// IEnumerable is the best we can do. (C# generics aren't covariant yet.)
// IEnumerable is the best we can do. (C# generics aren't covariant yet.)
foreach
(
object
element
in
(
IEnumerable
)
entry
.
Value
)
{
IEnumerable
valueList
=
(
IEnumerable
)
entry
.
Value
;
output
.
WriteField
(
field
.
FieldType
,
field
.
FieldNumber
,
element
);
if
(
field
.
IsPacked
)
{
output
.
WriteTag
(
field
.
FieldNumber
,
WireFormat
.
WireType
.
LengthDelimited
);
int
dataSize
=
0
;
foreach
(
object
element
in
valueList
)
{
dataSize
+=
CodedOutputStream
.
ComputeFieldSizeNoTag
(
field
.
FieldType
,
element
);
}
output
.
WriteRawVarint32
((
uint
)
dataSize
);
foreach
(
object
element
in
valueList
)
{
output
.
WriteFieldNoTag
(
field
.
FieldType
,
element
);
}
}
else
{
foreach
(
object
element
in
valueList
)
{
output
.
WriteField
(
field
.
FieldType
,
field
.
FieldNumber
,
element
);
}
}
}
}
else
{
}
else
{
output
.
WriteField
(
field
.
FieldType
,
field
.
FieldNumber
,
entry
.
Value
);
output
.
WriteField
(
field
.
FieldType
,
field
.
FieldNumber
,
entry
.
Value
);
...
@@ -136,8 +149,19 @@ namespace Google.ProtocolBuffers {
...
@@ -136,8 +149,19 @@ namespace Google.ProtocolBuffers {
foreach
(
KeyValuePair
<
FieldDescriptor
,
object
>
entry
in
AllFields
)
{
foreach
(
KeyValuePair
<
FieldDescriptor
,
object
>
entry
in
AllFields
)
{
FieldDescriptor
field
=
entry
.
Key
;
FieldDescriptor
field
=
entry
.
Key
;
if
(
field
.
IsRepeated
)
{
if
(
field
.
IsRepeated
)
{
foreach
(
object
element
in
(
IEnumerable
)
entry
.
Value
)
{
IEnumerable
valueList
=
(
IEnumerable
)
entry
.
Value
;
size
+=
CodedOutputStream
.
ComputeFieldSize
(
field
.
FieldType
,
field
.
FieldNumber
,
element
);
if
(
field
.
IsPacked
)
{
int
dataSize
=
0
;
foreach
(
object
element
in
valueList
)
{
dataSize
+=
CodedOutputStream
.
ComputeFieldSizeNoTag
(
field
.
FieldType
,
element
);
}
size
+=
dataSize
;
size
+=
CodedOutputStream
.
ComputeTagSize
(
field
.
FieldNumber
);
size
+=
CodedOutputStream
.
ComputeRawVarint32Size
((
uint
)
dataSize
);
}
else
{
foreach
(
object
element
in
valueList
)
{
size
+=
CodedOutputStream
.
ComputeFieldSize
(
field
.
FieldType
,
field
.
FieldNumber
,
element
);
}
}
}
}
else
{
}
else
{
size
+=
CodedOutputStream
.
ComputeFieldSize
(
field
.
FieldType
,
field
.
FieldNumber
,
entry
.
Value
);
size
+=
CodedOutputStream
.
ComputeFieldSize
(
field
.
FieldType
,
field
.
FieldNumber
,
entry
.
Value
);
...
...
src/ProtocolBuffers/CodedInputStream.cs
View file @
25a28580
...
@@ -608,6 +608,20 @@ namespace Google.ProtocolBuffers {
...
@@ -608,6 +608,20 @@ namespace Google.ProtocolBuffers {
RecomputeBufferSizeAfterLimit
();
RecomputeBufferSizeAfterLimit
();
}
}
/// <summary>
/// Returns whether or not all the data before the limit has been read.
/// </summary>
/// <returns></returns>
public
bool
ReachedLimit
{
get
{
if
(
currentLimit
==
int
.
MaxValue
)
{
return
false
;
}
int
currentAbsolutePosition
=
totalBytesRetired
+
bufferPos
;
return
currentAbsolutePosition
>=
currentLimit
;
}
}
/// <summary>
/// <summary>
/// Called when buffer is empty to read more bytes from the
/// Called when buffer is empty to read more bytes from the
/// input. If <paramref name="mustSucceed"/> is true, RefillBuffer() gurantees that
/// input. If <paramref name="mustSucceed"/> is true, RefillBuffer() gurantees that
...
...
src/ProtocolBuffers/CodedOutputStream.cs
View file @
25a28580
...
@@ -298,6 +298,156 @@ namespace Google.ProtocolBuffers {
...
@@ -298,6 +298,156 @@ namespace Google.ProtocolBuffers {
}
}
}
}
public
void
WriteFieldNoTag
(
FieldType
fieldType
,
object
value
)
{
switch
(
fieldType
)
{
case
FieldType
.
Double
:
WriteDoubleNoTag
((
double
)
value
);
break
;
case
FieldType
.
Float
:
WriteFloatNoTag
((
float
)
value
);
break
;
case
FieldType
.
Int64
:
WriteInt64NoTag
((
long
)
value
);
break
;
case
FieldType
.
UInt64
:
WriteUInt64NoTag
((
ulong
)
value
);
break
;
case
FieldType
.
Int32
:
WriteInt32NoTag
((
int
)
value
);
break
;
case
FieldType
.
Fixed64
:
WriteFixed64NoTag
((
ulong
)
value
);
break
;
case
FieldType
.
Fixed32
:
WriteFixed32NoTag
((
uint
)
value
);
break
;
case
FieldType
.
Bool
:
WriteBoolNoTag
((
bool
)
value
);
break
;
case
FieldType
.
String
:
WriteStringNoTag
((
string
)
value
);
break
;
case
FieldType
.
Group
:
WriteGroupNoTag
((
IMessage
)
value
);
break
;
case
FieldType
.
Message
:
WriteMessageNoTag
((
IMessage
)
value
);
break
;
case
FieldType
.
Bytes
:
WriteBytesNoTag
((
ByteString
)
value
);
break
;
case
FieldType
.
UInt32
:
WriteUInt32NoTag
((
uint
)
value
);
break
;
case
FieldType
.
SFixed32
:
WriteSFixed32NoTag
((
int
)
value
);
break
;
case
FieldType
.
SFixed64
:
WriteSFixed64NoTag
((
long
)
value
);
break
;
case
FieldType
.
SInt32
:
WriteSInt32NoTag
((
int
)
value
);
break
;
case
FieldType
.
SInt64
:
WriteSInt64NoTag
((
long
)
value
);
break
;
case
FieldType
.
Enum
:
WriteEnumNoTag
(((
EnumValueDescriptor
)
value
).
Number
);
break
;
}
}
#
endregion
#
region
Writing
of
values
without
tags
/// <summary>
/// Writes a double field value, including tag, to the stream.
/// </summary>
public
void
WriteDoubleNoTag
(
double
value
)
{
WriteRawLittleEndian64
((
ulong
)
BitConverter
.
DoubleToInt64Bits
(
value
));
}
/// <summary>
/// Writes a float field value, without a tag, to the stream.
/// </summary>
public
void
WriteFloatNoTag
(
float
value
)
{
// TODO(jonskeet): Test this on different endiannesses
byte
[]
rawBytes
=
BitConverter
.
GetBytes
(
value
);
uint
asInteger
=
BitConverter
.
ToUInt32
(
rawBytes
,
0
);
WriteRawLittleEndian32
(
asInteger
);
}
/// <summary>
/// Writes a uint64 field value, without a tag, to the stream.
/// </summary>
public
void
WriteUInt64NoTag
(
ulong
value
)
{
WriteRawVarint64
(
value
);
}
/// <summary>
/// Writes an int64 field value, without a tag, to the stream.
/// </summary>
public
void
WriteInt64NoTag
(
long
value
)
{
WriteRawVarint64
((
ulong
)
value
);
}
/// <summary>
/// Writes an int32 field value, without a tag, to the stream.
/// </summary>
public
void
WriteInt32NoTag
(
int
value
)
{
if
(
value
>=
0
)
{
WriteRawVarint32
((
uint
)
value
);
}
else
{
// Must sign-extend.
WriteRawVarint64
((
ulong
)
value
);
}
}
/// <summary>
/// Writes a fixed64 field value, without a tag, to the stream.
/// </summary>
public
void
WriteFixed64NoTag
(
ulong
value
)
{
WriteRawLittleEndian64
(
value
);
}
/// <summary>
/// Writes a fixed32 field value, without a tag, to the stream.
/// </summary>
public
void
WriteFixed32NoTag
(
uint
value
)
{
WriteRawLittleEndian32
(
value
);
}
/// <summary>
/// Writes a bool field value, without a tag, to the stream.
/// </summary>
public
void
WriteBoolNoTag
(
bool
value
)
{
WriteRawByte
(
value
?
(
byte
)
1
:
(
byte
)
0
);
}
/// <summary>
/// Writes a string field value, without a tag, to the stream.
/// </summary>
public
void
WriteStringNoTag
(
string
value
)
{
// Optimise the case where we have enough space to write
// the string directly to the buffer, which should be common.
int
length
=
Encoding
.
UTF8
.
GetByteCount
(
value
);
WriteRawVarint32
((
uint
)
length
);
if
(
limit
-
position
>=
length
)
{
Encoding
.
UTF8
.
GetBytes
(
value
,
0
,
value
.
Length
,
buffer
,
position
);
position
+=
length
;
}
else
{
byte
[]
bytes
=
Encoding
.
UTF8
.
GetBytes
(
value
);
WriteRawBytes
(
bytes
);
}
}
/// <summary>
/// Writes a group field value, without a tag, to the stream.
/// </summary>
public
void
WriteGroupNoTag
(
IMessage
value
)
{
value
.
WriteTo
(
this
);
}
public
void
WriteMessageNoTag
(
IMessage
value
)
{
WriteRawVarint32
((
uint
)
value
.
SerializedSize
);
value
.
WriteTo
(
this
);
}
public
void
WriteBytesNoTag
(
ByteString
value
)
{
// TODO(jonskeet): Optimise this! (No need to copy the bytes twice.)
byte
[]
bytes
=
value
.
ToByteArray
();
WriteRawVarint32
((
uint
)
bytes
.
Length
);
WriteRawBytes
(
bytes
);
}
public
void
WriteUInt32NoTag
(
uint
value
)
{
WriteRawVarint32
(
value
);
}
public
void
WriteEnumNoTag
(
int
value
)
{
WriteRawVarint32
((
uint
)
value
);
}
public
void
WriteSFixed32NoTag
(
int
value
)
{
WriteRawLittleEndian32
((
uint
)
value
);
}
public
void
WriteSFixed64NoTag
(
long
value
)
{
WriteRawLittleEndian64
((
ulong
)
value
);
}
public
void
WriteSInt32NoTag
(
int
value
)
{
WriteRawVarint32
(
EncodeZigZag32
(
value
));
}
public
void
WriteSInt64NoTag
(
long
value
)
{
WriteRawVarint64
(
EncodeZigZag64
(
value
));
}
#
endregion
#
endregion
#
region
Underlying
writing
primitives
#
region
Underlying
writing
primitives
...
@@ -583,8 +733,7 @@ namespace Google.ProtocolBuffers {
...
@@ -583,8 +733,7 @@ namespace Google.ProtocolBuffers {
/// sint32 field, including the tag.
/// sint32 field, including the tag.
/// </summary>
/// </summary>
public
static
int
ComputeSInt32Size
(
int
fieldNumber
,
int
value
)
{
public
static
int
ComputeSInt32Size
(
int
fieldNumber
,
int
value
)
{
return
ComputeTagSize
(
fieldNumber
)
+
return
ComputeTagSize
(
fieldNumber
)
+
ComputeRawVarint32Size
(
EncodeZigZag32
(
value
));
ComputeRawVarint32Size
(
EncodeZigZag32
(
value
));
}
}
/// <summary>
/// <summary>
...
@@ -592,8 +741,169 @@ namespace Google.ProtocolBuffers {
...
@@ -592,8 +741,169 @@ namespace Google.ProtocolBuffers {
/// sint64 field, including the tag.
/// sint64 field, including the tag.
/// </summary>
/// </summary>
public
static
int
ComputeSInt64Size
(
int
fieldNumber
,
long
value
)
{
public
static
int
ComputeSInt64Size
(
int
fieldNumber
,
long
value
)
{
return
ComputeTagSize
(
fieldNumber
)
+
return
ComputeTagSize
(
fieldNumber
)
+
ComputeRawVarint64Size
(
EncodeZigZag64
(
value
));
ComputeRawVarint64Size
(
EncodeZigZag64
(
value
));
}
/// <summary>
/// Compute the number of bytes that would be needed to encode a
/// double field, including the tag.
/// </summary>
public
static
int
ComputeDoubleSizeNoTag
(
double
value
)
{
return
LittleEndian64Size
;
}
/// <summary>
/// Compute the number of bytes that would be needed to encode a
/// float field, including the tag.
/// </summary>
public
static
int
ComputeFloatSizeNoTag
(
float
value
)
{
return
LittleEndian32Size
;
}
/// <summary>
/// Compute the number of bytes that would be needed to encode a
/// uint64 field, including the tag.
/// </summary>
public
static
int
ComputeUInt64SizeNoTag
(
ulong
value
)
{
return
ComputeRawVarint64Size
(
value
);
}
/// <summary>
/// Compute the number of bytes that would be needed to encode an
/// int64 field, including the tag.
/// </summary>
public
static
int
ComputeInt64SizeNoTag
(
long
value
)
{
return
ComputeRawVarint64Size
((
ulong
)
value
);
}
/// <summary>
/// Compute the number of bytes that would be needed to encode an
/// int32 field, including the tag.
/// </summary>
public
static
int
ComputeInt32SizeNoTag
(
int
value
)
{
if
(
value
>=
0
)
{
return
ComputeRawVarint32Size
((
uint
)
value
);
}
else
{
// Must sign-extend.
return
10
;
}
}
/// <summary>
/// Compute the number of bytes that would be needed to encode a
/// fixed64 field, including the tag.
/// </summary>
public
static
int
ComputeFixed64SizeNoTag
(
ulong
value
)
{
return
LittleEndian64Size
;
}
/// <summary>
/// Compute the number of bytes that would be needed to encode a
/// fixed32 field, including the tag.
/// </summary>
public
static
int
ComputeFixed32SizeNoTag
(
uint
value
)
{
return
LittleEndian32Size
;
}
/// <summary>
/// Compute the number of bytes that would be needed to encode a
/// bool field, including the tag.
/// </summary>
public
static
int
ComputeBoolSizeNoTag
(
bool
value
)
{
return
1
;
}
/// <summary>
/// Compute the number of bytes that would be needed to encode a
/// string field, including the tag.
/// </summary>
public
static
int
ComputeStringSizeNoTag
(
String
value
)
{
int
byteArraySize
=
Encoding
.
UTF8
.
GetByteCount
(
value
);
return
ComputeRawVarint32Size
((
uint
)
byteArraySize
)
+
byteArraySize
;
}
/// <summary>
/// Compute the number of bytes that would be needed to encode a
/// group field, including the tag.
/// </summary>
public
static
int
ComputeGroupSizeNoTag
(
IMessage
value
)
{
return
value
.
SerializedSize
;
}
/// <summary>
/// Compute the number of bytes that would be needed to encode a
/// group field represented by an UnknownFieldSet, including the tag.
/// </summary>
public
static
int
ComputeUnknownGroupSizeNoTag
(
UnknownFieldSet
value
)
{
return
value
.
SerializedSize
;
}
/// <summary>
/// Compute the number of bytes that would be needed to encode an
/// embedded message field, including the tag.
/// </summary>
public
static
int
ComputeMessageSizeNoTag
(
IMessage
value
)
{
int
size
=
value
.
SerializedSize
;
return
ComputeRawVarint32Size
((
uint
)
size
)
+
size
;
}
/// <summary>
/// Compute the number of bytes that would be needed to encode a
/// bytes field, including the tag.
/// </summary>
public
static
int
ComputeBytesSizeNoTag
(
ByteString
value
)
{
return
ComputeRawVarint32Size
((
uint
)
value
.
Length
)
+
value
.
Length
;
}
/// <summary>
/// Compute the number of bytes that would be needed to encode a
/// uint32 field, including the tag.
/// </summary>
public
static
int
ComputeUInt32SizeNoTag
(
uint
value
)
{
return
ComputeRawVarint32Size
(
value
);
}
/// <summary>
/// Compute the number of bytes that would be needed to encode a
/// enum field, including the tag. The caller is responsible for
/// converting the enum value to its numeric value.
/// </summary>
public
static
int
ComputeEnumSizeNoTag
(
int
value
)
{
return
ComputeRawVarint32Size
((
uint
)
value
);
}
/// <summary>
/// Compute the number of bytes that would be needed to encode an
/// sfixed32 field, including the tag.
/// </summary>
public
static
int
ComputeSFixed32SizeNoTag
(
int
value
)
{
return
LittleEndian32Size
;
}
/// <summary>
/// Compute the number of bytes that would be needed to encode an
/// sfixed64 field, including the tag.
/// </summary>
public
static
int
ComputeSFixed64SizeNoTag
(
long
value
)
{
return
LittleEndian64Size
;
}
/// <summary>
/// Compute the number of bytes that would be needed to encode an
/// sint32 field, including the tag.
/// </summary>
public
static
int
ComputeSInt32SizeNoTag
(
int
value
)
{
return
ComputeRawVarint32Size
(
EncodeZigZag32
(
value
));
}
/// <summary>
/// Compute the number of bytes that would be needed to encode an
/// sint64 field, including the tag.
/// </summary>
public
static
int
ComputeSInt64SizeNoTag
(
long
value
)
{
return
ComputeRawVarint64Size
(
EncodeZigZag64
(
value
));
}
}
/*
/*
...
@@ -650,18 +960,10 @@ namespace Google.ProtocolBuffers {
...
@@ -650,18 +960,10 @@ namespace Google.ProtocolBuffers {
return
10
;
return
10
;
}
}
/// <summary>
/*
/// Compute the number of bytes that would be needed to encode a
* Compute the number of bytes that would be needed to encode a
/// field of arbitrary type, including the tag, to the stream.
* field of arbitrary type, including tag, to the stream.
/// </summary>
*
* @param type The field's type.
* @param number The field's number.
* @param value Object representing the field's value. Must be of the exact
* type which would be returned by
* {@link Message#getField(FieldDescriptor)} for
* this field.
*/
public
static
int
ComputeFieldSize
(
FieldType
fieldType
,
int
fieldNumber
,
Object
value
)
{
public
static
int
ComputeFieldSize
(
FieldType
fieldType
,
int
fieldNumber
,
Object
value
)
{
switch
(
fieldType
)
{
switch
(
fieldType
)
{
case
FieldType
.
Double
:
return
ComputeDoubleSize
(
fieldNumber
,
(
double
)
value
);
case
FieldType
.
Double
:
return
ComputeDoubleSize
(
fieldNumber
,
(
double
)
value
);
...
@@ -687,6 +989,35 @@ namespace Google.ProtocolBuffers {
...
@@ -687,6 +989,35 @@ namespace Google.ProtocolBuffers {
}
}
}
}
/// <summary>
/// Compute the number of bytes that would be needed to encode a
/// field of arbitrary type, excluding the tag, to the stream.
/// </summary>
public
static
int
ComputeFieldSizeNoTag
(
FieldType
fieldType
,
Object
value
)
{
switch
(
fieldType
)
{
case
FieldType
.
Double
:
return
ComputeDoubleSizeNoTag
((
double
)
value
);
case
FieldType
.
Float
:
return
ComputeFloatSizeNoTag
((
float
)
value
);
case
FieldType
.
Int64
:
return
ComputeInt64SizeNoTag
((
long
)
value
);
case
FieldType
.
UInt64
:
return
ComputeUInt64SizeNoTag
((
ulong
)
value
);
case
FieldType
.
Int32
:
return
ComputeInt32SizeNoTag
((
int
)
value
);
case
FieldType
.
Fixed64
:
return
ComputeFixed64SizeNoTag
((
ulong
)
value
);
case
FieldType
.
Fixed32
:
return
ComputeFixed32SizeNoTag
((
uint
)
value
);
case
FieldType
.
Bool
:
return
ComputeBoolSizeNoTag
((
bool
)
value
);
case
FieldType
.
String
:
return
ComputeStringSizeNoTag
((
string
)
value
);
case
FieldType
.
Group
:
return
ComputeGroupSizeNoTag
((
IMessage
)
value
);
case
FieldType
.
Message
:
return
ComputeMessageSizeNoTag
((
IMessage
)
value
);
case
FieldType
.
Bytes
:
return
ComputeBytesSizeNoTag
((
ByteString
)
value
);
case
FieldType
.
UInt32
:
return
ComputeUInt32SizeNoTag
((
uint
)
value
);
case
FieldType
.
SFixed32
:
return
ComputeSFixed32SizeNoTag
((
int
)
value
);
case
FieldType
.
SFixed64
:
return
ComputeSFixed64SizeNoTag
((
long
)
value
);
case
FieldType
.
SInt32
:
return
ComputeSInt32SizeNoTag
((
int
)
value
);
case
FieldType
.
SInt64
:
return
ComputeSInt64SizeNoTag
((
long
)
value
);
case
FieldType
.
Enum
:
return
ComputeEnumSizeNoTag
(((
EnumValueDescriptor
)
value
).
Number
);
default
:
throw
new
ArgumentOutOfRangeException
(
"Invalid field type "
+
fieldType
);
}
}
/// <summary>
/// <summary>
/// Compute the number of bytes that would be needed to encode a tag.
/// Compute the number of bytes that would be needed to encode a tag.
/// </summary>
/// </summary>
...
...
src/ProtocolBuffers/DescriptorProtos/DescriptorProtoFile.cs
View file @
25a28580
...
@@ -70,27 +70,27 @@ namespace Google.ProtocolBuffers.DescriptorProtos {
...
@@ -70,27 +70,27 @@ namespace Google.ProtocolBuffers.DescriptorProtos {
"AioJCOgHEICAgIACIogBCg5NZXNzYWdlT3B0aW9ucxImChdtZXNzYWdlX3Nl"
+
"AioJCOgHEICAgIACIogBCg5NZXNzYWdlT3B0aW9ucxImChdtZXNzYWdlX3Nl"
+
"dF93aXJlX2Zvcm1hdBgBIAEoCDoFZmFsc2USQwoUdW5pbnRlcnByZXRlZF9v"
+
"dF93aXJlX2Zvcm1hdBgBIAEoCDoFZmFsc2USQwoUdW5pbnRlcnByZXRlZF9v"
+
"cHRpb24Y5wcgAygLMiQuZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRP"
+
"cHRpb24Y5wcgAygLMiQuZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRP"
+
"cHRpb24qCQjoBxCAgICAAiL
V
AQoMRmllbGRPcHRpb25zEjIKBWN0eXBlGAEg"
+
"cHRpb24qCQjoBxCAgICAAiL
l
AQoMRmllbGRPcHRpb25zEjIKBWN0eXBlGAEg"
+
"ASgOMiMuZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9ucy5DVHlwZRI
cChRl
"
+
"ASgOMiMuZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9ucy5DVHlwZRI
OCgZw
"
+
"
eHBlcmltZW50YWxfbWFwX2tleRgJIAEoCRJDChR1bmludGVycHJldGVkX29w
"
+
"
YWNrZWQYAiABKAgSHAoUZXhwZXJpbWVudGFsX21hcF9rZXkYCSABKAkSQwoU
"
+
"d
GlvbhjnByADKAsyJC5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9w
"
+
"d
W5pbnRlcnByZXRlZF9vcHRpb24Y5wcgAygLMiQuZ29vZ2xlLnByb3RvYnVm
"
+
"
dGlvbiIjCgVDVHlwZRIICgRDT1JEEAESEAoMU1RSSU5HX1BJRUNFEAIqCQjo
"
+
"
LlVuaW50ZXJwcmV0ZWRPcHRpb24iIwoFQ1R5cGUSCAoEQ09SRBABEhAKDFNU
"
+
"
BxCAgICAAiJdCgtFbnVtT3B0aW9ucxJDChR1bmludGVycHJldGVkX29wdGlv
"
+
"
UklOR19QSUVDRRACKgkI6AcQgICAgAIiXQoLRW51bU9wdGlvbnMSQwoUdW5p
"
+
"b
hjnByADKAsyJC5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlv
"
+
"b
nRlcnByZXRlZF9vcHRpb24Y5wcgAygLMiQuZ29vZ2xlLnByb3RvYnVmLlVu
"
+
"
bioJCOgHEICAgIACImIKEEVudW1WYWx1ZU9wdGlvbnMSQwoUdW5pbnRlcnBy
"
+
"
aW50ZXJwcmV0ZWRPcHRpb24qCQjoBxCAgICAAiJiChBFbnVtVmFsdWVPcHRp
"
+
"
ZXRlZF9vcHRpb24Y5wcgAygLMiQuZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJ
w"
+
"
b25zEkMKFHVuaW50ZXJwcmV0ZWRfb3B0aW9uGOcHIAMoCzIkLmdvb2dsZS5
w"
+
"cm
V0ZWRPcHRpb24qCQjoBxCAgICAAiJgCg5TZXJ2aWNlT3B0aW9ucxJDChR1
"
+
"cm
90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uKgkI6AcQgICAgAIiYAoOU2Vy
"
+
"
bmludGVycHJldGVkX29wdGlvbhjnByADKAsyJC5nb29nbGUucHJvdG9idWY
u"
+
"
dmljZU9wdGlvbnMSQwoUdW5pbnRlcnByZXRlZF9vcHRpb24Y5wcgAygLMiQ
u"
+
"
VW5pbnRlcnByZXRlZE9wdGlvbioJCOgHEICAgIACIl8KDU1ldGhvZE9wdGlv
"
+
"
Z29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24qCQjoBxCAgICA
"
+
"
bnMSQwoUdW5pbnRlcnByZXRlZF9vcHRpb24Y5wcgAygLMiQuZ29vZ2xlLnBy
"
+
"
AiJfCg1NZXRob2RPcHRpb25zEkMKFHVuaW50ZXJwcmV0ZWRfb3B0aW9uGOcH
"
+
"
b3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24qCQjoBxCAgICAAiKFAgoTVW5p
"
+
"
IAMoCzIkLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uKgkI
"
+
"
bnRlcnByZXRlZE9wdGlvbhI7CgRuYW1lGAIgAygLMi0uZ29vZ2xlLnByb3Rv
"
+
"
6AcQgICAgAIihQIKE1VuaW50ZXJwcmV0ZWRPcHRpb24SOwoEbmFtZRgCIAMo
"
+
"
YnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24uTmFtZVBhcnQSGAoQaWRlbnRpZmll
"
+
"
CzItLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLk5hbWVQ
"
+
"
cl92YWx1ZRgDIAEoCRIaChJwb3NpdGl2ZV9pbnRfdmFsdWUYBCABKAQSGgoS
"
+
"
YXJ0EhgKEGlkZW50aWZpZXJfdmFsdWUYAyABKAkSGgoScG9zaXRpdmVfaW50
"
+
"
bmVnYXRpdmVfaW50X3ZhbHVlGAUgASgDEhQKDGRvdWJsZV92YWx1ZRgGIAEo
"
+
"
X3ZhbHVlGAQgASgEEhoKEm5lZ2F0aXZlX2ludF92YWx1ZRgFIAEoAxIUCgxk
"
+
"
ARIUCgxzdHJpbmdfdmFsdWUYByABKAwaMwoITmFtZVBhcnQSEQoJbmFtZV9w
"
+
"
b3VibGVfdmFsdWUYBiABKAESFAoMc3RyaW5nX3ZhbHVlGAcgASgMGjMKCE5h
"
+
"
YXJ0GAEgAigJEhQKDGlzX2V4dGVuc2lvbhgCIAIoCEIpChNjb20uZ29vZ2xl
"
+
"
bWVQYXJ0EhEKCW5hbWVfcGFydBgBIAIoCRIUCgxpc19leHRlbnNpb24YAiAC
"
+
"
LnByb3RvYnVmQhBEZXNjcmlwdG9yUHJvdG9zSAE=
"
),
"
KAhCKQoTY29tLmdvb2dsZS5wcm90b2J1ZkIQRGVzY3JpcHRvclByb3Rvc0gB
"
),
new
pbd
::
FileDescriptor
[]
{
new
pbd
::
FileDescriptor
[]
{
});
});
#
endregion
#
endregion
...
@@ -155,7 +155,7 @@ namespace Google.ProtocolBuffers.DescriptorProtos {
...
@@ -155,7 +155,7 @@ namespace Google.ProtocolBuffers.DescriptorProtos {
=
Descriptor
.
MessageTypes
[
10
];
=
Descriptor
.
MessageTypes
[
10
];
internal
static
pb
::
FieldAccess
.
FieldAccessorTable
<
global
::
Google
.
ProtocolBuffers
.
DescriptorProtos
.
FieldOptions
,
global
::
Google
.
ProtocolBuffers
.
DescriptorProtos
.
FieldOptions
.
Builder
>
internal__static_google_protobuf_FieldOptions__FieldAccessorTable
internal
static
pb
::
FieldAccess
.
FieldAccessorTable
<
global
::
Google
.
ProtocolBuffers
.
DescriptorProtos
.
FieldOptions
,
global
::
Google
.
ProtocolBuffers
.
DescriptorProtos
.
FieldOptions
.
Builder
>
internal__static_google_protobuf_FieldOptions__FieldAccessorTable
=
new
pb
::
FieldAccess
.
FieldAccessorTable
<
global
::
Google
.
ProtocolBuffers
.
DescriptorProtos
.
FieldOptions
,
global
::
Google
.
ProtocolBuffers
.
DescriptorProtos
.
FieldOptions
.
Builder
>(
internal__static_google_protobuf_FieldOptions__Descriptor
,
=
new
pb
::
FieldAccess
.
FieldAccessorTable
<
global
::
Google
.
ProtocolBuffers
.
DescriptorProtos
.
FieldOptions
,
global
::
Google
.
ProtocolBuffers
.
DescriptorProtos
.
FieldOptions
.
Builder
>(
internal__static_google_protobuf_FieldOptions__Descriptor
,
new
string
[]
{
"Ctype"
,
"ExperimentalMapKey"
,
"UninterpretedOption"
,
});
new
string
[]
{
"Ctype"
,
"
Packed"
,
"
ExperimentalMapKey"
,
"UninterpretedOption"
,
});
internal
static
readonly
pbd
::
MessageDescriptor
internal__static_google_protobuf_EnumOptions__Descriptor
internal
static
readonly
pbd
::
MessageDescriptor
internal__static_google_protobuf_EnumOptions__Descriptor
=
Descriptor
.
MessageTypes
[
11
];
=
Descriptor
.
MessageTypes
[
11
];
internal
static
pb
::
FieldAccess
.
FieldAccessorTable
<
global
::
Google
.
ProtocolBuffers
.
DescriptorProtos
.
EnumOptions
,
global
::
Google
.
ProtocolBuffers
.
DescriptorProtos
.
EnumOptions
.
Builder
>
internal__static_google_protobuf_EnumOptions__FieldAccessorTable
internal
static
pb
::
FieldAccess
.
FieldAccessorTable
<
global
::
Google
.
ProtocolBuffers
.
DescriptorProtos
.
EnumOptions
,
global
::
Google
.
ProtocolBuffers
.
DescriptorProtos
.
EnumOptions
.
Builder
>
internal__static_google_protobuf_EnumOptions__FieldAccessorTable
...
@@ -541,8 +541,10 @@ namespace Google.ProtocolBuffers.DescriptorProtos {
...
@@ -541,8 +541,10 @@ namespace Google.ProtocolBuffers.DescriptorProtos {
if
(
HasPackage
)
{
if
(
HasPackage
)
{
output
.
WriteString
(
2
,
Package
);
output
.
WriteString
(
2
,
Package
);
}
}
foreach
(
string
element
in
DependencyList
)
{
if
(
dependency_
.
Count
>
0
)
{
output
.
WriteString
(
3
,
element
);
foreach
(
string
element
in
dependency_
)
{
output
.
WriteString
(
3
,
element
);
}
}
}
foreach
(
global
::
Google
.
ProtocolBuffers
.
DescriptorProtos
.
DescriptorProto
element
in
MessageTypeList
)
{
foreach
(
global
::
Google
.
ProtocolBuffers
.
DescriptorProtos
.
DescriptorProto
element
in
MessageTypeList
)
{
output
.
WriteMessage
(
4
,
element
);
output
.
WriteMessage
(
4
,
element
);
...
@@ -575,8 +577,13 @@ namespace Google.ProtocolBuffers.DescriptorProtos {
...
@@ -575,8 +577,13 @@ namespace Google.ProtocolBuffers.DescriptorProtos {
if
(
HasPackage
)
{
if
(
HasPackage
)
{
size
+=
pb
::
CodedOutputStream
.
ComputeStringSize
(
2
,
Package
);
size
+=
pb
::
CodedOutputStream
.
ComputeStringSize
(
2
,
Package
);
}
}
foreach
(
string
element
in
DependencyList
)
{
{
size
+=
pb
::
CodedOutputStream
.
ComputeStringSize
(
3
,
element
);
int
dataSize
=
0
;
foreach
(
string
element
in
DependencyList
)
{
dataSize
+=
pb
::
CodedOutputStream
.
ComputeStringSizeNoTag
(
element
);
}
size
+=
dataSize
;
size
+=
1
*
dependency_
.
Count
;
}
}
foreach
(
global
::
Google
.
ProtocolBuffers
.
DescriptorProtos
.
DescriptorProto
element
in
MessageTypeList
)
{
foreach
(
global
::
Google
.
ProtocolBuffers
.
DescriptorProtos
.
DescriptorProto
element
in
MessageTypeList
)
{
size
+=
pb
::
CodedOutputStream
.
ComputeMessageSize
(
4
,
element
);
size
+=
pb
::
CodedOutputStream
.
ComputeMessageSize
(
4
,
element
);
...
@@ -4413,6 +4420,15 @@ namespace Google.ProtocolBuffers.DescriptorProtos {
...
@@ -4413,6 +4420,15 @@ namespace Google.ProtocolBuffers.DescriptorProtos {
get
{
return
ctype_
;
}
get
{
return
ctype_
;
}
}
}
private
bool
hasPacked
;
private
bool
packed_
=
false
;
public
bool
HasPacked
{
get
{
return
hasPacked
;
}
}
public
bool
Packed
{
get
{
return
packed_
;
}
}
private
bool
hasExperimentalMapKey
;
private
bool
hasExperimentalMapKey
;
private
string
experimentalMapKey_
=
""
;
private
string
experimentalMapKey_
=
""
;
public
bool
HasExperimentalMapKey
{
public
bool
HasExperimentalMapKey
{
...
@@ -4448,6 +4464,9 @@ namespace Google.ProtocolBuffers.DescriptorProtos {
...
@@ -4448,6 +4464,9 @@ namespace Google.ProtocolBuffers.DescriptorProtos {
if
(
HasCtype
)
{
if
(
HasCtype
)
{
output
.
WriteEnum
(
1
,
(
int
)
Ctype
);
output
.
WriteEnum
(
1
,
(
int
)
Ctype
);
}
}
if
(
HasPacked
)
{
output
.
WriteBool
(
2
,
Packed
);
}
if
(
HasExperimentalMapKey
)
{
if
(
HasExperimentalMapKey
)
{
output
.
WriteString
(
9
,
ExperimentalMapKey
);
output
.
WriteString
(
9
,
ExperimentalMapKey
);
}
}
...
@@ -4468,6 +4487,9 @@ namespace Google.ProtocolBuffers.DescriptorProtos {
...
@@ -4468,6 +4487,9 @@ namespace Google.ProtocolBuffers.DescriptorProtos {
if
(
HasCtype
)
{
if
(
HasCtype
)
{
size
+=
pb
::
CodedOutputStream
.
ComputeEnumSize
(
1
,
(
int
)
Ctype
);
size
+=
pb
::
CodedOutputStream
.
ComputeEnumSize
(
1
,
(
int
)
Ctype
);
}
}
if
(
HasPacked
)
{
size
+=
pb
::
CodedOutputStream
.
ComputeBoolSize
(
2
,
Packed
);
}
if
(
HasExperimentalMapKey
)
{
if
(
HasExperimentalMapKey
)
{
size
+=
pb
::
CodedOutputStream
.
ComputeStringSize
(
9
,
ExperimentalMapKey
);
size
+=
pb
::
CodedOutputStream
.
ComputeStringSize
(
9
,
ExperimentalMapKey
);
}
}
...
@@ -4561,6 +4583,9 @@ namespace Google.ProtocolBuffers.DescriptorProtos {
...
@@ -4561,6 +4583,9 @@ namespace Google.ProtocolBuffers.DescriptorProtos {
if
(
other
.
HasCtype
)
{
if
(
other
.
HasCtype
)
{
Ctype
=
other
.
Ctype
;
Ctype
=
other
.
Ctype
;
}
}
if
(
other
.
HasPacked
)
{
Packed
=
other
.
Packed
;
}
if
(
other
.
HasExperimentalMapKey
)
{
if
(
other
.
HasExperimentalMapKey
)
{
ExperimentalMapKey
=
other
.
ExperimentalMapKey
;
ExperimentalMapKey
=
other
.
ExperimentalMapKey
;
}
}
...
@@ -4601,6 +4626,10 @@ namespace Google.ProtocolBuffers.DescriptorProtos {
...
@@ -4601,6 +4626,10 @@ namespace Google.ProtocolBuffers.DescriptorProtos {
}
}
break
;
break
;
}
}
case
16
:
{
Packed
=
input
.
ReadBool
();
break
;
}
case
74
:
{
case
74
:
{
ExperimentalMapKey
=
input
.
ReadString
();
ExperimentalMapKey
=
input
.
ReadString
();
break
;
break
;
...
@@ -4634,6 +4663,24 @@ namespace Google.ProtocolBuffers.DescriptorProtos {
...
@@ -4634,6 +4663,24 @@ namespace Google.ProtocolBuffers.DescriptorProtos {
return
this
;
return
this
;
}
}
public
bool
HasPacked
{
get
{
return
result
.
HasPacked
;
}
}
public
bool
Packed
{
get
{
return
result
.
Packed
;
}
set
{
SetPacked
(
value
);
}
}
public
Builder
SetPacked
(
bool
value
)
{
result
.
hasPacked
=
true
;
result
.
packed_
=
value
;
return
this
;
}
public
Builder
ClearPacked
()
{
result
.
hasPacked
=
false
;
result
.
packed_
=
false
;
return
this
;
}
public
bool
HasExperimentalMapKey
{
public
bool
HasExperimentalMapKey
{
get
{
return
result
.
HasExperimentalMapKey
;
}
get
{
return
result
.
HasExperimentalMapKey
;
}
}
}
...
...
src/ProtocolBuffers/Descriptors/FieldDescriptor.cs
View file @
25a28580
...
@@ -176,6 +176,10 @@ namespace Google.ProtocolBuffers.Descriptors {
...
@@ -176,6 +176,10 @@ namespace Google.ProtocolBuffers.Descriptors {
get
{
return
Proto
.
Label
==
FieldDescriptorProto
.
Types
.
Label
.
LABEL_REPEATED
;
}
get
{
return
Proto
.
Label
==
FieldDescriptorProto
.
Types
.
Label
.
LABEL_REPEATED
;
}
}
}
public
bool
IsPacked
{
get
{
return
Proto
.
Options
.
Packed
;
}
}
/// <valule>
/// <valule>
/// Indicates whether or not the field had an explicitly-defined default value.
/// Indicates whether or not the field had an explicitly-defined default value.
/// </value>
/// </value>
...
...
src/ProtocolBuffers/FieldSet.cs
View file @
25a28580
...
@@ -368,8 +368,23 @@ namespace Google.ProtocolBuffers {
...
@@ -368,8 +368,23 @@ namespace Google.ProtocolBuffers {
output
.
WriteMessageSetExtension
(
field
.
FieldNumber
,
(
IMessage
)
value
);
output
.
WriteMessageSetExtension
(
field
.
FieldNumber
,
(
IMessage
)
value
);
}
else
{
}
else
{
if
(
field
.
IsRepeated
)
{
if
(
field
.
IsRepeated
)
{
foreach
(
object
element
in
(
IEnumerable
)
value
)
{
IEnumerable
valueList
=
(
IEnumerable
)
value
;
output
.
WriteField
(
field
.
FieldType
,
field
.
FieldNumber
,
element
);
if
(
field
.
IsPacked
)
{
output
.
WriteTag
(
field
.
FieldNumber
,
WireFormat
.
WireType
.
LengthDelimited
);
// Compute the total data size so the length can be written.
int
dataSize
=
0
;
foreach
(
object
element
in
valueList
)
{
dataSize
+=
CodedOutputStream
.
ComputeFieldSizeNoTag
(
field
.
FieldType
,
element
);
}
output
.
WriteRawVarint32
((
uint
)
dataSize
);
// Write the data itself, without any tags.
foreach
(
object
element
in
valueList
)
{
output
.
WriteFieldNoTag
(
field
.
FieldType
,
element
);
}
}
else
{
foreach
(
object
element
in
valueList
)
{
output
.
WriteField
(
field
.
FieldType
,
field
.
FieldNumber
,
element
);
}
}
}
}
else
{
}
else
{
output
.
WriteField
(
field
.
FieldType
,
field
.
FieldNumber
,
value
);
output
.
WriteField
(
field
.
FieldType
,
field
.
FieldNumber
,
value
);
...
@@ -389,11 +404,20 @@ namespace Google.ProtocolBuffers {
...
@@ -389,11 +404,20 @@ namespace Google.ProtocolBuffers {
object
value
=
entry
.
Value
;
object
value
=
entry
.
Value
;
if
(
field
.
IsExtension
&&
field
.
ContainingType
.
Options
.
MessageSetWireFormat
)
{
if
(
field
.
IsExtension
&&
field
.
ContainingType
.
Options
.
MessageSetWireFormat
)
{
size
+=
CodedOutputStream
.
ComputeMessageSetExtensionSize
(
field
.
FieldNumber
,
(
IMessage
)
value
);
size
+=
CodedOutputStream
.
ComputeMessageSetExtensionSize
(
field
.
FieldNumber
,
(
IMessage
)
value
);
}
else
{
}
else
{
if
(
field
.
IsRepeated
)
{
if
(
field
.
IsRepeated
)
{
foreach
(
object
element
in
(
IEnumerable
)
value
)
{
IEnumerable
valueList
=
(
IEnumerable
)
value
;
size
+=
CodedOutputStream
.
ComputeFieldSize
(
field
.
FieldType
,
field
.
FieldNumber
,
element
);
if
(
field
.
IsPacked
)
{
int
dataSize
=
0
;
foreach
(
object
element
in
valueList
)
{
dataSize
+=
CodedOutputStream
.
ComputeFieldSizeNoTag
(
field
.
FieldType
,
element
);
}
size
+=
dataSize
+
CodedOutputStream
.
ComputeTagSize
(
field
.
FieldNumber
)
+
CodedOutputStream
.
ComputeRawVarint32Size
((
uint
)
dataSize
);
}
else
{
foreach
(
object
element
in
valueList
)
{
size
+=
CodedOutputStream
.
ComputeFieldSize
(
field
.
FieldType
,
field
.
FieldNumber
,
element
);
}
}
}
}
else
{
}
else
{
size
+=
CodedOutputStream
.
ComputeFieldSize
(
field
.
FieldType
,
field
.
FieldNumber
,
value
);
size
+=
CodedOutputStream
.
ComputeFieldSize
(
field
.
FieldType
,
field
.
FieldNumber
,
value
);
...
...
src/ProtocolBuffers/UnknownFieldSet.cs
View file @
25a28580
...
@@ -497,50 +497,73 @@ namespace Google.ProtocolBuffers {
...
@@ -497,50 +497,73 @@ namespace Google.ProtocolBuffers {
}
}
// Unknown field or wrong wire type. Skip.
// Unknown field or wrong wire type. Skip.
if
(
field
==
null
||
wireType
!=
WireFormat
.
GetWireType
(
field
.
FieldType
))
{
if
(
field
==
null
||
wireType
!=
WireFormat
.
GetWireType
(
field
))
{
return
MergeFieldFrom
(
tag
,
input
);
return
MergeFieldFrom
(
tag
,
input
);
}
}
object
value
;
if
(
field
.
IsPacked
)
{
switch
(
field
.
FieldType
)
{
int
length
=
(
int
)
input
.
ReadRawVarint32
();
case
FieldType
.
Group
:
int
limit
=
input
.
PushLimit
(
length
);
case
FieldType
.
Message
:
{
if
(
field
.
FieldType
==
FieldType
.
Enum
)
{
IBuilder
subBuilder
;
while
(!
input
.
ReachedLimit
)
{
if
(
defaultFieldInstance
!=
null
)
{
subBuilder
=
defaultFieldInstance
.
WeakCreateBuilderForType
();
}
else
{
subBuilder
=
builder
.
CreateBuilderForField
(
field
);
}
if
(!
field
.
IsRepeated
)
{
subBuilder
.
WeakMergeFrom
((
IMessage
)
builder
[
field
]);
}
if
(
field
.
FieldType
==
FieldType
.
Group
)
{
input
.
ReadGroup
(
field
.
FieldNumber
,
subBuilder
,
extensionRegistry
);
}
else
{
input
.
ReadMessage
(
subBuilder
,
extensionRegistry
);
}
value
=
subBuilder
.
WeakBuild
();
break
;
}
case
FieldType
.
Enum
:
{
int
rawValue
=
input
.
ReadEnum
();
int
rawValue
=
input
.
ReadEnum
();
value
=
field
.
EnumType
.
FindValueByNumber
(
rawValue
);
object
value
=
field
.
EnumType
.
FindValueByNumber
(
rawValue
);
// If the number isn't recognized as a valid value for this enum,
// drop it.
if
(
value
==
null
)
{
if
(
value
==
null
)
{
MergeVarintField
(
fieldNumber
,
(
ulong
)
rawValue
);
// If the number isn't recognized as a valid value for this
// enum, drop it (don't even add it to unknownFields).
return
true
;
return
true
;
}
}
b
reak
;
b
uilder
.
WeakAddRepeatedField
(
field
,
value
)
;
}
}
default
:
}
else
{
value
=
input
.
ReadPrimitiveField
(
field
.
FieldType
);
while
(!
input
.
ReachedLimit
)
{
break
;
Object
value
=
input
.
ReadPrimitiveField
(
field
.
FieldType
);
}
builder
.
WeakAddRepeatedField
(
field
,
value
);
if
(
field
.
IsRepeated
)
{
}
builder
.
WeakAddRepeatedField
(
field
,
value
);
}
input
.
PopLimit
(
limit
);
}
else
{
}
else
{
builder
[
field
]
=
value
;
object
value
;
switch
(
field
.
FieldType
)
{
case
FieldType
.
Group
:
case
FieldType
.
Message
:
{
IBuilder
subBuilder
;
if
(
defaultFieldInstance
!=
null
)
{
subBuilder
=
defaultFieldInstance
.
WeakCreateBuilderForType
();
}
else
{
subBuilder
=
builder
.
CreateBuilderForField
(
field
);
}
if
(!
field
.
IsRepeated
)
{
subBuilder
.
WeakMergeFrom
((
IMessage
)
builder
[
field
]);
}
if
(
field
.
FieldType
==
FieldType
.
Group
)
{
input
.
ReadGroup
(
field
.
FieldNumber
,
subBuilder
,
extensionRegistry
);
}
else
{
input
.
ReadMessage
(
subBuilder
,
extensionRegistry
);
}
value
=
subBuilder
.
WeakBuild
();
break
;
}
case
FieldType
.
Enum
:
{
int
rawValue
=
input
.
ReadEnum
();
value
=
field
.
EnumType
.
FindValueByNumber
(
rawValue
);
// If the number isn't recognized as a valid value for this enum,
// drop it.
if
(
value
==
null
)
{
MergeVarintField
(
fieldNumber
,
(
ulong
)
rawValue
);
return
true
;
}
break
;
}
default
:
value
=
input
.
ReadPrimitiveField
(
field
.
FieldType
);
break
;
}
if
(
field
.
IsRepeated
)
{
builder
.
WeakAddRepeatedField
(
field
,
value
);
}
else
{
builder
[
field
]
=
value
;
}
}
}
return
true
;
return
true
;
}
}
...
...
src/ProtocolBuffers/WireFormat.cs
View file @
25a28580
...
@@ -46,6 +46,19 @@ namespace Google.ProtocolBuffers {
...
@@ -46,6 +46,19 @@ namespace Google.ProtocolBuffers {
/// </para>
/// </para>
/// </summary>
/// </summary>
public
static
class
WireFormat
{
public
static
class
WireFormat
{
#region Fixed sizes.
// TODO(jonskeet): Move these somewhere else. They're messy. Consider making FieldType a smarter kind of enum
internal
const
int
Fixed32Size
=
4
;
internal
const
int
Fixed64Size
=
8
;
internal
const
int
SFixed32Size
=
4
;
internal
const
int
SFixed64Size
=
8
;
internal
const
int
FloatSize
=
4
;
internal
const
int
DoubleSize
=
8
;
internal
const
int
BoolSize
=
1
;
#endregion
public
enum
WireType
:
uint
{
public
enum
WireType
:
uint
{
Varint
=
0
,
Varint
=
0
,
Fixed64
=
1
,
Fixed64
=
1
,
...
@@ -93,6 +106,18 @@ namespace Google.ProtocolBuffers {
...
@@ -93,6 +106,18 @@ namespace Google.ProtocolBuffers {
return
(
uint
)
(
fieldNumber
<<
TagTypeBits
)
|
(
uint
)
wireType
;
return
(
uint
)
(
fieldNumber
<<
TagTypeBits
)
|
(
uint
)
wireType
;
}
}
public
static
uint
MakeTag
(
FieldDescriptor
field
)
{
return
MakeTag
(
field
.
FieldNumber
,
GetWireType
(
field
));
}
/// <summary>
/// Returns the wire type for the given field descriptor. This differs
/// from GetWireType(FieldType) for packed repeated fields.
/// </summary>
internal
static
WireType
GetWireType
(
FieldDescriptor
descriptor
)
{
return
descriptor
.
IsPacked
?
WireType
.
LengthDelimited
:
GetWireType
(
descriptor
.
FieldType
);
}
/// <summary>
/// <summary>
/// Converts a field type to its wire type. Done with a switch for the sake
/// Converts a field type to its wire type. Done with a switch for the sake
/// of speed - this is significantly faster than a dictionary lookup.
/// of speed - this is significantly faster than a dictionary lookup.
...
...
testdata/golden_packed_fields_message
0 → 100644
View file @
25a28580
File added
todo.txt
View file @
25a28580
Current task list (not in order)
Current task list (not in order)
- Performance framework
- Optionally remove dependencies to csharp options
- Optionally remove dependencies to core and csharp options (2.0.3
will remove core dependency)
- Remove multifile support
- Remove multifile support
- Mono support
- Mono support
- Docs
- Docs
- Clean up protogen code
- Clean up protogen code
- Add flags to protogen
- Add flags to protogen
- Avoid using reflection for messages which don't need it (is this
possible?)
- Add RegisterAllExtensions
- Add ToBuilder changes from Google's r92
- Silverlight changes (as per email to Jon)
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment