vendor/google.golang.org/protobuf/internal/strs/strings_unsafe.go
changeset 260 445e01aede7e
parent 256 6d9efbef00a9
equal deleted inserted replaced
259:db4911b0c721 260:445e01aede7e
     1 // Copyright 2018 The Go Authors. All rights reserved.
     1 // Copyright 2018 The Go Authors. All rights reserved.
     2 // Use of this source code is governed by a BSD-style
     2 // Use of this source code is governed by a BSD-style
     3 // license that can be found in the LICENSE file.
     3 // license that can be found in the LICENSE file.
     4 
     4 
       
     5 //go:build !purego && !appengine
     5 // +build !purego,!appengine
     6 // +build !purego,!appengine
     6 
     7 
     7 package strs
     8 package strs
     8 
     9 
     9 import (
    10 import (
    10 	"unsafe"
    11 	"unsafe"
    11 
    12 
    12 	pref "google.golang.org/protobuf/reflect/protoreflect"
    13 	"google.golang.org/protobuf/reflect/protoreflect"
    13 )
    14 )
    14 
    15 
    15 type (
    16 type (
    16 	stringHeader struct {
    17 	stringHeader struct {
    17 		Data unsafe.Pointer
    18 		Data unsafe.Pointer
    56 	buf []byte
    57 	buf []byte
    57 }
    58 }
    58 
    59 
    59 // AppendFullName is equivalent to protoreflect.FullName.Append,
    60 // AppendFullName is equivalent to protoreflect.FullName.Append,
    60 // but optimized for large batches where each name has a shared lifetime.
    61 // but optimized for large batches where each name has a shared lifetime.
    61 func (sb *Builder) AppendFullName(prefix pref.FullName, name pref.Name) pref.FullName {
    62 func (sb *Builder) AppendFullName(prefix protoreflect.FullName, name protoreflect.Name) protoreflect.FullName {
    62 	n := len(prefix) + len(".") + len(name)
    63 	n := len(prefix) + len(".") + len(name)
    63 	if len(prefix) == 0 {
    64 	if len(prefix) == 0 {
    64 		n -= len(".")
    65 		n -= len(".")
    65 	}
    66 	}
    66 	sb.grow(n)
    67 	sb.grow(n)
    67 	sb.buf = append(sb.buf, prefix...)
    68 	sb.buf = append(sb.buf, prefix...)
    68 	sb.buf = append(sb.buf, '.')
    69 	sb.buf = append(sb.buf, '.')
    69 	sb.buf = append(sb.buf, name...)
    70 	sb.buf = append(sb.buf, name...)
    70 	return pref.FullName(sb.last(n))
    71 	return protoreflect.FullName(sb.last(n))
    71 }
    72 }
    72 
    73 
    73 // MakeString is equivalent to string(b), but optimized for large batches
    74 // MakeString is equivalent to string(b), but optimized for large batches
    74 // with a shared lifetime.
    75 // with a shared lifetime.
    75 func (sb *Builder) MakeString(b []byte) string {
    76 func (sb *Builder) MakeString(b []byte) string {