refactor data hist structs, add Val field

This commit is contained in:
Bradley Cicenas
2017-03-01 12:03:19 +11:00
parent 423ad8e753
commit 1c74377cbd
4 changed files with 48 additions and 62 deletions

View File

@@ -1,74 +1,60 @@
package expanded
type IntHist struct {
data []int
labels []string
Val int // most current data point
Data []int // historical data points
Labels []string
}
func NewIntHist(max int) IntHist {
return IntHist{
data: make([]int, max),
labels: make([]string, max),
func NewIntHist(max int) *IntHist {
return &IntHist{
Data: make([]int, max),
Labels: make([]string, max),
}
}
func (h IntHist) Append(val int) {
if len(h.data) == cap(h.data) {
h.data = append(h.data[:0], h.data[1:]...)
func (h *IntHist) Append(val int) {
if len(h.Data) == cap(h.Data) {
h.Data = append(h.Data[:0], h.Data[1:]...)
}
h.Val = val
h.Data = append(h.Data, val)
}
h.data = append(h.data, val)
type DiffHist struct {
*IntHist
lastVal int
}
func NewDiffHist(max int) *DiffHist {
return &DiffHist{NewIntHist(max), -1}
}
func (h *DiffHist) Append(val int) {
if h.lastVal >= 0 { // skip append if this is the initial update
diff := val - h.lastVal
h.IntHist.Append(diff)
}
h.lastVal = val
}
type FloatHist struct {
data []float64
labels []string
Val float64 // most current data point
Data []float64 // historical data points
Labels []string
}
func NewFloatHist(max int) FloatHist {
return FloatHist{
data: make([]float64, max),
labels: make([]string, max),
Data: make([]float64, max),
Labels: make([]string, max),
}
}
func (h FloatHist) Append(val float64) {
if len(h.data) == cap(h.data) {
h.data = append(h.data[:0], h.data[1:]...)
if len(h.Data) == cap(h.Data) {
h.Data = append(h.Data[:0], h.Data[1:]...)
}
h.data = append(h.data, val)
}
type DiffHist struct {
data []int // data point derivatives
srcData []int // principal input data
labels []string
}
func NewDiffHist(max int) DiffHist {
return DiffHist{
data: make([]int, max),
srcData: make([]int, max),
labels: make([]string, max),
}
}
// return most recent value
func (h DiffHist) Last() int {
return h.data[len(h.data)-1]
}
func (h DiffHist) Append(val int) {
if len(h.data) == cap(h.data) {
h.data = append(h.data[:0], h.data[1:]...)
}
if len(h.srcData) == cap(h.srcData) {
h.srcData = append(h.srcData[:0], h.srcData[1:]...)
}
diff := val - h.srcData[len(h.srcData)-1]
if diff != val { // skip adding to data if this is the initial update
h.data = append(h.data, diff)
}
h.srcData = append(h.srcData, val)
h.Val = val
h.Data = append(h.Data, val)
}