forked from metin2/server
1
0
Fork 0
server/libthecore/include/buffer.h

58 lines
2.1 KiB
C

/*
* Filename: buffer.h
* Description: Buffer 처리 모듈
*
* Author: 김한주 (aka. 비엽, Cronan), 송영진 (aka. myevan, 빗자루)
*/
#ifndef __INC_LIBTHECORE_BUFFER_H__
#define __INC_LIBTHECORE_BUFFER_H__
#define SAFE_BUFFER_DELETE(buf) { if(buf != NULL) { buffer_delete(buf); buf = NULL; } }
typedef struct buffer BUFFER;
typedef struct buffer * LPBUFFER;
struct buffer
{
struct buffer * next;
char * write_point;
int write_point_pos;
const char * read_point;
int length;
char * mem_data;
int mem_size;
int flag;
};
extern LPBUFFER buffer_new(int size); // 새 버퍼 생성
extern void buffer_delete(LPBUFFER buffer); // 버퍼 삭제
extern void buffer_reset(LPBUFFER buffer); // 버퍼 길이들을 초기화
extern DWORD buffer_size(LPBUFFER buffer); // 버퍼에 남은 길이
extern int buffer_has_space(LPBUFFER buffer); // 쓸 수 있는 길이를 리턴
extern void buffer_write (LPBUFFER& buffer, const void* src, int length); // 버퍼에 쓴다.
extern void buffer_read(LPBUFFER buffer, void * buf, int bytes); // 버퍼에서 읽는다.
extern BYTE buffer_get_byte(LPBUFFER buffer);
extern WORD buffer_get_word(LPBUFFER buffer);
extern DWORD buffer_get_dword(LPBUFFER buffer);
// buffer_proceed 함수는 buffer_peek으로 읽기용 포인터를 리턴 받아서 쓸 필요가
// 있을 때 처리가 끝나면 얼마나 처리가 끝났다고 통보해야 할 때 쓴다.
// (buffer_read, buffer_get_* 시리즈의 경우에는 알아서 처리되지만 peek으로 처리했을
// 때는 그렇게 될 수가 없으므로)
extern const void * buffer_read_peek(LPBUFFER buffer); // 읽는 위치를 리턴
extern void buffer_read_proceed(LPBUFFER buffer, int length); // length만큼의 처리가 끝남
// 마찬가지로 write_peek으로 쓰기 위치를 얻어온 다음 얼마나 썼나 통보할 때
// buffer_write_proceed를 사용한다.
extern void * buffer_write_peek(LPBUFFER buffer); // 쓰는 위치를 리턴
extern void buffer_write_proceed(LPBUFFER buffer, int length); // length만 증가 시킨다.
extern void buffer_adjust_size(LPBUFFER & buffer, int add_size); // add_size만큼 추가할 크기를 확보
#endif