49
type sizer func(pointer, int) int
53
type marshaler func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error)
56
type marshalInfo struct {
58
fields []*marshalFieldInfo
67
extElems map[int32]*marshalElemInfo
76
type marshalFieldInfo struct {
85
oneofElems map[reflect.Type]*marshalElemInfo
89
type marshalElemInfo struct {
98
marshalInfoMap = map[reflect.Type]*marshalInfo{}
99
marshalInfoLock sync.Mutex
101
uint8SliceType = reflect.TypeOf(([]uint8)(nil)).Kind()
107
func getMarshalInfo(t reflect.Type) *marshalInfo {
108
marshalInfoLock.Lock()
109
u, ok := marshalInfoMap[t]
111
u = &marshalInfo{typ: t}
112
marshalInfoMap[t] = u
114
marshalInfoLock.Unlock()
122
func (a *InternalMessageInfo) Size(msg Message) int {
123
u := getMessageMarshalInfo(msg, a)
124
ptr := toPointer(&msg)
138
func (a *InternalMessageInfo) Marshal(b []byte, msg Message, deterministic bool) ([]byte, error) {
139
u := getMessageMarshalInfo(msg, a)
140
ptr := toPointer(&msg)
147
return u.marshal(b, ptr, deterministic)
150
func getMessageMarshalInfo(msg interface{}, a *InternalMessageInfo) *marshalInfo {
153
u := atomicLoadMarshalInfo(&a.marshal)
156
t := reflect.ValueOf(msg).Type()
157
if t.Kind() != reflect.Ptr {
158
panic(fmt.Sprintf("cannot handle non-pointer message type %v", t))
160
u = getMarshalInfo(t.Elem())
163
atomicStoreMarshalInfo(&a.marshal, u)
170
func (u *marshalInfo) size(ptr pointer) int {
171
if atomic.LoadInt32(&u.initialized) == 0 {
172
u.computeMarshalInfo()
180
s := ptr.asPointerTo(u.typ).Interface().(Sizer)
185
s := ptr.asPointerTo(u.typ).Interface().(ProtoSizer)
189
m := ptr.asPointerTo(u.typ).Interface().(Marshaler)
195
for _, f := range u.fields {
196
if f.isPointer && ptr.offset(f.field).getPointer().isNil() {
200
n += f.sizer(ptr.offset(f.field), f.tagsize)
202
if u.extensions.IsValid() {
203
e := ptr.offset(u.extensions).toExtensions()
205
n += u.sizeMessageSet(e)
207
n += u.sizeExtensions(e)
210
if u.v1extensions.IsValid() {
211
m := *ptr.offset(u.v1extensions).toOldExtensions()
212
n += u.sizeV1Extensions(m)
214
if u.bytesExtensions.IsValid() {
215
s := *ptr.offset(u.bytesExtensions).toBytes()
218
if u.unrecognized.IsValid() {
219
s := *ptr.offset(u.unrecognized).toBytes()
224
if u.sizecache.IsValid() {
225
atomic.StoreInt32(ptr.offset(u.sizecache).toInt32(), int32(n))
232
func (u *marshalInfo) cachedsize(ptr pointer) int {
233
if u.sizecache.IsValid() {
234
return int(atomic.LoadInt32(ptr.offset(u.sizecache).toInt32()))
243
func (u *marshalInfo) marshal(b []byte, ptr pointer, deterministic bool) ([]byte, error) {
244
if atomic.LoadInt32(&u.initialized) == 0 {
245
u.computeMarshalInfo()
251
m := ptr.asPointerTo(u.typ).Interface().(Marshaler)
252
b1, err := m.Marshal()
257
var err, errLater error
259
if u.extensions.IsValid() {
260
e := ptr.offset(u.extensions).toExtensions()
262
b, err = u.appendMessageSet(b, e, deterministic)
264
b, err = u.appendExtensions(b, e, deterministic)
270
if u.v1extensions.IsValid() {
271
m := *ptr.offset(u.v1extensions).toOldExtensions()
272
b, err = u.appendV1Extensions(b, m, deterministic)
277
if u.bytesExtensions.IsValid() {
278
s := *ptr.offset(u.bytesExtensions).toBytes()
281
for _, f := range u.fields {
283
if f.isPointer && ptr.offset(f.field).getPointer().isNil() {
287
errLater = &RequiredNotSetError{f.name}
292
if f.isPointer && ptr.offset(f.field).getPointer().isNil() {
296
b, err = f.marshaler(b, ptr.offset(f.field), f.wiretag, deterministic)
298
if err1, ok := err.(*RequiredNotSetError); ok {
302
errLater = &RequiredNotSetError{f.name + "." + err1.field}
306
if err == errRepeatedHasNil {
307
err = errors.New("proto: repeated field " + f.name + " has nil element")
309
if err == errInvalidUTF8 {
311
fullName := revProtoTypes[reflect.PtrTo(u.typ)] + "." + f.name
312
errLater = &invalidUTF8Error{fullName}
319
if u.unrecognized.IsValid() {
320
s := *ptr.offset(u.unrecognized).toBytes()
327
func (u *marshalInfo) computeMarshalInfo() {
330
if u.initialized != 0 {
335
u.unrecognized = invalidField
336
u.extensions = invalidField
337
u.v1extensions = invalidField
338
u.bytesExtensions = invalidField
339
u.sizecache = invalidField
340
isOneofMessage := false
342
if reflect.PtrTo(t).Implements(sizerType) {
345
if reflect.PtrTo(t).Implements(protosizerType) {
346
u.hasprotosizer = true
350
if reflect.PtrTo(t).Implements(marshalerType) {
351
u.hasmarshaler = true
352
atomic.StoreInt32(&u.initialized, 1)
359
for i := 0; i < t.NumField(); i++ {
361
if f.Tag.Get("protobuf_oneof") != "" {
362
isOneofMessage = true
364
if !strings.HasPrefix(f.Name, "XXX_") {
368
case "XXX_sizecache":
369
u.sizecache = toField(&f)
370
case "XXX_unrecognized":
371
u.unrecognized = toField(&f)
372
case "XXX_InternalExtensions":
373
u.extensions = toField(&f)
374
u.messageset = f.Tag.Get("protobuf_messageset") == "1"
375
case "XXX_extensions":
376
if f.Type.Kind() == reflect.Map {
377
u.v1extensions = toField(&f)
379
u.bytesExtensions = toField(&f)
381
case "XXX_NoUnkeyedLiteral":
384
panic("unknown XXX field: " + f.Name)
390
var oneofImplementers []interface{}
393
switch m := reflect.Zero(reflect.PtrTo(t)).Interface().(type) {
394
case oneofFuncsIface:
395
_, _, _, oneofImplementers = m.XXX_OneofFuncs()
396
case oneofWrappersIface:
397
oneofImplementers = m.XXX_OneofWrappers()
402
fields := make([]marshalFieldInfo, n)
403
u.fields = make([]*marshalFieldInfo, 0, n)
404
for i, j := 0, 0; i < t.NumField(); i++ {
407
if strings.HasPrefix(f.Name, "XXX_") {
413
u.fields = append(u.fields, field)
414
if f.Tag.Get("protobuf_oneof") != "" {
415
field.computeOneofFieldInfo(&f, oneofImplementers)
418
if f.Tag.Get("protobuf") == "" {
420
u.fields = u.fields[:len(u.fields)-1]
424
field.computeMarshalFieldInfo(&f)
428
sort.Sort(byTag(u.fields))
430
atomic.StoreInt32(&u.initialized, 1)
434
type byTag []*marshalFieldInfo
436
func (a byTag) Len() int { return len(a) }
437
func (a byTag) Swap(i, j int) { a[i], a[j] = a[j], a[i] }
438
func (a byTag) Less(i, j int) bool { return a[i].wiretag < a[j].wiretag }
442
func (u *marshalInfo) getExtElemInfo(desc *ExtensionDesc) *marshalElemInfo {
445
e, ok := u.extElems[desc.Field]
451
t := reflect.TypeOf(desc.ExtensionType)
452
tags := strings.Split(desc.Tag, ",")
453
tag, err := strconv.Atoi(tags[1])
455
panic("tag is not an integer")
457
wt := wiretype(tags[0])
458
sizr, marshalr := typeMarshaler(t, tags, false, false)
459
e = &marshalElemInfo{
460
wiretag: uint64(tag)<<3 | wt,
461
tagsize: SizeVarint(uint64(tag) << 3),
464
isptr: t.Kind() == reflect.Ptr,
469
if u.extElems == nil {
470
u.extElems = make(map[int32]*marshalElemInfo)
472
u.extElems[desc.Field] = e
478
func (fi *marshalFieldInfo) computeMarshalFieldInfo(f *reflect.StructField) {
481
tags := strings.Split(f.Tag.Get("protobuf"), ",")
485
tag, err := strconv.Atoi(tags[1])
487
panic("tag is not an integer")
489
wt := wiretype(tags[0])
490
if tags[2] == "req" {
493
fi.setTag(f, tag, wt)
494
fi.setMarshaler(f, tags)
497
func (fi *marshalFieldInfo) computeOneofFieldInfo(f *reflect.StructField, oneofImplementers []interface{}) {
498
fi.field = toField(f)
499
fi.wiretag = math.MaxInt32
501
fi.sizer, fi.marshaler = makeOneOfMarshaler(fi, f)
502
fi.oneofElems = make(map[reflect.Type]*marshalElemInfo)
505
for _, o := range oneofImplementers {
506
t := reflect.TypeOf(o)
507
if !t.Implements(ityp) {
510
sf := t.Elem().Field(0)
511
tags := strings.Split(sf.Tag.Get("protobuf"), ",")
512
tag, err := strconv.Atoi(tags[1])
514
panic("tag is not an integer")
516
wt := wiretype(tags[0])
517
sizr, marshalr := typeMarshaler(sf.Type, tags, false, true)
518
fi.oneofElems[t.Elem()] = &marshalElemInfo{
519
wiretag: uint64(tag)<<3 | wt,
520
tagsize: SizeVarint(uint64(tag) << 3),
528
func wiretype(encoding string) uint64 {
534
case "varint", "zigzag32", "zigzag64":
539
return WireStartGroup
541
panic("unknown wire type " + encoding)
545
func (fi *marshalFieldInfo) setTag(f *reflect.StructField, tag int, wt uint64) {
546
fi.field = toField(f)
547
fi.wiretag = uint64(tag)<<3 | wt
548
fi.tagsize = SizeVarint(uint64(tag) << 3)
552
func (fi *marshalFieldInfo) setMarshaler(f *reflect.StructField, tags []string) {
553
switch f.Type.Kind() {
557
fi.sizer, fi.marshaler = makeMapMarshaler(f)
559
case reflect.Ptr, reflect.Slice:
562
fi.sizer, fi.marshaler = typeMarshaler(f.Type, tags, true, false)
570
func typeMarshaler(t reflect.Type, tags []string, nozero, oneof bool) (sizer, marshaler) {
575
if t.Kind() == reflect.Slice && t.Elem().Kind() != reflect.Uint8 {
579
if t.Kind() == reflect.Ptr {
589
isWktPointer := false
591
for i := 2; i < len(tags); i++ {
592
if tags[i] == "packed" {
595
if tags[i] == "proto3" {
598
if strings.HasPrefix(tags[i], "customtype=") {
601
if tags[i] == "stdtime" {
604
if tags[i] == "stdduration" {
607
if tags[i] == "wktptr" {
611
validateUTF8 = validateUTF8 && proto3
612
if !proto3 && !pointer && !slice {
617
if reflect.PtrTo(t).Implements(customType) {
619
return makeMessageRefSliceMarshaler(getMarshalInfo(t))
622
return makeCustomPtrMarshaler(getMarshalInfo(t))
624
return makeCustomMarshaler(getMarshalInfo(t))
626
panic(fmt.Sprintf("custom type: type: %v, does not implement the proto.custom interface", t))
633
return makeTimePtrSliceMarshaler(getMarshalInfo(t))
635
return makeTimePtrMarshaler(getMarshalInfo(t))
638
return makeTimeSliceMarshaler(getMarshalInfo(t))
640
return makeTimeMarshaler(getMarshalInfo(t))
646
return makeDurationPtrSliceMarshaler(getMarshalInfo(t))
648
return makeDurationPtrMarshaler(getMarshalInfo(t))
651
return makeDurationSliceMarshaler(getMarshalInfo(t))
653
return makeDurationMarshaler(getMarshalInfo(t))
658
case reflect.Float64:
661
return makeStdDoubleValuePtrSliceMarshaler(getMarshalInfo(t))
663
return makeStdDoubleValuePtrMarshaler(getMarshalInfo(t))
666
return makeStdDoubleValueSliceMarshaler(getMarshalInfo(t))
668
return makeStdDoubleValueMarshaler(getMarshalInfo(t))
669
case reflect.Float32:
672
return makeStdFloatValuePtrSliceMarshaler(getMarshalInfo(t))
674
return makeStdFloatValuePtrMarshaler(getMarshalInfo(t))
677
return makeStdFloatValueSliceMarshaler(getMarshalInfo(t))
679
return makeStdFloatValueMarshaler(getMarshalInfo(t))
683
return makeStdInt64ValuePtrSliceMarshaler(getMarshalInfo(t))
685
return makeStdInt64ValuePtrMarshaler(getMarshalInfo(t))
688
return makeStdInt64ValueSliceMarshaler(getMarshalInfo(t))
690
return makeStdInt64ValueMarshaler(getMarshalInfo(t))
694
return makeStdUInt64ValuePtrSliceMarshaler(getMarshalInfo(t))
696
return makeStdUInt64ValuePtrMarshaler(getMarshalInfo(t))
699
return makeStdUInt64ValueSliceMarshaler(getMarshalInfo(t))
701
return makeStdUInt64ValueMarshaler(getMarshalInfo(t))
705
return makeStdInt32ValuePtrSliceMarshaler(getMarshalInfo(t))
707
return makeStdInt32ValuePtrMarshaler(getMarshalInfo(t))
710
return makeStdInt32ValueSliceMarshaler(getMarshalInfo(t))
712
return makeStdInt32ValueMarshaler(getMarshalInfo(t))
716
return makeStdUInt32ValuePtrSliceMarshaler(getMarshalInfo(t))
718
return makeStdUInt32ValuePtrMarshaler(getMarshalInfo(t))
721
return makeStdUInt32ValueSliceMarshaler(getMarshalInfo(t))
723
return makeStdUInt32ValueMarshaler(getMarshalInfo(t))
727
return makeStdBoolValuePtrSliceMarshaler(getMarshalInfo(t))
729
return makeStdBoolValuePtrMarshaler(getMarshalInfo(t))
732
return makeStdBoolValueSliceMarshaler(getMarshalInfo(t))
734
return makeStdBoolValueMarshaler(getMarshalInfo(t))
738
return makeStdStringValuePtrSliceMarshaler(getMarshalInfo(t))
740
return makeStdStringValuePtrMarshaler(getMarshalInfo(t))
743
return makeStdStringValueSliceMarshaler(getMarshalInfo(t))
745
return makeStdStringValueMarshaler(getMarshalInfo(t))
749
return makeStdBytesValuePtrSliceMarshaler(getMarshalInfo(t))
751
return makeStdBytesValuePtrMarshaler(getMarshalInfo(t))
754
return makeStdBytesValueSliceMarshaler(getMarshalInfo(t))
756
return makeStdBytesValueMarshaler(getMarshalInfo(t))
758
panic(fmt.Sprintf("unknown wktpointer type %#v", t))
765
return sizeBoolPtr, appendBoolPtr
769
return sizeBoolPackedSlice, appendBoolPackedSlice
771
return sizeBoolSlice, appendBoolSlice
774
return sizeBoolValueNoZero, appendBoolValueNoZero
776
return sizeBoolValue, appendBoolValue
781
return sizeFixed32Ptr, appendFixed32Ptr
785
return sizeFixed32PackedSlice, appendFixed32PackedSlice
787
return sizeFixed32Slice, appendFixed32Slice
790
return sizeFixed32ValueNoZero, appendFixed32ValueNoZero
792
return sizeFixed32Value, appendFixed32Value
795
return sizeVarint32Ptr, appendVarint32Ptr
799
return sizeVarint32PackedSlice, appendVarint32PackedSlice
801
return sizeVarint32Slice, appendVarint32Slice
804
return sizeVarint32ValueNoZero, appendVarint32ValueNoZero
806
return sizeVarint32Value, appendVarint32Value
812
return sizeFixedS32Ptr, appendFixedS32Ptr
816
return sizeFixedS32PackedSlice, appendFixedS32PackedSlice
818
return sizeFixedS32Slice, appendFixedS32Slice
821
return sizeFixedS32ValueNoZero, appendFixedS32ValueNoZero
823
return sizeFixedS32Value, appendFixedS32Value
826
return sizeVarintS32Ptr, appendVarintS32Ptr
830
return sizeVarintS32PackedSlice, appendVarintS32PackedSlice
832
return sizeVarintS32Slice, appendVarintS32Slice
835
return sizeVarintS32ValueNoZero, appendVarintS32ValueNoZero
837
return sizeVarintS32Value, appendVarintS32Value
840
return sizeZigzag32Ptr, appendZigzag32Ptr
844
return sizeZigzag32PackedSlice, appendZigzag32PackedSlice
846
return sizeZigzag32Slice, appendZigzag32Slice
849
return sizeZigzag32ValueNoZero, appendZigzag32ValueNoZero
851
return sizeZigzag32Value, appendZigzag32Value
857
return sizeFixed64Ptr, appendFixed64Ptr
861
return sizeFixed64PackedSlice, appendFixed64PackedSlice
863
return sizeFixed64Slice, appendFixed64Slice
866
return sizeFixed64ValueNoZero, appendFixed64ValueNoZero
868
return sizeFixed64Value, appendFixed64Value
871
return sizeVarint64Ptr, appendVarint64Ptr
875
return sizeVarint64PackedSlice, appendVarint64PackedSlice
877
return sizeVarint64Slice, appendVarint64Slice
880
return sizeVarint64ValueNoZero, appendVarint64ValueNoZero
882
return sizeVarint64Value, appendVarint64Value
888
return sizeFixedS64Ptr, appendFixedS64Ptr
892
return sizeFixedS64PackedSlice, appendFixedS64PackedSlice
894
return sizeFixedS64Slice, appendFixedS64Slice
897
return sizeFixedS64ValueNoZero, appendFixedS64ValueNoZero
899
return sizeFixedS64Value, appendFixedS64Value
902
return sizeVarintS64Ptr, appendVarintS64Ptr
906
return sizeVarintS64PackedSlice, appendVarintS64PackedSlice
908
return sizeVarintS64Slice, appendVarintS64Slice
911
return sizeVarintS64ValueNoZero, appendVarintS64ValueNoZero
913
return sizeVarintS64Value, appendVarintS64Value
916
return sizeZigzag64Ptr, appendZigzag64Ptr
920
return sizeZigzag64PackedSlice, appendZigzag64PackedSlice
922
return sizeZigzag64Slice, appendZigzag64Slice
925
return sizeZigzag64ValueNoZero, appendZigzag64ValueNoZero
927
return sizeZigzag64Value, appendZigzag64Value
929
case reflect.Float32:
931
return sizeFloat32Ptr, appendFloat32Ptr
935
return sizeFloat32PackedSlice, appendFloat32PackedSlice
937
return sizeFloat32Slice, appendFloat32Slice
940
return sizeFloat32ValueNoZero, appendFloat32ValueNoZero
942
return sizeFloat32Value, appendFloat32Value
943
case reflect.Float64:
945
return sizeFloat64Ptr, appendFloat64Ptr
949
return sizeFloat64PackedSlice, appendFloat64PackedSlice
951
return sizeFloat64Slice, appendFloat64Slice
954
return sizeFloat64ValueNoZero, appendFloat64ValueNoZero
956
return sizeFloat64Value, appendFloat64Value
960
return sizeStringPtr, appendUTF8StringPtr
963
return sizeStringSlice, appendUTF8StringSlice
966
return sizeStringValueNoZero, appendUTF8StringValueNoZero
968
return sizeStringValue, appendUTF8StringValue
971
return sizeStringPtr, appendStringPtr
974
return sizeStringSlice, appendStringSlice
977
return sizeStringValueNoZero, appendStringValueNoZero
979
return sizeStringValue, appendStringValue
982
return sizeBytesSlice, appendBytesSlice
988
return sizeBytesOneof, appendBytesOneof
991
return sizeBytes3, appendBytes3
993
return sizeBytes, appendBytes
998
return makeGroupSliceMarshaler(getMarshalInfo(t))
1000
return makeGroupMarshaler(getMarshalInfo(t))
1004
return makeMessageSliceMarshaler(getMarshalInfo(t))
1006
return makeMessageMarshaler(getMarshalInfo(t))
1009
return makeMessageRefSliceMarshaler(getMarshalInfo(t))
1011
return makeMessageRefMarshaler(getMarshalInfo(t))
1015
panic(fmt.Sprintf("unknown or mismatched type: type: %v, wire type: %v", t, encoding))
1022
func sizeFixed32Value(_ pointer, tagsize int) int {
1025
func sizeFixed32ValueNoZero(ptr pointer, tagsize int) int {
1026
v := *ptr.toUint32()
1032
func sizeFixed32Ptr(ptr pointer, tagsize int) int {
1033
p := *ptr.toUint32Ptr()
1039
func sizeFixed32Slice(ptr pointer, tagsize int) int {
1040
s := *ptr.toUint32Slice()
1041
return (4 + tagsize) * len(s)
1043
func sizeFixed32PackedSlice(ptr pointer, tagsize int) int {
1044
s := *ptr.toUint32Slice()
1048
return 4*len(s) + SizeVarint(uint64(4*len(s))) + tagsize
1050
func sizeFixedS32Value(_ pointer, tagsize int) int {
1053
func sizeFixedS32ValueNoZero(ptr pointer, tagsize int) int {
1060
func sizeFixedS32Ptr(ptr pointer, tagsize int) int {
1061
p := ptr.getInt32Ptr()
1067
func sizeFixedS32Slice(ptr pointer, tagsize int) int {
1068
s := ptr.getInt32Slice()
1069
return (4 + tagsize) * len(s)
1071
func sizeFixedS32PackedSlice(ptr pointer, tagsize int) int {
1072
s := ptr.getInt32Slice()
1076
return 4*len(s) + SizeVarint(uint64(4*len(s))) + tagsize
1078
func sizeFloat32Value(_ pointer, tagsize int) int {
1081
func sizeFloat32ValueNoZero(ptr pointer, tagsize int) int {
1082
v := math.Float32bits(*ptr.toFloat32())
1088
func sizeFloat32Ptr(ptr pointer, tagsize int) int {
1089
p := *ptr.toFloat32Ptr()
1095
func sizeFloat32Slice(ptr pointer, tagsize int) int {
1096
s := *ptr.toFloat32Slice()
1097
return (4 + tagsize) * len(s)
1099
func sizeFloat32PackedSlice(ptr pointer, tagsize int) int {
1100
s := *ptr.toFloat32Slice()
1104
return 4*len(s) + SizeVarint(uint64(4*len(s))) + tagsize
1106
func sizeFixed64Value(_ pointer, tagsize int) int {
1109
func sizeFixed64ValueNoZero(ptr pointer, tagsize int) int {
1110
v := *ptr.toUint64()
1116
func sizeFixed64Ptr(ptr pointer, tagsize int) int {
1117
p := *ptr.toUint64Ptr()
1123
func sizeFixed64Slice(ptr pointer, tagsize int) int {
1124
s := *ptr.toUint64Slice()
1125
return (8 + tagsize) * len(s)
1127
func sizeFixed64PackedSlice(ptr pointer, tagsize int) int {
1128
s := *ptr.toUint64Slice()
1132
return 8*len(s) + SizeVarint(uint64(8*len(s))) + tagsize
1134
func sizeFixedS64Value(_ pointer, tagsize int) int {
1137
func sizeFixedS64ValueNoZero(ptr pointer, tagsize int) int {
1144
func sizeFixedS64Ptr(ptr pointer, tagsize int) int {
1145
p := *ptr.toInt64Ptr()
1151
func sizeFixedS64Slice(ptr pointer, tagsize int) int {
1152
s := *ptr.toInt64Slice()
1153
return (8 + tagsize) * len(s)
1155
func sizeFixedS64PackedSlice(ptr pointer, tagsize int) int {
1156
s := *ptr.toInt64Slice()
1160
return 8*len(s) + SizeVarint(uint64(8*len(s))) + tagsize
1162
func sizeFloat64Value(_ pointer, tagsize int) int {
1165
func sizeFloat64ValueNoZero(ptr pointer, tagsize int) int {
1166
v := math.Float64bits(*ptr.toFloat64())
1172
func sizeFloat64Ptr(ptr pointer, tagsize int) int {
1173
p := *ptr.toFloat64Ptr()
1179
func sizeFloat64Slice(ptr pointer, tagsize int) int {
1180
s := *ptr.toFloat64Slice()
1181
return (8 + tagsize) * len(s)
1183
func sizeFloat64PackedSlice(ptr pointer, tagsize int) int {
1184
s := *ptr.toFloat64Slice()
1188
return 8*len(s) + SizeVarint(uint64(8*len(s))) + tagsize
1190
func sizeVarint32Value(ptr pointer, tagsize int) int {
1191
v := *ptr.toUint32()
1192
return SizeVarint(uint64(v)) + tagsize
1194
func sizeVarint32ValueNoZero(ptr pointer, tagsize int) int {
1195
v := *ptr.toUint32()
1199
return SizeVarint(uint64(v)) + tagsize
1201
func sizeVarint32Ptr(ptr pointer, tagsize int) int {
1202
p := *ptr.toUint32Ptr()
1206
return SizeVarint(uint64(*p)) + tagsize
1208
func sizeVarint32Slice(ptr pointer, tagsize int) int {
1209
s := *ptr.toUint32Slice()
1211
for _, v := range s {
1212
n += SizeVarint(uint64(v)) + tagsize
1216
func sizeVarint32PackedSlice(ptr pointer, tagsize int) int {
1217
s := *ptr.toUint32Slice()
1222
for _, v := range s {
1223
n += SizeVarint(uint64(v))
1225
return n + SizeVarint(uint64(n)) + tagsize
1227
func sizeVarintS32Value(ptr pointer, tagsize int) int {
1229
return SizeVarint(uint64(v)) + tagsize
1231
func sizeVarintS32ValueNoZero(ptr pointer, tagsize int) int {
1236
return SizeVarint(uint64(v)) + tagsize
1238
func sizeVarintS32Ptr(ptr pointer, tagsize int) int {
1239
p := ptr.getInt32Ptr()
1243
return SizeVarint(uint64(*p)) + tagsize
1245
func sizeVarintS32Slice(ptr pointer, tagsize int) int {
1246
s := ptr.getInt32Slice()
1248
for _, v := range s {
1249
n += SizeVarint(uint64(v)) + tagsize
1253
func sizeVarintS32PackedSlice(ptr pointer, tagsize int) int {
1254
s := ptr.getInt32Slice()
1259
for _, v := range s {
1260
n += SizeVarint(uint64(v))
1262
return n + SizeVarint(uint64(n)) + tagsize
1264
func sizeVarint64Value(ptr pointer, tagsize int) int {
1265
v := *ptr.toUint64()
1266
return SizeVarint(v) + tagsize
1268
func sizeVarint64ValueNoZero(ptr pointer, tagsize int) int {
1269
v := *ptr.toUint64()
1273
return SizeVarint(v) + tagsize
1275
func sizeVarint64Ptr(ptr pointer, tagsize int) int {
1276
p := *ptr.toUint64Ptr()
1280
return SizeVarint(*p) + tagsize
1282
func sizeVarint64Slice(ptr pointer, tagsize int) int {
1283
s := *ptr.toUint64Slice()
1285
for _, v := range s {
1286
n += SizeVarint(v) + tagsize
1290
func sizeVarint64PackedSlice(ptr pointer, tagsize int) int {
1291
s := *ptr.toUint64Slice()
1296
for _, v := range s {
1299
return n + SizeVarint(uint64(n)) + tagsize
1301
func sizeVarintS64Value(ptr pointer, tagsize int) int {
1303
return SizeVarint(uint64(v)) + tagsize
1305
func sizeVarintS64ValueNoZero(ptr pointer, tagsize int) int {
1310
return SizeVarint(uint64(v)) + tagsize
1312
func sizeVarintS64Ptr(ptr pointer, tagsize int) int {
1313
p := *ptr.toInt64Ptr()
1317
return SizeVarint(uint64(*p)) + tagsize
1319
func sizeVarintS64Slice(ptr pointer, tagsize int) int {
1320
s := *ptr.toInt64Slice()
1322
for _, v := range s {
1323
n += SizeVarint(uint64(v)) + tagsize
1327
func sizeVarintS64PackedSlice(ptr pointer, tagsize int) int {
1328
s := *ptr.toInt64Slice()
1333
for _, v := range s {
1334
n += SizeVarint(uint64(v))
1336
return n + SizeVarint(uint64(n)) + tagsize
1338
func sizeZigzag32Value(ptr pointer, tagsize int) int {
1340
return SizeVarint(uint64((uint32(v)<<1)^uint32((int32(v)>>31)))) + tagsize
1342
func sizeZigzag32ValueNoZero(ptr pointer, tagsize int) int {
1347
return SizeVarint(uint64((uint32(v)<<1)^uint32((int32(v)>>31)))) + tagsize
1349
func sizeZigzag32Ptr(ptr pointer, tagsize int) int {
1350
p := ptr.getInt32Ptr()
1355
return SizeVarint(uint64((uint32(v)<<1)^uint32((int32(v)>>31)))) + tagsize
1357
func sizeZigzag32Slice(ptr pointer, tagsize int) int {
1358
s := ptr.getInt32Slice()
1360
for _, v := range s {
1361
n += SizeVarint(uint64((uint32(v)<<1)^uint32((int32(v)>>31)))) + tagsize
1365
func sizeZigzag32PackedSlice(ptr pointer, tagsize int) int {
1366
s := ptr.getInt32Slice()
1371
for _, v := range s {
1372
n += SizeVarint(uint64((uint32(v) << 1) ^ uint32((int32(v) >> 31))))
1374
return n + SizeVarint(uint64(n)) + tagsize
1376
func sizeZigzag64Value(ptr pointer, tagsize int) int {
1378
return SizeVarint(uint64(v<<1)^uint64((int64(v)>>63))) + tagsize
1380
func sizeZigzag64ValueNoZero(ptr pointer, tagsize int) int {
1385
return SizeVarint(uint64(v<<1)^uint64((int64(v)>>63))) + tagsize
1387
func sizeZigzag64Ptr(ptr pointer, tagsize int) int {
1388
p := *ptr.toInt64Ptr()
1393
return SizeVarint(uint64(v<<1)^uint64((int64(v)>>63))) + tagsize
1395
func sizeZigzag64Slice(ptr pointer, tagsize int) int {
1396
s := *ptr.toInt64Slice()
1398
for _, v := range s {
1399
n += SizeVarint(uint64(v<<1)^uint64((int64(v)>>63))) + tagsize
1403
func sizeZigzag64PackedSlice(ptr pointer, tagsize int) int {
1404
s := *ptr.toInt64Slice()
1409
for _, v := range s {
1410
n += SizeVarint(uint64(v<<1) ^ uint64((int64(v) >> 63)))
1412
return n + SizeVarint(uint64(n)) + tagsize
1414
func sizeBoolValue(_ pointer, tagsize int) int {
1417
func sizeBoolValueNoZero(ptr pointer, tagsize int) int {
1424
func sizeBoolPtr(ptr pointer, tagsize int) int {
1425
p := *ptr.toBoolPtr()
1431
func sizeBoolSlice(ptr pointer, tagsize int) int {
1432
s := *ptr.toBoolSlice()
1433
return (1 + tagsize) * len(s)
1435
func sizeBoolPackedSlice(ptr pointer, tagsize int) int {
1436
s := *ptr.toBoolSlice()
1440
return len(s) + SizeVarint(uint64(len(s))) + tagsize
1442
func sizeStringValue(ptr pointer, tagsize int) int {
1443
v := *ptr.toString()
1444
return len(v) + SizeVarint(uint64(len(v))) + tagsize
1446
func sizeStringValueNoZero(ptr pointer, tagsize int) int {
1447
v := *ptr.toString()
1451
return len(v) + SizeVarint(uint64(len(v))) + tagsize
1453
func sizeStringPtr(ptr pointer, tagsize int) int {
1454
p := *ptr.toStringPtr()
1459
return len(v) + SizeVarint(uint64(len(v))) + tagsize
1461
func sizeStringSlice(ptr pointer, tagsize int) int {
1462
s := *ptr.toStringSlice()
1464
for _, v := range s {
1465
n += len(v) + SizeVarint(uint64(len(v))) + tagsize
1469
func sizeBytes(ptr pointer, tagsize int) int {
1474
return len(v) + SizeVarint(uint64(len(v))) + tagsize
1476
func sizeBytes3(ptr pointer, tagsize int) int {
1481
return len(v) + SizeVarint(uint64(len(v))) + tagsize
1483
func sizeBytesOneof(ptr pointer, tagsize int) int {
1485
return len(v) + SizeVarint(uint64(len(v))) + tagsize
1487
func sizeBytesSlice(ptr pointer, tagsize int) int {
1488
s := *ptr.toBytesSlice()
1490
for _, v := range s {
1491
n += len(v) + SizeVarint(uint64(len(v))) + tagsize
1497
func appendFixed32(b []byte, v uint32) []byte {
1507
func appendFixed64(b []byte, v uint64) []byte {
1521
func appendVarint(b []byte, v uint64) []byte {
1526
b = append(b, byte(v))
1534
byte((v>>7)&0x7f|0x80),
1539
byte((v>>7)&0x7f|0x80),
1540
byte((v>>14)&0x7f|0x80),
1545
byte((v>>7)&0x7f|0x80),
1546
byte((v>>14)&0x7f|0x80),
1547
byte((v>>21)&0x7f|0x80),
1552
byte((v>>7)&0x7f|0x80),
1553
byte((v>>14)&0x7f|0x80),
1554
byte((v>>21)&0x7f|0x80),
1555
byte((v>>28)&0x7f|0x80),
1560
byte((v>>7)&0x7f|0x80),
1561
byte((v>>14)&0x7f|0x80),
1562
byte((v>>21)&0x7f|0x80),
1563
byte((v>>28)&0x7f|0x80),
1564
byte((v>>35)&0x7f|0x80),
1569
byte((v>>7)&0x7f|0x80),
1570
byte((v>>14)&0x7f|0x80),
1571
byte((v>>21)&0x7f|0x80),
1572
byte((v>>28)&0x7f|0x80),
1573
byte((v>>35)&0x7f|0x80),
1574
byte((v>>42)&0x7f|0x80),
1579
byte((v>>7)&0x7f|0x80),
1580
byte((v>>14)&0x7f|0x80),
1581
byte((v>>21)&0x7f|0x80),
1582
byte((v>>28)&0x7f|0x80),
1583
byte((v>>35)&0x7f|0x80),
1584
byte((v>>42)&0x7f|0x80),
1585
byte((v>>49)&0x7f|0x80),
1590
byte((v>>7)&0x7f|0x80),
1591
byte((v>>14)&0x7f|0x80),
1592
byte((v>>21)&0x7f|0x80),
1593
byte((v>>28)&0x7f|0x80),
1594
byte((v>>35)&0x7f|0x80),
1595
byte((v>>42)&0x7f|0x80),
1596
byte((v>>49)&0x7f|0x80),
1597
byte((v>>56)&0x7f|0x80),
1603
func appendFixed32Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
1604
v := *ptr.toUint32()
1605
b = appendVarint(b, wiretag)
1606
b = appendFixed32(b, v)
1609
func appendFixed32ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
1610
v := *ptr.toUint32()
1614
b = appendVarint(b, wiretag)
1615
b = appendFixed32(b, v)
1618
func appendFixed32Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
1619
p := *ptr.toUint32Ptr()
1623
b = appendVarint(b, wiretag)
1624
b = appendFixed32(b, *p)
1627
func appendFixed32Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
1628
s := *ptr.toUint32Slice()
1629
for _, v := range s {
1630
b = appendVarint(b, wiretag)
1631
b = appendFixed32(b, v)
1635
func appendFixed32PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
1636
s := *ptr.toUint32Slice()
1640
b = appendVarint(b, wiretag&^7|WireBytes)
1641
b = appendVarint(b, uint64(4*len(s)))
1642
for _, v := range s {
1643
b = appendFixed32(b, v)
1647
func appendFixedS32Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
1649
b = appendVarint(b, wiretag)
1650
b = appendFixed32(b, uint32(v))
1653
func appendFixedS32ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
1658
b = appendVarint(b, wiretag)
1659
b = appendFixed32(b, uint32(v))
1662
func appendFixedS32Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
1663
p := ptr.getInt32Ptr()
1667
b = appendVarint(b, wiretag)
1668
b = appendFixed32(b, uint32(*p))
1671
func appendFixedS32Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
1672
s := ptr.getInt32Slice()
1673
for _, v := range s {
1674
b = appendVarint(b, wiretag)
1675
b = appendFixed32(b, uint32(v))
1679
func appendFixedS32PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
1680
s := ptr.getInt32Slice()
1684
b = appendVarint(b, wiretag&^7|WireBytes)
1685
b = appendVarint(b, uint64(4*len(s)))
1686
for _, v := range s {
1687
b = appendFixed32(b, uint32(v))
1691
func appendFloat32Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
1692
v := math.Float32bits(*ptr.toFloat32())
1693
b = appendVarint(b, wiretag)
1694
b = appendFixed32(b, v)
1697
func appendFloat32ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
1698
v := math.Float32bits(*ptr.toFloat32())
1702
b = appendVarint(b, wiretag)
1703
b = appendFixed32(b, v)
1706
func appendFloat32Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
1707
p := *ptr.toFloat32Ptr()
1711
b = appendVarint(b, wiretag)
1712
b = appendFixed32(b, math.Float32bits(*p))
1715
func appendFloat32Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
1716
s := *ptr.toFloat32Slice()
1717
for _, v := range s {
1718
b = appendVarint(b, wiretag)
1719
b = appendFixed32(b, math.Float32bits(v))
1723
func appendFloat32PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
1724
s := *ptr.toFloat32Slice()
1728
b = appendVarint(b, wiretag&^7|WireBytes)
1729
b = appendVarint(b, uint64(4*len(s)))
1730
for _, v := range s {
1731
b = appendFixed32(b, math.Float32bits(v))
1735
func appendFixed64Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
1736
v := *ptr.toUint64()
1737
b = appendVarint(b, wiretag)
1738
b = appendFixed64(b, v)
1741
func appendFixed64ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
1742
v := *ptr.toUint64()
1746
b = appendVarint(b, wiretag)
1747
b = appendFixed64(b, v)
1750
func appendFixed64Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
1751
p := *ptr.toUint64Ptr()
1755
b = appendVarint(b, wiretag)
1756
b = appendFixed64(b, *p)
1759
func appendFixed64Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
1760
s := *ptr.toUint64Slice()
1761
for _, v := range s {
1762
b = appendVarint(b, wiretag)
1763
b = appendFixed64(b, v)
1767
func appendFixed64PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
1768
s := *ptr.toUint64Slice()
1772
b = appendVarint(b, wiretag&^7|WireBytes)
1773
b = appendVarint(b, uint64(8*len(s)))
1774
for _, v := range s {
1775
b = appendFixed64(b, v)
1779
func appendFixedS64Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
1781
b = appendVarint(b, wiretag)
1782
b = appendFixed64(b, uint64(v))
1785
func appendFixedS64ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
1790
b = appendVarint(b, wiretag)
1791
b = appendFixed64(b, uint64(v))
1794
func appendFixedS64Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
1795
p := *ptr.toInt64Ptr()
1799
b = appendVarint(b, wiretag)
1800
b = appendFixed64(b, uint64(*p))
1803
func appendFixedS64Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
1804
s := *ptr.toInt64Slice()
1805
for _, v := range s {
1806
b = appendVarint(b, wiretag)
1807
b = appendFixed64(b, uint64(v))
1811
func appendFixedS64PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
1812
s := *ptr.toInt64Slice()
1816
b = appendVarint(b, wiretag&^7|WireBytes)
1817
b = appendVarint(b, uint64(8*len(s)))
1818
for _, v := range s {
1819
b = appendFixed64(b, uint64(v))
1823
func appendFloat64Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
1824
v := math.Float64bits(*ptr.toFloat64())
1825
b = appendVarint(b, wiretag)
1826
b = appendFixed64(b, v)
1829
func appendFloat64ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
1830
v := math.Float64bits(*ptr.toFloat64())
1834
b = appendVarint(b, wiretag)
1835
b = appendFixed64(b, v)
1838
func appendFloat64Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
1839
p := *ptr.toFloat64Ptr()
1843
b = appendVarint(b, wiretag)
1844
b = appendFixed64(b, math.Float64bits(*p))
1847
func appendFloat64Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
1848
s := *ptr.toFloat64Slice()
1849
for _, v := range s {
1850
b = appendVarint(b, wiretag)
1851
b = appendFixed64(b, math.Float64bits(v))
1855
func appendFloat64PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
1856
s := *ptr.toFloat64Slice()
1860
b = appendVarint(b, wiretag&^7|WireBytes)
1861
b = appendVarint(b, uint64(8*len(s)))
1862
for _, v := range s {
1863
b = appendFixed64(b, math.Float64bits(v))
1867
func appendVarint32Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
1868
v := *ptr.toUint32()
1869
b = appendVarint(b, wiretag)
1870
b = appendVarint(b, uint64(v))
1873
func appendVarint32ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
1874
v := *ptr.toUint32()
1878
b = appendVarint(b, wiretag)
1879
b = appendVarint(b, uint64(v))
1882
func appendVarint32Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
1883
p := *ptr.toUint32Ptr()
1887
b = appendVarint(b, wiretag)
1888
b = appendVarint(b, uint64(*p))
1891
func appendVarint32Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
1892
s := *ptr.toUint32Slice()
1893
for _, v := range s {
1894
b = appendVarint(b, wiretag)
1895
b = appendVarint(b, uint64(v))
1899
func appendVarint32PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
1900
s := *ptr.toUint32Slice()
1904
b = appendVarint(b, wiretag&^7|WireBytes)
1907
for _, v := range s {
1908
n += SizeVarint(uint64(v))
1910
b = appendVarint(b, uint64(n))
1911
for _, v := range s {
1912
b = appendVarint(b, uint64(v))
1916
func appendVarintS32Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
1918
b = appendVarint(b, wiretag)
1919
b = appendVarint(b, uint64(v))
1922
func appendVarintS32ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
1927
b = appendVarint(b, wiretag)
1928
b = appendVarint(b, uint64(v))
1931
func appendVarintS32Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
1932
p := ptr.getInt32Ptr()
1936
b = appendVarint(b, wiretag)
1937
b = appendVarint(b, uint64(*p))
1940
func appendVarintS32Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
1941
s := ptr.getInt32Slice()
1942
for _, v := range s {
1943
b = appendVarint(b, wiretag)
1944
b = appendVarint(b, uint64(v))
1948
func appendVarintS32PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
1949
s := ptr.getInt32Slice()
1953
b = appendVarint(b, wiretag&^7|WireBytes)
1956
for _, v := range s {
1957
n += SizeVarint(uint64(v))
1959
b = appendVarint(b, uint64(n))
1960
for _, v := range s {
1961
b = appendVarint(b, uint64(v))
1965
func appendVarint64Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
1966
v := *ptr.toUint64()
1967
b = appendVarint(b, wiretag)
1968
b = appendVarint(b, v)
1971
func appendVarint64ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
1972
v := *ptr.toUint64()
1976
b = appendVarint(b, wiretag)
1977
b = appendVarint(b, v)
1980
func appendVarint64Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
1981
p := *ptr.toUint64Ptr()
1985
b = appendVarint(b, wiretag)
1986
b = appendVarint(b, *p)
1989
func appendVarint64Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
1990
s := *ptr.toUint64Slice()
1991
for _, v := range s {
1992
b = appendVarint(b, wiretag)
1993
b = appendVarint(b, v)
1997
func appendVarint64PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
1998
s := *ptr.toUint64Slice()
2002
b = appendVarint(b, wiretag&^7|WireBytes)
2005
for _, v := range s {
2008
b = appendVarint(b, uint64(n))
2009
for _, v := range s {
2010
b = appendVarint(b, v)
2014
func appendVarintS64Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
2016
b = appendVarint(b, wiretag)
2017
b = appendVarint(b, uint64(v))
2020
func appendVarintS64ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
2025
b = appendVarint(b, wiretag)
2026
b = appendVarint(b, uint64(v))
2029
func appendVarintS64Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
2030
p := *ptr.toInt64Ptr()
2034
b = appendVarint(b, wiretag)
2035
b = appendVarint(b, uint64(*p))
2038
func appendVarintS64Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
2039
s := *ptr.toInt64Slice()
2040
for _, v := range s {
2041
b = appendVarint(b, wiretag)
2042
b = appendVarint(b, uint64(v))
2046
func appendVarintS64PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
2047
s := *ptr.toInt64Slice()
2051
b = appendVarint(b, wiretag&^7|WireBytes)
2054
for _, v := range s {
2055
n += SizeVarint(uint64(v))
2057
b = appendVarint(b, uint64(n))
2058
for _, v := range s {
2059
b = appendVarint(b, uint64(v))
2063
func appendZigzag32Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
2065
b = appendVarint(b, wiretag)
2066
b = appendVarint(b, uint64((uint32(v)<<1)^uint32((int32(v)>>31))))
2069
func appendZigzag32ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
2074
b = appendVarint(b, wiretag)
2075
b = appendVarint(b, uint64((uint32(v)<<1)^uint32((int32(v)>>31))))
2078
func appendZigzag32Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
2079
p := ptr.getInt32Ptr()
2083
b = appendVarint(b, wiretag)
2085
b = appendVarint(b, uint64((uint32(v)<<1)^uint32((int32(v)>>31))))
2088
func appendZigzag32Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
2089
s := ptr.getInt32Slice()
2090
for _, v := range s {
2091
b = appendVarint(b, wiretag)
2092
b = appendVarint(b, uint64((uint32(v)<<1)^uint32((int32(v)>>31))))
2096
func appendZigzag32PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
2097
s := ptr.getInt32Slice()
2101
b = appendVarint(b, wiretag&^7|WireBytes)
2104
for _, v := range s {
2105
n += SizeVarint(uint64((uint32(v) << 1) ^ uint32((int32(v) >> 31))))
2107
b = appendVarint(b, uint64(n))
2108
for _, v := range s {
2109
b = appendVarint(b, uint64((uint32(v)<<1)^uint32((int32(v)>>31))))
2113
func appendZigzag64Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
2115
b = appendVarint(b, wiretag)
2116
b = appendVarint(b, uint64(v<<1)^uint64((int64(v)>>63)))
2119
func appendZigzag64ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
2124
b = appendVarint(b, wiretag)
2125
b = appendVarint(b, uint64(v<<1)^uint64((int64(v)>>63)))
2128
func appendZigzag64Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
2129
p := *ptr.toInt64Ptr()
2133
b = appendVarint(b, wiretag)
2135
b = appendVarint(b, uint64(v<<1)^uint64((int64(v)>>63)))
2138
func appendZigzag64Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
2139
s := *ptr.toInt64Slice()
2140
for _, v := range s {
2141
b = appendVarint(b, wiretag)
2142
b = appendVarint(b, uint64(v<<1)^uint64((int64(v)>>63)))
2146
func appendZigzag64PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
2147
s := *ptr.toInt64Slice()
2151
b = appendVarint(b, wiretag&^7|WireBytes)
2154
for _, v := range s {
2155
n += SizeVarint(uint64(v<<1) ^ uint64((int64(v) >> 63)))
2157
b = appendVarint(b, uint64(n))
2158
for _, v := range s {
2159
b = appendVarint(b, uint64(v<<1)^uint64((int64(v)>>63)))
2163
func appendBoolValue(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
2165
b = appendVarint(b, wiretag)
2173
func appendBoolValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
2178
b = appendVarint(b, wiretag)
2183
func appendBoolPtr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
2184
p := *ptr.toBoolPtr()
2188
b = appendVarint(b, wiretag)
2196
func appendBoolSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
2197
s := *ptr.toBoolSlice()
2198
for _, v := range s {
2199
b = appendVarint(b, wiretag)
2208
func appendBoolPackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
2209
s := *ptr.toBoolSlice()
2213
b = appendVarint(b, wiretag&^7|WireBytes)
2214
b = appendVarint(b, uint64(len(s)))
2215
for _, v := range s {
2224
func appendStringValue(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
2225
v := *ptr.toString()
2226
b = appendVarint(b, wiretag)
2227
b = appendVarint(b, uint64(len(v)))
2231
func appendStringValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
2232
v := *ptr.toString()
2236
b = appendVarint(b, wiretag)
2237
b = appendVarint(b, uint64(len(v)))
2241
func appendStringPtr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
2242
p := *ptr.toStringPtr()
2247
b = appendVarint(b, wiretag)
2248
b = appendVarint(b, uint64(len(v)))
2252
func appendStringSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
2253
s := *ptr.toStringSlice()
2254
for _, v := range s {
2255
b = appendVarint(b, wiretag)
2256
b = appendVarint(b, uint64(len(v)))
2261
func appendUTF8StringValue(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
2262
var invalidUTF8 bool
2263
v := *ptr.toString()
2264
if !utf8.ValidString(v) {
2267
b = appendVarint(b, wiretag)
2268
b = appendVarint(b, uint64(len(v)))
2271
return b, errInvalidUTF8
2275
func appendUTF8StringValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
2276
var invalidUTF8 bool
2277
v := *ptr.toString()
2281
if !utf8.ValidString(v) {
2284
b = appendVarint(b, wiretag)
2285
b = appendVarint(b, uint64(len(v)))
2288
return b, errInvalidUTF8
2292
func appendUTF8StringPtr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
2293
var invalidUTF8 bool
2294
p := *ptr.toStringPtr()
2299
if !utf8.ValidString(v) {
2302
b = appendVarint(b, wiretag)
2303
b = appendVarint(b, uint64(len(v)))
2306
return b, errInvalidUTF8
2310
func appendUTF8StringSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
2311
var invalidUTF8 bool
2312
s := *ptr.toStringSlice()
2313
for _, v := range s {
2314
if !utf8.ValidString(v) {
2317
b = appendVarint(b, wiretag)
2318
b = appendVarint(b, uint64(len(v)))
2322
return b, errInvalidUTF8
2326
func appendBytes(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
2331
b = appendVarint(b, wiretag)
2332
b = appendVarint(b, uint64(len(v)))
2336
func appendBytes3(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
2341
b = appendVarint(b, wiretag)
2342
b = appendVarint(b, uint64(len(v)))
2346
func appendBytesOneof(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
2348
b = appendVarint(b, wiretag)
2349
b = appendVarint(b, uint64(len(v)))
2353
func appendBytesSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
2354
s := *ptr.toBytesSlice()
2355
for _, v := range s {
2356
b = appendVarint(b, wiretag)
2357
b = appendVarint(b, uint64(len(v)))
2365
func makeGroupMarshaler(u *marshalInfo) (sizer, marshaler) {
2366
return func(ptr pointer, tagsize int) int {
2367
p := ptr.getPointer()
2371
return u.size(p) + 2*tagsize
2373
func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {
2374
p := ptr.getPointer()
2379
b = appendVarint(b, wiretag)
2380
b, err = u.marshal(b, p, deterministic)
2381
b = appendVarint(b, wiretag+(WireEndGroup-WireStartGroup))
2388
func makeGroupSliceMarshaler(u *marshalInfo) (sizer, marshaler) {
2389
return func(ptr pointer, tagsize int) int {
2390
s := ptr.getPointerSlice()
2392
for _, v := range s {
2396
n += u.size(v) + 2*tagsize
2400
func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {
2401
s := ptr.getPointerSlice()
2404
for _, v := range s {
2406
return b, errRepeatedHasNil
2408
b = appendVarint(b, wiretag)
2409
b, err = u.marshal(b, v, deterministic)
2410
b = appendVarint(b, wiretag+(WireEndGroup-WireStartGroup))
2411
if !nerr.Merge(err) {
2413
err = errRepeatedHasNil
2424
func makeMessageMarshaler(u *marshalInfo) (sizer, marshaler) {
2425
return func(ptr pointer, tagsize int) int {
2426
p := ptr.getPointer()
2431
return siz + SizeVarint(uint64(siz)) + tagsize
2433
func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {
2434
p := ptr.getPointer()
2438
b = appendVarint(b, wiretag)
2439
siz := u.cachedsize(p)
2440
b = appendVarint(b, uint64(siz))
2441
return u.marshal(b, p, deterministic)
2447
func makeMessageSliceMarshaler(u *marshalInfo) (sizer, marshaler) {
2448
return func(ptr pointer, tagsize int) int {
2449
s := ptr.getPointerSlice()
2451
for _, v := range s {
2456
n += siz + SizeVarint(uint64(siz)) + tagsize
2460
func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {
2461
s := ptr.getPointerSlice()
2464
for _, v := range s {
2466
return b, errRepeatedHasNil
2468
b = appendVarint(b, wiretag)
2469
siz := u.cachedsize(v)
2470
b = appendVarint(b, uint64(siz))
2471
b, err = u.marshal(b, v, deterministic)
2473
if !nerr.Merge(err) {
2475
err = errRepeatedHasNil
2486
func makeMapMarshaler(f *reflect.StructField) (sizer, marshaler) {
2491
tags := strings.Split(f.Tag.Get("protobuf"), ",")
2492
keyTags := strings.Split(f.Tag.Get("protobuf_key"), ",")
2493
valTags := strings.Split(f.Tag.Get("protobuf_val"), ",")
2495
for _, t := range tags {
2496
if strings.HasPrefix(t, "customtype=") {
2497
valTags = append(valTags, t)
2500
valTags = append(valTags, t)
2503
if t == "stdduration" {
2504
valTags = append(valTags, t)
2508
valTags = append(valTags, t)
2511
keySizer, keyMarshaler := typeMarshaler(keyType, keyTags, false, false)
2512
valSizer, valMarshaler := typeMarshaler(valType, valTags, false, false)
2513
keyWireTag := 1<<3 | wiretype(keyTags[0])
2514
valWireTag := 2<<3 | wiretype(valTags[0])
2521
valIsPtr := valType.Kind() == reflect.Ptr
2528
valCachedSizer := valSizer
2529
if valIsPtr && !stdOptions && valType.Elem().Kind() == reflect.Struct {
2530
u := getMarshalInfo(valType.Elem())
2531
valCachedSizer = func(ptr pointer, tagsize int) int {
2533
p := ptr.getPointer()
2537
siz := u.cachedsize(p)
2538
return siz + SizeVarint(uint64(siz)) + tagsize
2541
return func(ptr pointer, tagsize int) int {
2542
m := ptr.asPointerTo(t).Elem()
2544
for _, k := range m.MapKeys() {
2546
vi := m.MapIndex(k).Interface()
2547
kaddr := toAddrPointer(&ki, false)
2548
vaddr := toAddrPointer(&vi, valIsPtr)
2549
siz := keySizer(kaddr, 1) + valSizer(vaddr, 1)
2550
n += siz + SizeVarint(uint64(siz)) + tagsize
2554
func(b []byte, ptr pointer, tag uint64, deterministic bool) ([]byte, error) {
2555
m := ptr.asPointerTo(t).Elem()
2558
if len(keys) > 1 && deterministic {
2559
sort.Sort(mapKeys(keys))
2563
for _, k := range keys {
2565
vi := m.MapIndex(k).Interface()
2566
kaddr := toAddrPointer(&ki, false)
2567
vaddr := toAddrPointer(&vi, valIsPtr)
2568
b = appendVarint(b, tag)
2569
siz := keySizer(kaddr, 1) + valCachedSizer(vaddr, 1)
2570
b = appendVarint(b, uint64(siz))
2571
b, err = keyMarshaler(b, kaddr, keyWireTag, deterministic)
2572
if !nerr.Merge(err) {
2575
b, err = valMarshaler(b, vaddr, valWireTag, deterministic)
2576
if err != ErrNil && !nerr.Merge(err) {
2587
func makeOneOfMarshaler(fi *marshalFieldInfo, f *reflect.StructField) (sizer, marshaler) {
2590
return func(ptr pointer, _ int) int {
2591
p := ptr.getInterfacePointer()
2595
v := ptr.asPointerTo(t).Elem().Elem().Elem()
2597
e := fi.oneofElems[telem]
2598
return e.sizer(p, e.tagsize)
2600
func(b []byte, ptr pointer, _ uint64, deterministic bool) ([]byte, error) {
2601
p := ptr.getInterfacePointer()
2605
v := ptr.asPointerTo(t).Elem().Elem().Elem()
2607
if telem.Field(0).Type.Kind() == reflect.Ptr && p.getPointer().isNil() {
2608
return b, errOneofHasNil
2610
e := fi.oneofElems[telem]
2611
return e.marshaler(b, p, e.wiretag, deterministic)
2616
func (u *marshalInfo) sizeExtensions(ext *XXX_InternalExtensions) int {
2617
m, mu := ext.extensionsRead()
2624
for _, e := range m {
2625
if e.value == nil || e.desc == nil {
2634
ei := u.getExtElemInfo(e.desc)
2636
p := toAddrPointer(&v, ei.isptr)
2637
n += ei.sizer(p, ei.tagsize)
2644
func (u *marshalInfo) appendExtensions(b []byte, ext *XXX_InternalExtensions, deterministic bool) ([]byte, error) {
2645
m, mu := ext.extensionsRead()
2658
for _, e := range m {
2659
if e.value == nil || e.desc == nil {
2661
b = append(b, e.enc...)
2669
ei := u.getExtElemInfo(e.desc)
2671
p := toAddrPointer(&v, ei.isptr)
2672
b, err = ei.marshaler(b, p, ei.wiretag, deterministic)
2673
if !nerr.Merge(err) {
2682
keys := make([]int, 0, len(m))
2684
keys = append(keys, int(k))
2688
for _, k := range keys {
2690
if e.value == nil || e.desc == nil {
2692
b = append(b, e.enc...)
2700
ei := u.getExtElemInfo(e.desc)
2702
p := toAddrPointer(&v, ei.isptr)
2703
b, err = ei.marshaler(b, p, ei.wiretag, deterministic)
2704
if !nerr.Merge(err) {
2721
func (u *marshalInfo) sizeMessageSet(ext *XXX_InternalExtensions) int {
2722
m, mu := ext.extensionsRead()
2729
for id, e := range m {
2731
n += SizeVarint(uint64(id)) + 1
2733
if e.value == nil || e.desc == nil {
2735
msgWithLen := skipVarint(e.enc)
2736
siz := len(msgWithLen)
2745
ei := u.getExtElemInfo(e.desc)
2747
p := toAddrPointer(&v, ei.isptr)
2756
func (u *marshalInfo) appendMessageSet(b []byte, ext *XXX_InternalExtensions, deterministic bool) ([]byte, error) {
2757
m, mu := ext.extensionsRead()
2770
for id, e := range m {
2771
b = append(b, 1<<3|WireStartGroup)
2772
b = append(b, 2<<3|WireVarint)
2773
b = appendVarint(b, uint64(id))
2775
if e.value == nil || e.desc == nil {
2777
msgWithLen := skipVarint(e.enc)
2778
b = append(b, 3<<3|WireBytes)
2779
b = append(b, msgWithLen...)
2780
b = append(b, 1<<3|WireEndGroup)
2788
ei := u.getExtElemInfo(e.desc)
2790
p := toAddrPointer(&v, ei.isptr)
2791
b, err = ei.marshaler(b, p, 3<<3|WireBytes, deterministic)
2792
if !nerr.Merge(err) {
2795
b = append(b, 1<<3|WireEndGroup)
2801
keys := make([]int, 0, len(m))
2803
keys = append(keys, int(k))
2807
for _, id := range keys {
2809
b = append(b, 1<<3|WireStartGroup)
2810
b = append(b, 2<<3|WireVarint)
2811
b = appendVarint(b, uint64(id))
2813
if e.value == nil || e.desc == nil {
2815
msgWithLen := skipVarint(e.enc)
2816
b = append(b, 3<<3|WireBytes)
2817
b = append(b, msgWithLen...)
2818
b = append(b, 1<<3|WireEndGroup)
2826
ei := u.getExtElemInfo(e.desc)
2828
p := toAddrPointer(&v, ei.isptr)
2829
b, err = ei.marshaler(b, p, 3<<3|WireBytes, deterministic)
2830
b = append(b, 1<<3|WireEndGroup)
2831
if !nerr.Merge(err) {
2839
func (u *marshalInfo) sizeV1Extensions(m map[int32]Extension) int {
2845
for _, e := range m {
2846
if e.value == nil || e.desc == nil {
2856
ei := u.getExtElemInfo(e.desc)
2858
p := toAddrPointer(&v, ei.isptr)
2859
n += ei.sizer(p, ei.tagsize)
2865
func (u *marshalInfo) appendV1Extensions(b []byte, m map[int32]Extension, deterministic bool) ([]byte, error) {
2871
keys := make([]int, 0, len(m))
2873
keys = append(keys, int(k))
2879
for _, k := range keys {
2881
if e.value == nil || e.desc == nil {
2883
b = append(b, e.enc...)
2891
ei := u.getExtElemInfo(e.desc)
2893
p := toAddrPointer(&v, ei.isptr)
2894
b, err = ei.marshaler(b, p, ei.wiretag, deterministic)
2895
if !nerr.Merge(err) {
2908
type newMarshaler interface {
2910
XXX_Marshal(b []byte, deterministic bool) ([]byte, error)
2915
func Size(pb Message) int {
2916
if m, ok := pb.(newMarshaler); ok {
2919
if m, ok := pb.(Marshaler); ok {
2929
var info InternalMessageInfo
2930
return info.Size(pb)
2936
func Marshal(pb Message) ([]byte, error) {
2937
if m, ok := pb.(newMarshaler); ok {
2939
b := make([]byte, 0, siz)
2940
return m.XXX_Marshal(b, false)
2942
if m, ok := pb.(Marshaler); ok {
2951
var info InternalMessageInfo
2952
siz := info.Size(pb)
2953
b := make([]byte, 0, siz)
2954
return info.Marshal(b, pb, false)
2962
func (p *Buffer) Marshal(pb Message) error {
2964
if p.deterministic {
2965
if _, ok := pb.(Marshaler); ok {
2966
return fmt.Errorf("proto: deterministic not supported by the Marshal method of %T", pb)
2969
if m, ok := pb.(newMarshaler); ok {
2972
pp := p.buf[len(p.buf) : len(p.buf) : len(p.buf)+siz]
2973
pp, err = m.XXX_Marshal(pp, p.deterministic)
2974
p.buf = append(p.buf, pp...)
2977
if m, ok := pb.(Marshaler); ok {
2981
b, err = m.Marshal()
2982
p.buf = append(p.buf, b...)
2989
var info InternalMessageInfo
2990
siz := info.Size(pb)
2992
p.buf, err = info.Marshal(p.buf, pb, p.deterministic)
2999
func (p *Buffer) grow(n int) {
3000
need := len(p.buf) + n
3001
if need <= cap(p.buf) {
3004
newCap := len(p.buf) * 2
3008
p.buf = append(make([]byte, 0, newCap), p.buf...)