/* * 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; long 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