Files
LGram16 dd97ddec92 Restructure repository to include all source folders
Move git root from Client/ to src/ to track all source code:
- Client: Game client source (moved to Client/Client/)
- Server: Game server source
- GameTools: Development tools
- CryptoSource: Encryption utilities
- database: Database scripts
- Script: Game scripts
- rylCoder_16.02.2008_src: Legacy coder tools
- GMFont, Game: Additional resources

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-29 20:17:20 +09:00

78 lines
1.9 KiB
C++

#ifndef _CBUFFER_H_
#define _CBUFFER_H_
#ifndef WIN32_LEAN_AND_MEAN
#define WIN32_LEAN_AND_MEAN
#endif
#include <winsock2.h>
#include <windows.h>
#include "../../Network/Address/INET_Addr.h"
class CBufferFactory;
class CBuffer
{
public:
CBuffer(CBufferFactory& bufferfactory);
~CBuffer();
void init(char* internal_buffer, unsigned long buffer_size);
bool is_valid() { return 0 != internal_buffer_; }
// 읽기 포인터 얻어 오기.
char* rd_ptr() const { return rd_ptr_; }
void rd_ptr(size_t n) { rd_ptr_ += n; }
void rd_ptr(char* ptr) { rd_ptr_ = ptr; }
// 읽기 포인터 얻어 오기.
char* wr_ptr() const { return wr_ptr_; }
void wr_ptr(size_t n) { wr_ptr_ += n; }
void wr_ptr(char* ptr) { wr_ptr_ = ptr; }
// 버퍼 시작 및 끝경과(past-end) 값 얻기.
char* begin() const { return internal_buffer_; }
char* end() const { return internal_buffer_ + buffer_size_; }
// 데이터를 버퍼로 복사.
bool push(const void* ptr, size_t n);
// 이미 읽은 데이터들을 버리고 버퍼 및 내용을 재조정. 각 포인터들이 무효화됨.
void pop_read_data();
size_t length() const { return wr_ptr_ - rd_ptr_; } // 데이터 길이
size_t capacity() const { return buffer_size_; } // 버퍼 크기
size_t remain() const { return internal_buffer_ + buffer_size_ - wr_ptr_; } // 남은 데이터 공간
CBuffer* next() { return next_; }
void next(CBuffer* next) { next_ = next; }
CBuffer* prev() { return prev_; }
void prev(CBuffer* prev) { prev_ = prev; }
INET_Addr& get_addr() { return address_; }
CBufferFactory& GetBufferFactory() { return bufferfactory_; }
private:
// -----------------------------------------------------------
// variable
char* internal_buffer_;
char* rd_ptr_;
char* wr_ptr_;
size_t buffer_size_;
CBuffer* next_;
CBuffer* prev_;
INET_Addr address_;
CBufferFactory& bufferfactory_;
};
#endif