$35 GRAYBYTE WORDPRESS FILE MANAGER $26

SERVER : in-mum-web1330.main-hosting.eu #1 SMP Mon Feb 10 22:45:17 UTC 2025
SERVER IP : 84.32.84.92 | ADMIN IP 216.73.216.215
OPTIONS : CRL = ON | WGT = ON | SDO = OFF | PKEX = OFF
DEACTIVATED : NONE

/opt/go/pkg/mod/google.golang.org/protobuf@v1.30.0/internal/impl/

HOME
Current File : /opt/go/pkg/mod/google.golang.org/protobuf@v1.30.0/internal/impl//checkinit.go
// Copyright 2019 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.

package impl

import (
	"sync"

	"google.golang.org/protobuf/internal/errors"
	"google.golang.org/protobuf/reflect/protoreflect"
	"google.golang.org/protobuf/runtime/protoiface"
)

func (mi *MessageInfo) checkInitialized(in protoiface.CheckInitializedInput) (protoiface.CheckInitializedOutput, error) {
	var p pointer
	if ms, ok := in.Message.(*messageState); ok {
		p = ms.pointer()
	} else {
		p = in.Message.(*messageReflectWrapper).pointer()
	}
	return protoiface.CheckInitializedOutput{}, mi.checkInitializedPointer(p)
}

func (mi *MessageInfo) checkInitializedPointer(p pointer) error {
	mi.init()
	if !mi.needsInitCheck {
		return nil
	}
	if p.IsNil() {
		for _, f := range mi.orderedCoderFields {
			if f.isRequired {
				return errors.RequiredNotSet(string(mi.Desc.Fields().ByNumber(f.num).FullName()))
			}
		}
		return nil
	}
	if mi.extensionOffset.IsValid() {
		e := p.Apply(mi.extensionOffset).Extensions()
		if err := mi.isInitExtensions(e); err != nil {
			return err
		}
	}
	for _, f := range mi.orderedCoderFields {
		if !f.isRequired && f.funcs.isInit == nil {
			continue
		}
		fptr := p.Apply(f.offset)
		if f.isPointer && fptr.Elem().IsNil() {
			if f.isRequired {
				return errors.RequiredNotSet(string(mi.Desc.Fields().ByNumber(f.num).FullName()))
			}
			continue
		}
		if f.funcs.isInit == nil {
			continue
		}
		if err := f.funcs.isInit(fptr, f); err != nil {
			return err
		}
	}
	return nil
}

func (mi *MessageInfo) isInitExtensions(ext *map[int32]ExtensionField) error {
	if ext == nil {
		return nil
	}
	for _, x := range *ext {
		ei := getExtensionFieldInfo(x.Type())
		if ei.funcs.isInit == nil {
			continue
		}
		v := x.Value()
		if !v.IsValid() {
			continue
		}
		if err := ei.funcs.isInit(v); err != nil {
			return err
		}
	}
	return nil
}

var (
	needsInitCheckMu  sync.Mutex
	needsInitCheckMap sync.Map
)

// needsInitCheck reports whether a message needs to be checked for partial initialization.
//
// It returns true if the message transitively includes any required or extension fields.
func needsInitCheck(md protoreflect.MessageDescriptor) bool {
	if v, ok := needsInitCheckMap.Load(md); ok {
		if has, ok := v.(bool); ok {
			return has
		}
	}
	needsInitCheckMu.Lock()
	defer needsInitCheckMu.Unlock()
	return needsInitCheckLocked(md)
}

func needsInitCheckLocked(md protoreflect.MessageDescriptor) (has bool) {
	if v, ok := needsInitCheckMap.Load(md); ok {
		// If has is true, we've previously determined that this message
		// needs init checks.
		//
		// If has is false, we've previously determined that it can never
		// be uninitialized.
		//
		// If has is not a bool, we've just encountered a cycle in the
		// message graph. In this case, it is safe to return false: If
		// the message does have required fields, we'll detect them later
		// in the graph traversal.
		has, ok := v.(bool)
		return ok && has
	}
	needsInitCheckMap.Store(md, struct{}{}) // avoid cycles while descending into this message
	defer func() {
		needsInitCheckMap.Store(md, has)
	}()
	if md.RequiredNumbers().Len() > 0 {
		return true
	}
	if md.ExtensionRanges().Len() > 0 {
		return true
	}
	for i := 0; i < md.Fields().Len(); i++ {
		fd := md.Fields().Get(i)
		// Map keys are never messages, so just consider the map value.
		if fd.IsMap() {
			fd = fd.MapValue()
		}
		fmd := fd.Message()
		if fmd != nil && needsInitCheckLocked(fmd) {
			return true
		}
	}
	return false
}

