/
DoubleOutputStream.go
69 lines (56 loc) · 1.8 KB
/
DoubleOutputStream.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
package store
import (
"github.com/mothdb-bd/orc-go/pkg/store/metadata"
"github.com/mothdb-bd/orc-go/pkg/util"
)
var DOUBLE_OUT_INSTANCE_SIZE int32 = util.SizeOf(&DoubleOutputStream{})
type DoubleOutputStream struct {
// 继承
ValueOutputStream[*DoubleStreamCheckpoint]
buffer *MothOutputBuffer
checkpoints *util.ArrayList[*DoubleStreamCheckpoint]
closed bool
}
func NewDoubleOutputStream(compression metadata.CompressionKind, bufferSize int32) *DoubleOutputStream {
dm := new(DoubleOutputStream)
dm.checkpoints = util.NewArrayList[*DoubleStreamCheckpoint]()
dm.buffer = NewMothOutputBuffer(compression, bufferSize)
return dm
}
func (dm *DoubleOutputStream) WriteDouble(value float64) {
util.CheckState(!dm.closed)
dm.buffer.WriteDouble(value)
}
// @Override
func (dm *DoubleOutputStream) Close() {
dm.closed = true
dm.buffer.Close()
}
// @Override
func (dm *DoubleOutputStream) RecordCheckpoint() {
util.CheckState(!dm.closed)
dm.checkpoints.Add(NewDoubleStreamCheckpoint(dm.buffer.GetCheckpoint()))
}
// @Override
func (dm *DoubleOutputStream) GetCheckpoints() *util.ArrayList[*DoubleStreamCheckpoint] {
util.CheckState(dm.closed)
return dm.checkpoints
}
// @Override
func (dm *DoubleOutputStream) GetStreamDataOutput(columnId metadata.MothColumnId) *StreamDataOutput {
return NewStreamDataOutput2(dm.buffer.WriteDataTo, metadata.NewStream(columnId, metadata.DATA, util.Int32Exact(dm.buffer.GetOutputDataSize()), false))
}
// @Override
func (dm *DoubleOutputStream) GetBufferedBytes() int64 {
return dm.buffer.EstimateOutputDataSize()
}
// @Override
func (dm *DoubleOutputStream) GetRetainedBytes() int64 {
return int64(DOUBLE_OUT_INSTANCE_SIZE) + dm.buffer.GetRetainedSize()
}
// @Override
func (dm *DoubleOutputStream) Reset() {
dm.closed = false
dm.buffer.Reset()
dm.checkpoints.Clear()
}