Skip to content

kazu/buffer_list

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

78 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

buffer_list wercker status

Package is double linked list with (slice like) sequencial buffer.

container/list's value is not allocated sequncially. so element value occur fragmentation. buffer_list has []byte buffer in List.

buffer_list.List

buffer_list.List is double linked list with member data buffer. if you want to have buffer of list's value, you cant get effect its.

type Hoge struct {
  a int64
  b int64
  c *int64
}

buffer_list := buffer_list.New(&Hoge{}, 100)

hoge := buffer_list.Front().Value().(*Hoge)
hoge.a = 200
hoge.b = 500


new_e := blist.InsertLast() // allocate new element/value
hoge2 := new_e.Value().(*Hoge)
hoge2.a = 222
hoge2.b = 2222
hoge2.c = 1234
new_e.Commit() // protect from gc Free

for e:= blist.Front(); e != nil; e.Next() {
  fmt.Println("value", e.Value() )
}

buffer_list.AList

AList is 'alias list' of buffer_list.List. AList permit you to have multi list with shared buffer data. Alist has Genetator pattern.

bl :=  buffer_list.New(Hoge{}, 10000)
alist := Alist{parent: bl}
ae := alist.NewElem()
alist.Front().Insert(ae)
v := ae.Value().(*Hoge)
v.Commit()

// iteration
for e := range alist.Generator() {
     v := e.Value().(*Hoge)
}

WARNING

this packages buffer is []byte so pointer member of nested struct is commonly freed by GC. buffer_list implement to protect struct's pointer member. but this problem is not fully fixed.

if struct member is chan/slice/embedded pointer interface/Array/map/function/struct , protected.

Contributing

Bug reports and pull requests are welcome on GitHub at https://github.com/kazu/buffer_list

About

Package double linked list with seuqnecial buffer

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages