-
Notifications
You must be signed in to change notification settings - Fork 22
/
tree_pool_simple.go
77 lines (76 loc) · 1.46 KB
/
tree_pool_simple.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
package exec
//
//import (
// "fmt"
// "math"
// "sync"
//)
//
//type tree []int
//type TreePool struct {
// //trees map[int][]tree
// //maxPage int
// pool map[int]*sync.Pool
//}
//
//func buildTree(size int) tree {
//
// fmt.Println("new tree.........")
// if size < 1 || !isPowOf2(size) {
// panic(fmt.Errorf("initTree failed,wrong Size:%d", size))
// }
//
// tree := make([]int, (2*size)-1)
//
// nodeSize := size * 2
// for i := 0; i < (2*size)-1; i++ {
// if isPowOf2(i + 1) {
// nodeSize /= 2
// }
// tree[i] = nodeSize
// }
// return tree
//}
//
///**
// */
//func NewTreePool(poolSize int, size int) TreePool {
// pool := make(map[int]*sync.Pool, 0)
// for i := 0; i < poolSize; i++ {
// size := int(math.Pow(2, float64(i))) * DefaultPageSize
// pool[i] = &sync.Pool{
// New: func() interface{} {
// return buildTree(size)
// },
// }
// tree := buildTree(size)
// pool[i].Put(tree)
// }
//
// return TreePool{pool}
//}
//
//func (tp *TreePool) GetTree(pages int) tree {
// pages = fixSize(pages)
// key := int(math.Log2(float64(pages)))
// pool, ok := tp.pool[key]
// if ok {
// return pool.Get().(tree)
// }
//
// tp.pool[key] = &sync.Pool{
// New: func() interface{} {
// return buildTree(pages * DefaultPageSize)
// },
// }
//
// return tp.pool[key].Get().(tree)
//}
//
//func (tp *TreePool) PutTree(tree tree) {
//
// size := (len(tree) + 1) / 2
// pages := size / DefaultPageSize
// key := int(math.Log2(float64(pages)))
// tp.pool[key].Put(tree)
//}