forked from metin2/server
58 lines
2.1 KiB
C
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
|