-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathBitSerializer.h
121 lines (101 loc) · 6.46 KB
/
BitSerializer.h
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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
/*ISC License
Copyright (c) 2018, Daan Verstraten, daanverstraten@hotmail.com
Permission to use, copy, modify, and/or distribute this software for any
purpose with or without fee is hereby granted, provided that the above
copyright notice and this permission notice appear in all copies.
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.*/
#pragma once
#ifndef Class_BitSerializing_BitSerializer_Included
#define Class_BitSerializing_BitSerializer_Included
#include "IBitSerializer.h"
#include "IBitSerializable.h"
using namespace System;
namespace BitSerializing
{
//A class that helps writing and reading bits from a buffer
public ref class BitSerializer : public IBitSerializer
{
private:
long long hBytePosition;
unsigned char hBitPosition;
array<unsigned char, 1>^ hBuffer;
_AmountBitsMask
inline void Initialize();
public:
//The buffer of this BitSerializing
property array<unsigned char, 1>^ Buffer
{
array<unsigned char, 1>^ get() { return hBuffer; }
void set(array<unsigned char, 1>^ values)
{
delete[] hBuffer;
hBuffer = values;
}
};
//Gets the position of the serializers in the buffer
property long long BytePosition
{
virtual long long get()
{
return hBytePosition;
}
virtual void set(long long value)
{
hBytePosition = value;
}
};
//Gets the position of the serializer on which bit is currently working
property unsigned char BitPosition
{
virtual unsigned char get()
{
return hBitPosition;
}
virtual void set(unsigned char value)
{
hBitPosition = value;
}
};
//Gets the length of the buffer
property long long Length
{
virtual long long get()
{
return this->hBuffer->Length;
}
};
//Gets the length of the buffer as a long
property long long LongLength
{
virtual long long get()
{
return this->hBuffer->LongLength;
}
};
//Initializes a new instance of BitSerializing
BitSerializer();
//Initializes a new instance of BitSerializing
BitSerializer(const long% AmountBitsToWriteBitsToWrite);
//Deconstructs this BitSerializing
~BitSerializer();
//write bits into the buffer and moves the position
virtual void WriteBits(const unsigned char % BitsHolder, const unsigned char % Amount);
//read bits from the buffer and moves the position
virtual unsigned char ReadBits(const unsigned char % Amount);
//Save the buffer into the a file
void Save(String^ Filepath);
//Load the file into the buffer
void Load(String^ Filepath);
//Resets the Indexes and the buffer as if this instance was created anew
void Reset();
//Resizes the buffer
void ResizeBuffer(const long% BufferSize);
};
}
#endif // !Class_BitSerializing_BitSerializing