summaryrefslogtreecommitdiff
path: root/vendor/codeberg.org/gruf/go-mangler/v2/pointer.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/codeberg.org/gruf/go-mangler/v2/pointer.go')
-rw-r--r--vendor/codeberg.org/gruf/go-mangler/v2/pointer.go81
1 files changed, 0 insertions, 81 deletions
diff --git a/vendor/codeberg.org/gruf/go-mangler/v2/pointer.go b/vendor/codeberg.org/gruf/go-mangler/v2/pointer.go
deleted file mode 100644
index d732b2f67..000000000
--- a/vendor/codeberg.org/gruf/go-mangler/v2/pointer.go
+++ /dev/null
@@ -1,81 +0,0 @@
-package mangler
-
-import (
- "reflect"
- "unsafe"
-
- "codeberg.org/gruf/go-xunsafe"
-)
-
-// derefPointerType returns a Mangler capable of dereferencing
-// and formatting the given pointer type currently in TypeIter{}.
-// note this will fetch a sub-Mangler for resulting value type.
-func derefPointerType(t xunsafe.TypeIter) Mangler {
- var derefs int
- var indirects int64
- rtype := t.Type
- flags := t.Flag
-
- // Iteratively dereference pointer types.
- for rtype.Kind() == reflect.Pointer {
-
- // Only if this is actual indirect memory do we
- // perform a derefence, otherwise we just skip over
- // and increase the dereference indicator, i.e. '1'.
- if flags&xunsafe.Reflect_flagIndir != 0 {
- indirects |= 1 << derefs
- }
- derefs++
-
- // Get next elem type.
- rtype = rtype.Elem()
-
- // Get next set of dereferenced element type flags.
- flags = xunsafe.ReflectPointerElemFlags(flags, rtype)
- }
-
- // Ensure this is a reasonable number of derefs.
- if derefs > 4*int(unsafe.Sizeof(indirects)) {
- return nil
- }
-
- // Wrap value as TypeIter.
- vt := t.Child(rtype, flags)
-
- // Get value mangler.
- fn := loadOrGet(vt)
- if fn == nil {
- return nil
- }
-
- return func(buf []byte, ptr unsafe.Pointer) []byte {
- for i := 0; i < derefs; i++ {
- switch {
- case indirects&1<<i == 0:
- // No dereference needed.
- buf = append(buf, '1')
-
- case ptr == nil:
- // Nil value, return here.
- buf = append(buf, '0')
- return buf
-
- default:
- // Further deref ptr.
- buf = append(buf, '1')
- ptr = *(*unsafe.Pointer)(ptr)
- }
- }
-
- if ptr == nil {
- // Final nil val check.
- buf = append(buf, '0')
- return buf
- }
-
- // Mangle fully deref'd.
- buf = append(buf, '1')
- buf = fn(buf, ptr)
- return buf
- }
-}