123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- // Copyright 2018 The Go Authors. All rights reserved.
- // Use of this source code is governed by a BSD-style
- // license that can be found in the LICENSE file.
- //go:build purego || appengine
- // +build purego appengine
- package protoreflect
- import "google.golang.org/protobuf/internal/pragma"
- type valueType int
- const (
- nilType valueType = iota
- boolType
- int32Type
- int64Type
- uint32Type
- uint64Type
- float32Type
- float64Type
- stringType
- bytesType
- enumType
- ifaceType
- )
- // value is a union where only one type can be represented at a time.
- // This uses a distinct field for each type. This is type safe in Go, but
- // occupies more memory than necessary (72B).
- type value struct {
- pragma.DoNotCompare // 0B
- typ valueType // 8B
- num uint64 // 8B
- str string // 16B
- bin []byte // 24B
- iface interface{} // 16B
- }
- func valueOfString(v string) Value {
- return Value{typ: stringType, str: v}
- }
- func valueOfBytes(v []byte) Value {
- return Value{typ: bytesType, bin: v}
- }
- func valueOfIface(v interface{}) Value {
- return Value{typ: ifaceType, iface: v}
- }
- func (v Value) getString() string {
- return v.str
- }
- func (v Value) getBytes() []byte {
- return v.bin
- }
- func (v Value) getIface() interface{} {
- return v.iface
- }
|