@@ -57,10 +57,21 @@ enum FrameHeaderStatus : uint8_t {
57
57
UNSUPPORTED_WINDOW_SIZE
58
58
};
59
59
60
- struct ZstdFrameHeader {
61
- absl::Span< const uint8_t > kBuffer ;
60
+ class ZstdFrameHeader {
61
+ public:
62
62
ZSTD_frameHeader kHeader ;
63
63
size_t kResult ;
64
+
65
+ absl::Span<const uint8_t > buffer () const {
66
+ return absl::MakeConstSpan (buffer_);
67
+ }
68
+
69
+ ZstdFrameHeader (absl::Span<const uint8_t > buffer, ZSTD_frameHeader h,
70
+ size_t r)
71
+ : kHeader (std::move(h)), kResult (r) {
72
+ std::vector<uint8_t > v (buffer.begin (), buffer.end ());
73
+ buffer_ = v;
74
+ }
64
75
// Parse a frame header from an arbitrary buffer with the ZSTD library.
65
76
static absl::StatusOr<ZstdFrameHeader> Parse (
66
77
absl::Span<const uint8_t > buffer) {
@@ -69,8 +80,11 @@ struct ZstdFrameHeader {
69
80
ZSTD_frameHeader zstd_fh;
70
81
size_t result = ZSTD_getFrameHeader_advanced (
71
82
&zstd_fh, buffer.data (), buffer.size (), ZSTD_f_zstd1_magicless);
72
- return ZstdFrameHeader (buffer, zstd_fh, result);
83
+ return ZstdFrameHeader (buffer, std::move ( zstd_fh) , result);
73
84
}
85
+
86
+ private:
87
+ std::vector<uint8_t > buffer_;
74
88
};
75
89
76
90
class FrameHeaderTest : public xls ::IrTestBase {
@@ -113,7 +127,7 @@ class FrameHeaderTest : public xls::IrTestBase {
113
127
// expected values.
114
128
void RunAndExpectFrameHeader (const ZstdFrameHeader& zstd_frame_header) {
115
129
// Extend buffer contents to 128 bits if necessary.
116
- const absl::Span<const uint8_t >& buffer = zstd_frame_header.kBuffer ;
130
+ const absl::Span<const uint8_t > buffer = zstd_frame_header.buffer () ;
117
131
std::vector<uint8_t > buffer_extended (kDslxBufferSizeBytes , 0 );
118
132
absl::Span<const uint8_t > input_buffer;
119
133
if (buffer.size () < kDslxBufferSizeBytes ) {
0 commit comments