wp
This commit is contained in:
@@ -48,18 +48,15 @@ type CumulativeDeltaCompressor struct {
|
||||
}
|
||||
|
||||
// Після відновлення із снапшота
|
||||
func NewCumulativeDeltaCompressor(buf []byte, fracDigits byte) *CumulativeDeltaCompressor {
|
||||
func NewCumulativeDeltaCompressor(fracDigits byte, buf []byte, payloadSize int) *CumulativeDeltaCompressor {
|
||||
var coef float64 = 1
|
||||
if fracDigits > 0 {
|
||||
coef = math.Pow(10, float64(fracDigits))
|
||||
}
|
||||
return &CumulativeDeltaCompressor{
|
||||
s := &CumulativeDeltaCompressor{
|
||||
buf: buf,
|
||||
coef: coef,
|
||||
}
|
||||
}
|
||||
|
||||
func (s *CumulativeDeltaCompressor) RestoreState(payloadSize int) {
|
||||
if payloadSize > 0 {
|
||||
s.pos = payloadSize - 1 // завжди показує на h
|
||||
// base value на початку
|
||||
@@ -74,16 +71,27 @@ func (s *CumulativeDeltaCompressor) RestoreState(payloadSize int) {
|
||||
log.Fatalf("bug: get last delta: %s", err)
|
||||
}
|
||||
}
|
||||
return s
|
||||
}
|
||||
|
||||
// func (s *CumulativeDeltaCompressor) RestoreState() {
|
||||
|
||||
// }
|
||||
|
||||
// func (s *CumulativeDeltaCompressor) Size() int {
|
||||
// return s.pos
|
||||
// }
|
||||
|
||||
type EvaluationReport struct {
|
||||
CompressionWay int
|
||||
TotalSpace int
|
||||
AdditionalSpace int
|
||||
Delta uint64
|
||||
}
|
||||
|
||||
func (s *CumulativeDeltaCompressor) Evaluate(value float64) (compressionWay int, requiredSpace int) {
|
||||
delta := uint64((value-s.baseValue)*s.coef + eps) // fix - if delta 0, no eps
|
||||
requiredSpace = s.pos
|
||||
// fix - requiredSpace - all space
|
||||
if s.pos > 0 {
|
||||
if s.h < 128 {
|
||||
// run
|
||||
|
||||
@@ -165,10 +165,11 @@ func TestCumulativeDeltaCompressor(t *testing.T) {
|
||||
var (
|
||||
fracDigits byte = 1
|
||||
buf = make([]byte, 8)
|
||||
payloadSize = 0
|
||||
compressionWay int
|
||||
requiredSpace int
|
||||
)
|
||||
c := NewCumulativeDeltaCompressor(buf, fracDigits)
|
||||
c := NewCumulativeDeltaCompressor(fracDigits, buf, payloadSize)
|
||||
for _, num := range testCase.Nums {
|
||||
compressionWay, requiredSpace = c.Evaluate(num)
|
||||
c.Compress(compressionWay, num)
|
||||
@@ -281,9 +282,10 @@ func TestCumulativeDeltaDecompressorFromState(t *testing.T) {
|
||||
var (
|
||||
fracDigits byte = 1
|
||||
buf = make([]byte, 16)
|
||||
payloadSize = 0
|
||||
decodedNums []float64
|
||||
)
|
||||
c := NewCumulativeDeltaCompressor(buf, fracDigits)
|
||||
c := NewCumulativeDeltaCompressor(fracDigits, buf, payloadSize)
|
||||
for _, num := range testCase.Nums {
|
||||
compressionWay, _ := c.Evaluate(num)
|
||||
c.Compress(compressionWay, num)
|
||||
@@ -524,10 +526,11 @@ func TestInstantDeltaCompressor(t *testing.T) {
|
||||
var (
|
||||
fracDigits byte = 1
|
||||
buf = make([]byte, 8)
|
||||
payloadSize = 0
|
||||
compressionWay int
|
||||
requiredSpace int
|
||||
)
|
||||
c := NewInstantDeltaCompressor(buf, fracDigits)
|
||||
c := NewInstantDeltaCompressor(fracDigits, buf, payloadSize)
|
||||
for _, num := range testCase.Nums {
|
||||
compressionWay, requiredSpace = c.Evaluate(num)
|
||||
c.Compress(compressionWay, num)
|
||||
@@ -640,9 +643,10 @@ func TestInstantDeltaDecompressorFromState(t *testing.T) {
|
||||
var (
|
||||
fracDigits byte = 1
|
||||
buf = make([]byte, 16)
|
||||
payloadSize = 0
|
||||
decodedNums []float64
|
||||
)
|
||||
c := NewInstantDeltaCompressor(buf, fracDigits)
|
||||
c := NewInstantDeltaCompressor(fracDigits, buf, payloadSize)
|
||||
for _, num := range testCase.Nums {
|
||||
compressionWay, _ := c.Evaluate(num)
|
||||
c.Compress(compressionWay, num)
|
||||
@@ -840,10 +844,11 @@ func TestTimeDeltaCompressor(t *testing.T) {
|
||||
//fmt.Println("----------")
|
||||
var (
|
||||
buf = make([]byte, 8)
|
||||
payloadSize = 0
|
||||
compressionWay int
|
||||
requiredSpace int
|
||||
)
|
||||
c := NewTimeDeltaCompressor(buf)
|
||||
c := NewTimeDeltaCompressor(buf, payloadSize)
|
||||
for _, num := range testCase.Nums {
|
||||
compressionWay, requiredSpace = c.Evaluate(num)
|
||||
c.Compress(compressionWay, num)
|
||||
@@ -957,9 +962,10 @@ func TestTimeDeltaDecompressorFromState(t *testing.T) {
|
||||
for caseIdx, testCase := range testCases {
|
||||
var (
|
||||
buf = make([]byte, 16)
|
||||
payloadSize = 0
|
||||
decodedNums []uint32
|
||||
)
|
||||
c := NewTimeDeltaCompressor(buf)
|
||||
c := NewTimeDeltaCompressor(buf, payloadSize)
|
||||
for _, num := range testCase.Nums {
|
||||
compressionWay, _ := c.Evaluate(num)
|
||||
c.Compress(compressionWay, num)
|
||||
|
||||
@@ -19,7 +19,7 @@ type InstantDeltaCompressor struct {
|
||||
state *InstantDeltaCapturedState
|
||||
}
|
||||
|
||||
func NewInstantDeltaCompressor(buf []byte, fracDigits byte) *InstantDeltaCompressor {
|
||||
func NewInstantDeltaCompressor(fracDigits byte, buf []byte, payloadSize int) *InstantDeltaCompressor {
|
||||
var coef float64 = 1
|
||||
if fracDigits > 0 {
|
||||
coef = math.Pow(10, float64(fracDigits))
|
||||
@@ -28,10 +28,6 @@ func NewInstantDeltaCompressor(buf []byte, fracDigits byte) *InstantDeltaCompres
|
||||
buf: buf,
|
||||
coef: coef,
|
||||
}
|
||||
return s
|
||||
}
|
||||
|
||||
func (s *InstantDeltaCompressor) RestoreState(payloadSize int) {
|
||||
if payloadSize > 0 {
|
||||
s.pos = payloadSize - 1 // завжди показує на h
|
||||
// base value на початку
|
||||
@@ -46,8 +42,13 @@ func (s *InstantDeltaCompressor) RestoreState(payloadSize int) {
|
||||
log.Fatalf("bug: get last delta: %s", err)
|
||||
}
|
||||
}
|
||||
return s
|
||||
}
|
||||
|
||||
// func (s *InstantDeltaCompressor) RestoreState() {
|
||||
|
||||
// }
|
||||
|
||||
// func (s *InstantDeltaCompressor) Size() int {
|
||||
// return s.pos
|
||||
// }
|
||||
|
||||
@@ -34,15 +34,12 @@ type TimeDeltaCompressor struct {
|
||||
// а lastDelta і h треба прочитати із payload (якщо є)
|
||||
|
||||
// Кодує значення справа наліво функціями TailPut*. Читає значення зліва направо функціями Get*
|
||||
func NewTimeDeltaCompressor(buf []byte) *TimeDeltaCompressor {
|
||||
return &TimeDeltaCompressor{
|
||||
func NewTimeDeltaCompressor(buf []byte, payloadSize int) *TimeDeltaCompressor {
|
||||
s := &TimeDeltaCompressor{
|
||||
buf: buf,
|
||||
}
|
||||
}
|
||||
|
||||
func (s *TimeDeltaCompressor) RestoreState(payloadSize int, lastTimestamp uint32) {
|
||||
if payloadSize > 0 {
|
||||
s.lastUnixtime = lastTimestamp
|
||||
//s.lastUnixtime = lastTimestamp
|
||||
s.pos = len(s.buf) - payloadSize
|
||||
if payloadSize > 4 {
|
||||
s.h = s.buf[s.pos]
|
||||
@@ -53,8 +50,14 @@ func (s *TimeDeltaCompressor) RestoreState(payloadSize int, lastTimestamp uint32
|
||||
s.lastDelta = uint32(u64)
|
||||
}
|
||||
}
|
||||
return s
|
||||
}
|
||||
|
||||
// FIX - restire lastUnixtime
|
||||
// func (s *TimeDeltaCompressor) RestoreState() {
|
||||
|
||||
// }
|
||||
|
||||
// retrun
|
||||
func (s *TimeDeltaCompressor) Evaluate(unixtime uint32) (compressionWay int, requiredSpace int) {
|
||||
requiredSpace = len(s.buf) - s.pos
|
||||
|
||||
Reference in New Issue
Block a user