debug.go (1090B)
1 package state 2 3 import ( 4 "fmt" 5 "strings" 6 ) 7 8 type flagDebugger struct { 9 flagStrings map[uint32]string 10 } 11 12 func newFlagDebugger() flagDebugger { 13 fd := flagDebugger{ 14 flagStrings: make(map[uint32]string), 15 } 16 fd.register(FLAG_READIN, "INTERNAL_READIN") 17 fd.register(FLAG_INMATCH, "INTERNAL_INMATCH") 18 fd.register(FLAG_TERMINATE, "INTERNAL_TERMINATE") 19 fd.register(FLAG_DIRTY, "INTERNAL_DIRTY") 20 fd.register(FLAG_WAIT, "INTERNAL_WAIT") 21 fd.register(FLAG_LOADFAIL, "INTERNAL_LOADFAIL") 22 return fd 23 } 24 25 func(fd *flagDebugger) register(flag uint32, name string) { 26 fd.flagStrings[flag] = name 27 } 28 29 func(fd *flagDebugger) Register(flag uint32, name string) error { 30 if (flag < 8) { 31 return fmt.Errorf("flag %v is not definable by user", flag) 32 } 33 fd.register(flag, name) 34 return nil 35 } 36 37 func(fd *flagDebugger) AsString(flags []byte, length uint32) string { 38 var r []string 39 var i uint32 40 for i = 0; i < length + 8; i++ { 41 if getFlag(i, flags) { 42 s := fmt.Sprintf("%s(%v)", fd.flagStrings[i], i) 43 r = append(r, s) 44 } 45 } 46 return strings.Join(r, ",") 47 } 48 49 var ( 50 FlagDebugger = newFlagDebugger() 51 )