// ------------------------------------------------------------------------ // Project atila // Active Thing (activething.com) git.activething.com/go // // File name rRFields_type.go // Created by DEV // Modified 26/01/2024 // // Copyright 2024 activething.com // ------------------------------------------------------------------------ // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // ------------------------------------------------------------------------ package reflects type ( RStruct struct { Fields RFields NameIndex map[string]int } ) /* func NewRStruct (rtype reflect.Type) *RStruct { res := &RStruct{ Fields : make(RFields,0,rtype.NumField()), NameIndex: make(map[string]int), } cur := RFields{} nxt := RFields{{ RType: rtype }} var ( cnt,nxc map[reflect.Type]int vis map[reflect.Type]struct{} nms bytes.Buffer ) for len(nxt) > 0 { cur, nxt = nxt, cur[:0] cnt, nxc = nxc, map[reflect.Type]int{} for _,f := range cur { if _,h := vis[f.RType]; h { continue } vis[f.RType]=struct{}{} for i :=0; i 1 { res.Fields = append(res.Fields, res.Fields[len(res.Fields)-1]) } continue } nxc[ft]++ if nxc[ft] == 1 { nxt = append(nxt, RField{ RType: ft, Name: ft.Name(), Index: index, }) } } } } for i,f := range res.Fields { res.NameIndex[f.Name]=i } return res } */