master
h 66 lines 1.34 KB
Raw
1 // Copyright (C) Microsoft Corporation. All rights reserved.
2 // SPDX-License-Identifier: MIT
3
4 #pragma once
5 #include <vector>
6
7 class Packet
8 {
9 public:
10 static constexpr long InitialReservedHeader = 128;
11 static constexpr long InitialPacketSize = 2048;
12
13 // Initial state is data_offset==data_end_offset
14 void reset()
15 {
16 data_offset = InitialReservedHeader;
17 data_end_offset = data_offset + InitialPacketSize;
18 Buffer.resize(InitialReservedHeader + InitialPacketSize);
19 }
20
21 uint8_t* data()
22 {
23 return &Buffer[data_offset];
24 }
25
26 uint8_t* data_end()
27 {
28 return &Buffer[data_end_offset];
29 }
30
31 bool adjust_head(long count)
32 {
33 if ((count + data_offset) < 0)
34 {
35 return false;
36 }
37
38 if ((count + data_offset) > data_end_offset)
39 {
40 return false;
41 }
42
43 data_offset += count;
44 return true;
45 }
46
47 bool adjust_tail(long count)
48 {
49 if ((count + data_end_offset) < data_offset)
50 {
51 return false;
52 }
53 if ((count + data_end_offset) > Buffer.size())
54 {
55 Buffer.resize(count + data_end_offset);
56 }
57
58 data_end_offset += count;
59 return true;
60 }
61
62 private:
63 long data_offset = 0;
64 long data_end_offset = 0;
65 std::vector<uint8_t> Buffer;
66 };