2021-12-07 17:16:10 +01:00
|
|
|
package qrm
|
|
|
|
|
|
|
|
|
|
import "reflect"
|
|
|
|
|
|
|
|
|
|
type typeStack []*reflect.Type
|
|
|
|
|
|
2022-02-09 12:34:10 +01:00
|
|
|
func newTypeStack() typeStack {
|
2021-12-07 17:16:10 +01:00
|
|
|
stack := make(typeStack, 0, 20)
|
2022-02-09 12:34:10 +01:00
|
|
|
return stack
|
2021-12-07 17:16:10 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (s *typeStack) isEmpty() bool {
|
|
|
|
|
return len(*s) == 0
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (s *typeStack) push(t *reflect.Type) {
|
|
|
|
|
*s = append(*s, t)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (s *typeStack) pop() bool {
|
|
|
|
|
if s.isEmpty() {
|
|
|
|
|
return false
|
|
|
|
|
}
|
|
|
|
|
*s = (*s)[:len(*s)-1]
|
|
|
|
|
return true
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (s *typeStack) contains(t *reflect.Type) bool {
|
|
|
|
|
if s.isEmpty() {
|
|
|
|
|
return false
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
for _, typ := range *s {
|
|
|
|
|
if *typ == *t {
|
|
|
|
|
return true
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return false
|
|
|
|
|
}
|