-
Notifications
You must be signed in to change notification settings - Fork 0
/
struct-performance.go
97 lines (92 loc) · 2.02 KB
/
struct-performance.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
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
// Copyright 2021 冯立强 fenglq@tingyun.com. All rights reserved.
package tingyun3
type structPerformance struct {
sum float64 //累加和
exclusive float64
valueMax float64 //最大值
valueMin float64 //最小值
sumSquare float64 //平方和
accessCount int32 //累加次数
}
func (p *structPerformance) IntSlice() []int64 {
r := make([]int64, 6)
r[0] = int64(p.accessCount)
r[1] = int64(p.sum)
r[2] = int64(p.exclusive)
r[3] = int64(p.valueMax)
r[4] = int64(p.valueMin)
r[5] = int64(p.sumSquare)
return r
}
func (p *structPerformance) FloatSlice() []interface{} {
r := make([]interface{}, 6)
r[0] = p.accessCount
r[1] = p.sum
r[2] = p.exclusive
r[3] = p.valueMax
r[4] = p.valueMin
r[5] = p.sumSquare
return r
}
func newStructPerformance() *structPerformance {
r := &structPerformance{}
r.Reset()
return r
}
func (p *structPerformance) Reset() *structPerformance {
p.sum = 0
p.exclusive = 0
p.valueMax = 0
p.valueMin = 0
p.sumSquare = 0
p.accessCount = 0
return p
}
func (p *structPerformance) Append(q *structPerformance) {
if q.accessCount > 0 {
p.sum += q.sum
if p.accessCount == 0 || q.valueMax > p.valueMax {
p.valueMax = q.valueMax
}
if p.accessCount == 0 || q.valueMin < p.valueMin {
p.valueMin = q.valueMin
}
p.sumSquare += q.sumSquare
p.exclusive += q.exclusive
p.accessCount += q.accessCount
}
}
func (p *structPerformance) AddComponent(value float64, excl float64) {
p.sum += value
if p.accessCount == 0 {
p.valueMax = excl
p.valueMin = excl
} else {
if p.valueMax < excl {
p.valueMax = excl
}
if p.valueMin > excl {
p.valueMin = excl
}
}
p.accessCount++
p.sumSquare += excl * excl
p.exclusive += excl
}
func (p *structPerformance) AddValue(value float64, excl float64) {
p.sum += value
if p.accessCount == 0 {
p.valueMax = value
p.valueMin = value
} else {
if p.valueMax < value {
p.valueMax = value
}
if p.valueMin > value {
p.valueMin = value
}
}
p.accessCount++
p.sumSquare += value * value
p.exclusive += excl
}