| package fasthttp |
| |
| import ( |
| "io" |
| ) |
| |
| type userDataKV struct { |
| key []byte |
| value interface{} |
| } |
| |
| type userData []userDataKV |
| |
| func (d *userData) Set(key string, value interface{}) { |
| args := *d |
| n := len(args) |
| for i := 0; i < n; i++ { |
| kv := &args[i] |
| if string(kv.key) == key { |
| kv.value = value |
| return |
| } |
| } |
| |
| c := cap(args) |
| if c > n { |
| args = args[:n+1] |
| kv := &args[n] |
| kv.key = append(kv.key[:0], key...) |
| kv.value = value |
| *d = args |
| return |
| } |
| |
| kv := userDataKV{} |
| kv.key = append(kv.key[:0], key...) |
| kv.value = value |
| *d = append(args, kv) |
| } |
| |
| func (d *userData) SetBytes(key []byte, value interface{}) { |
| d.Set(b2s(key), value) |
| } |
| |
| func (d *userData) Get(key string) interface{} { |
| args := *d |
| n := len(args) |
| for i := 0; i < n; i++ { |
| kv := &args[i] |
| if string(kv.key) == key { |
| return kv.value |
| } |
| } |
| return nil |
| } |
| |
| func (d *userData) GetBytes(key []byte) interface{} { |
| return d.Get(b2s(key)) |
| } |
| |
| func (d *userData) Reset() { |
| args := *d |
| n := len(args) |
| for i := 0; i < n; i++ { |
| v := args[i].value |
| if vc, ok := v.(io.Closer); ok { |
| vc.Close() |
| } |
| } |
| *d = (*d)[:0] |
| } |