restructurando el codigo para actualizar los packs con la nueva arquitectura del builder

master
DEV 2 years ago
parent ca0ba95339
commit 11a264d42b

@ -315,7 +315,7 @@ func (b *Builder) makeLevel (mode pstate.Mode, isNil, isEmpty bool, maker func(b
maker(b)
if b.Err == nil {
if b.Err != nil {
return
}

@ -112,7 +112,7 @@ func (s *keyStringer) getOrBuildStringer(rtype reflect.Type) rMapEntryFnc {
}
fn := s.checkInterfaces(rtype)
if fn == nil && rtype.Kind() == reflect.Interface {
if fn == nil {
fn = s.interfaceStringer(rtype)
}
s.RUnlock()
@ -132,7 +132,7 @@ func (s *keyStringer) interfaceStringer(rtype reflect.Type) rMapEntryFnc {
if rtype.Kind() == reflect.String {
return func(e *rMapEntry, v reflect.Value) error {
e.k = v.Elem().String()
e.k = v.String()
e.f = apack.FlagScapeHTML
return nil
}

@ -88,6 +88,7 @@ func (m *rMap) pack (builder *Builder, value reflect.Value) {
b.writeSepIf(i>0)
b.B.WriteString(ls[i].k)
b.B.WriteByte(':')
b.Current.IsValue = true
m.packFn(b,ls[i].v)
if b.Err != nil {
return

@ -39,7 +39,7 @@ type (
field string
Level int
levels []StateLevel
levels []*StateLevel
Current *StateLevel
Pos int
@ -66,16 +66,15 @@ func ReleaseState (state *State) {
func NewState(options ...StateFnc) *State {
return (&State{
Level: -1,
B : bfrs.NewABuffer(),
levels: make([]StateLevel,levelsLen),
}).init(options) }
func (s *State) init (options []StateFnc) *State {
for _,o := range options { o(s) }
s.levels[0].Ini(ModeValue,0)
s.Current = &s.levels[0]
s.Open(ModeValue)
return s
}
@ -83,15 +82,13 @@ func (s *State) reset () *State {
s.B.Reset()
s.key = nil
s.field = ""
s.Level = 0
s.Level = -1
s.Pos = 0
s.Err = nil
s.cyclesCheck = nil
s.Encrypter = nil
for i := 0; i<len(s.levels); i++ {
(&s.levels[i]).Ini(ModeNone,0)
}
s.levels = s.levels[:levelsLen]
s.levels = s.levels[:0]
s.Current= nil
return s
}
@ -101,12 +98,8 @@ func (s *State) reset () *State {
func (s *State) Open (mode Mode) {
s.Level++
if s.Level > levelsLen {
s.levels = append(s.levels, *((&(StateLevel{})).Ini(mode, s.B.Len())))
} else {
(&s.levels[s.Level]).Ini(mode, s.B.Len())
}
s.Current = &s.levels[s.Level]
s.levels = append(s.levels, (&StateLevel{}).Ini(mode, s.B.Len()))
s.Current = s.levels[s.Level]
}
func (s *State) Close(mode Mode) {
@ -115,10 +108,12 @@ func (s *State) Close(mode Mode) {
s.SetError(apack.G.ErrStateInvalidLevel)
return
}
if s.levels[s.Level].Mode != mode {
//s.levels = s.levels[:s.Level+1]
if s.levels[s.Level+1].Mode != mode {
s.SetError(apack.G.ErrInvalidNode)
return
}
s.Current = &s.levels[s.Level]
s.Current = s.levels[s.Level]
}

Loading…
Cancel
Save

Powered by TurnKey Linux.