mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-05-10 10:06:47 +00:00
* simv2: wip * simulation: exec adapter start/stop * simulation: add node status to exec adapter * simulation: initial simulation code * simulation: exec adapter, configure path to executable * simulation: initial docker adapter * simulation: wip kubernetes adapter * simulation: kubernetes adapter proxy * simulation: implement GetAll/StartAll/StopAll * simulation: kuberentes adapter - set env vars and resource limits * simulation: discovery test * simulation: remove port definitions within docker adapter * simulation: simplify wait for healthy loop * simulation: get nat ip addr from interface * simulation: pull docker images automatically * simulation: NodeStatus -> NodeInfo * simulation: move discovery test to example dir * simulation: example snapshot usage * simulation: add goclient specific simulation * simulation: add peer connections to snapshot * simulation: close rpc client * simulation: don't export kubernetes proxy server * simulation: merge simulation code * simulation: don't export nodemap * simulation: rename SimulationSnapshot -> Snapshot * simulation: linting fixes * simulation: add k8s available helper func * simulation: vendor * simulation: fix 'no non-test Go files' when building * simulation: remove errors from interface methods where non were returned * simulation: run getHealthInfo check in parallel
64 lines
1.3 KiB
Go
64 lines
1.3 KiB
Go
package reflect2
|
|
|
|
import (
|
|
"reflect"
|
|
"unsafe"
|
|
)
|
|
|
|
type iface struct {
|
|
itab *itab
|
|
data unsafe.Pointer
|
|
}
|
|
|
|
type itab struct {
|
|
ignore unsafe.Pointer
|
|
rtype unsafe.Pointer
|
|
}
|
|
|
|
func IFaceToEFace(ptr unsafe.Pointer) interface{} {
|
|
iface := (*iface)(ptr)
|
|
if iface.itab == nil {
|
|
return nil
|
|
}
|
|
return packEFace(iface.itab.rtype, iface.data)
|
|
}
|
|
|
|
type UnsafeIFaceType struct {
|
|
unsafeType
|
|
}
|
|
|
|
func newUnsafeIFaceType(cfg *frozenConfig, type1 reflect.Type) *UnsafeIFaceType {
|
|
return &UnsafeIFaceType{
|
|
unsafeType: *newUnsafeType(cfg, type1),
|
|
}
|
|
}
|
|
|
|
func (type2 *UnsafeIFaceType) Indirect(obj interface{}) interface{} {
|
|
objEFace := unpackEFace(obj)
|
|
assertType("Type.Indirect argument 1", type2.ptrRType, objEFace.rtype)
|
|
return type2.UnsafeIndirect(objEFace.data)
|
|
}
|
|
|
|
func (type2 *UnsafeIFaceType) UnsafeIndirect(ptr unsafe.Pointer) interface{} {
|
|
return IFaceToEFace(ptr)
|
|
}
|
|
|
|
func (type2 *UnsafeIFaceType) IsNil(obj interface{}) bool {
|
|
if obj == nil {
|
|
return true
|
|
}
|
|
objEFace := unpackEFace(obj)
|
|
assertType("Type.IsNil argument 1", type2.ptrRType, objEFace.rtype)
|
|
return type2.UnsafeIsNil(objEFace.data)
|
|
}
|
|
|
|
func (type2 *UnsafeIFaceType) UnsafeIsNil(ptr unsafe.Pointer) bool {
|
|
if ptr == nil {
|
|
return true
|
|
}
|
|
iface := (*iface)(ptr)
|
|
if iface.itab == nil {
|
|
return true
|
|
}
|
|
return false
|
|
}
|