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