Current_dir [ NOT WRITEABLE ] Document_root [ WRITEABLE ]


[ Back ]
NAME
SIZE
LAST TOUCH
USER
CAN-I?
FUNCTIONS
..
--
25 Jan 2024 4.43 PM
root / root
0555
api_export.go
4.933 KB
25 Jan 2024 4.43 PM
root / root
0444
checkinit.go
3.489 KB
25 Jan 2024 4.43 PM
root / root
0444
codec_extension.go
5.841 KB
25 Jan 2024 4.43 PM
root / root
0444
codec_field.go
24.604 KB
25 Jan 2024 4.43 PM
root / root
0444
codec_gen.go
161.441 KB
25 Jan 2024 4.43 PM
root / root
0444
codec_map.go
10.179 KB
25 Jan 2024 4.43 PM
root / root
0444
codec_map_go111.go
0.722 KB
25 Jan 2024 4.43 PM
root / root
0444
codec_map_go112.go
0.293 KB
25 Jan 2024 4.43 PM
root / root
0444
codec_message.go
7.124 KB
25 Jan 2024 4.43 PM
root / root
0444
codec_messageset.go
3.152 KB
25 Jan 2024 4.43 PM
root / root
0444
codec_reflect.go
5.285 KB
25 Jan 2024 4.43 PM
root / root
0444
codec_tables.go
16.354 KB
25 Jan 2024 4.43 PM
root / root
0444
codec_unsafe.go
0.506 KB
25 Jan 2024 4.43 PM
root / root
0444
convert.go
15.511 KB
25 Jan 2024 4.43 PM
root / root
0444
convert_list.go
3.627 KB
25 Jan 2024 4.43 PM
root / root
0444
convert_map.go
3.029 KB
25 Jan 2024 4.43 PM
root / root
0444
decode.go
7.437 KB
25 Jan 2024 4.43 PM
root / root
0444
encode.go
5.079 KB
25 Jan 2024 4.43 PM
root / root
0444
enum.go
0.58 KB
25 Jan 2024 4.43 PM
root / root
0444
enum_test.go
0.632 KB
25 Jan 2024 4.43 PM
root / root
0444
extension.go
4.61 KB
25 Jan 2024 4.43 PM
root / root
0444
extension_test.go
2.692 KB
25 Jan 2024 4.43 PM
root / root
0444
lazy_test.go
1.553 KB
25 Jan 2024 4.43 PM
root / root
0444
legacy_aberrant_test.go
23.111 KB
25 Jan 2024 4.43 PM
root / root
0444
legacy_enum.go
6.729 KB
25 Jan 2024 4.43 PM
root / root
0444
legacy_export.go
3.13 KB
25 Jan 2024 4.43 PM
root / root
0444
legacy_export_test.go
0.927 KB
25 Jan 2024 4.43 PM
root / root
0444
legacy_extension.go
7.511 KB
25 Jan 2024 4.43 PM
root / root
0444
legacy_file.go
2.51 KB
25 Jan 2024 4.43 PM
root / root
0444
legacy_file_test.go
23.899 KB
25 Jan 2024 4.43 PM
root / root
0444
legacy_message.go
18.484 KB
25 Jan 2024 4.43 PM
root / root
0444
legacy_test.go
25.808 KB
25 Jan 2024 4.43 PM
root / root
0444
merge.go
4.55 KB
25 Jan 2024 4.43 PM
root / root
0444
merge_gen.go
4.531 KB
25 Jan 2024 4.43 PM
root / root
0444
message.go
8.37 KB
25 Jan 2024 4.43 PM
root / root
0444
message_reflect.go
13.597 KB
25 Jan 2024 4.43 PM
root / root
0444
message_reflect_field.go
15.082 KB
25 Jan 2024 4.43 PM
root / root
0444
message_reflect_gen.go
7.813 KB
25 Jan 2024 4.43 PM
root / root
0444
message_reflect_test.go
68.138 KB
25 Jan 2024 4.43 PM
root / root
0444
pointer_reflect.go
6.336 KB
25 Jan 2024 4.43 PM
root / root
0444
pointer_unsafe.go
6.863 KB
25 Jan 2024 4.43 PM
root / root
0444
validate.go
15.125 KB
25 Jan 2024 4.43 PM
root / root
0444
weak.go
1.986 KB
25 Jan 2024 4.43 PM
root / root
0444

GRAYBYTE WORDPRESS FILE MANAGER @ 2026 CONTACT ME
Static GIF