forked from lxyfirst/id_server
-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathbuffer.cpp
More file actions
80 lines (64 loc) · 1.36 KB
/
Copy pathbuffer.cpp
File metadata and controls
80 lines (64 loc) · 1.36 KB
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
/*
* buffer.cpp
*
* Author: lixingyi (lxyfirst@163.com)
*/
#include <stdlib.h>
#include <string.h>
#include "buffer.h"
namespace framework
{
buffer::buffer():m_begin(NULL),m_end(NULL),m_data(NULL),m_space(NULL)
{
// TODO Auto-generated constructor stub
}
buffer::~buffer()
{
fini() ;
}
int buffer::init(int size)
{
if(size < 8 || m_begin != NULL ) return -1 ;
m_begin = (char*)malloc(size) ;
if(m_begin == NULL ) return -2 ;
m_end = m_begin + size ;
m_data = m_space = m_begin ;
return 0 ;
}
void buffer::fini()
{
if(m_begin != NULL )
{
free(m_begin) ;
m_begin = m_end = m_data = m_space = NULL ;
}
}
int buffer::resize(int size)
{
if( m_space - m_begin > size ) return -1 ;
char* new_buffer = (char*)realloc(m_begin,size) ;
if(new_buffer == NULL ) return -2 ;
if(new_buffer == m_begin )
{
m_end = m_begin + size ;
}
else
{
m_data = new_buffer + (m_data - m_begin) ;
m_space = new_buffer + (m_space - m_begin) ;
m_begin = new_buffer ;
m_end = m_begin + size ;
}
return 0 ;
}
void buffer::adjust()
{
if(m_begin != NULL && (m_data - m_begin ) > (m_end - m_begin)/2 )
{
int count = m_space - m_data ;
memmove(m_begin,m_data,count ) ;
m_data = m_begin ;
m_space = m_begin + count ;
}
}
}