-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathbuffer.cpp
101 lines (71 loc) · 1.35 KB
/
buffer.cpp
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
#include "buffer.h"
Buffer::Buffer(char *array, int size)
{
data_array = array;
array_size = size - 1;
length = 0;
put_idx = 0;
get_idx = 0;
}
Buffer::~Buffer()
{
}
int Buffer::putByte(char* ch)
{
if (length > array_size)
return -1;
int ptr = (put_idx + get_idx) & array_size;
data_array[ptr] = *ch;
put_idx++;
length++;
return 1;
}
int Buffer::getByte(char* ch)
{
if(put_idx > 0)
{
*ch = data_array[get_idx];
put_idx--;
length--;
get_idx = (get_idx + 1) & array_size;
return 1;
}
else
return -1;
}
int Buffer::putN(char *data, int offset, int n)
{
int put;
if (n > ((array_size + 1) - length))
n = array_size + 1 - length;
put = n;
int i = offset;
for (; n > 0; n--)
{
int ptr = (put_idx + get_idx) & array_size;
data_array[ptr] = data[i++];
put_idx++;
}
length += put;
return put;
}
int Buffer::getN(char *data, int offset, int n)
{
int got;
if (n > length)
n = length;
got = n;
int i = offset;
for (; n > 0; n--)
{
data[i++] = data_array[get_idx];
put_idx = (put_idx - 1) & array_size;
get_idx = (get_idx + 1) & array_size;
}
length -= got;
return got;
}
int Buffer::getLength()
{
return length;
}