vendor/google.golang.org/protobuf/reflect/protoreflect/value_pure.go
changeset 256 6d9efbef00a9
child 260 445e01aede7e
equal deleted inserted replaced
255:4f153a23adab 256:6d9efbef00a9
       
     1 // Copyright 2018 The Go Authors. All rights reserved.
       
     2 // Use of this source code is governed by a BSD-style
       
     3 // license that can be found in the LICENSE file.
       
     4 
       
     5 // +build purego appengine
       
     6 
       
     7 package protoreflect
       
     8 
       
     9 import "google.golang.org/protobuf/internal/pragma"
       
    10 
       
    11 type valueType int
       
    12 
       
    13 const (
       
    14 	nilType valueType = iota
       
    15 	boolType
       
    16 	int32Type
       
    17 	int64Type
       
    18 	uint32Type
       
    19 	uint64Type
       
    20 	float32Type
       
    21 	float64Type
       
    22 	stringType
       
    23 	bytesType
       
    24 	enumType
       
    25 	ifaceType
       
    26 )
       
    27 
       
    28 // value is a union where only one type can be represented at a time.
       
    29 // This uses a distinct field for each type. This is type safe in Go, but
       
    30 // occupies more memory than necessary (72B).
       
    31 type value struct {
       
    32 	pragma.DoNotCompare // 0B
       
    33 
       
    34 	typ   valueType   // 8B
       
    35 	num   uint64      // 8B
       
    36 	str   string      // 16B
       
    37 	bin   []byte      // 24B
       
    38 	iface interface{} // 16B
       
    39 }
       
    40 
       
    41 func valueOfString(v string) Value {
       
    42 	return Value{typ: stringType, str: v}
       
    43 }
       
    44 func valueOfBytes(v []byte) Value {
       
    45 	return Value{typ: bytesType, bin: v}
       
    46 }
       
    47 func valueOfIface(v interface{}) Value {
       
    48 	return Value{typ: ifaceType, iface: v}
       
    49 }
       
    50 
       
    51 func (v Value) getString() string {
       
    52 	return v.str
       
    53 }
       
    54 func (v Value) getBytes() []byte {
       
    55 	return v.bin
       
    56 }
       
    57 func (v Value) getIface() interface{} {
       
    58 	return v.iface
       
    59 }