Files
mir_server/server/LogicServer/base/StringBuff.hpp

129 lines
2.3 KiB
C++
Raw Normal View History

2025-01-09 17:45:40 +08:00
#pragma once
//每次内存增长的长度1个简单的类用于字符串的存盘
#define INCREASE_SIZE 1048576
class CStringBuff
{
public:
CStringBuff()
{
m_buff =NULL;
m_totalSize =0;
m_curretSize=0;
m_bIsLock =false;
}
~CStringBuff()
{
if(m_buff)
{
free(m_buff);
m_buff = nullptr;
}
}
//是否锁上了 避免在使用的时候2个地方都去写buff
bool IsLock()
{
return m_bIsLock;
}
//设置 开或者关掉锁
void SetLock(bool isLock)
{
m_bIsLock =isLock;
}
/*
* Comments:
* Param char * str:
* @Return int:
*/
CStringBuff& Append(char *str)
{
if(str !=NULL)
{
size_t newSize= strlen(str); //
if(newSize ==0) return *this;;
if(m_totalSize <= m_curretSize + newSize)
{
size_t allocSize= ( m_curretSize + newSize - m_totalSize); //缺口字节
allocSize = (allocSize/INCREASE_SIZE +1) * INCREASE_SIZE; //缺少多少k不够1k的算1k
m_buff = (char*) realloc(m_buff,(allocSize +m_totalSize) );
if(m_buff)
{
if(m_totalSize ==0)
{
memset(m_buff + m_totalSize, 0, allocSize);
}
m_totalSize += allocSize;
}
else
{
return *this;;
}
}
//strcat(m_buff,str);
//这里去掉strcat
//strcpy(m_buff + m_curretSize,str);
//strncpy()
memcpy((void*)&m_buff[m_curretSize],str,newSize);
m_curretSize += newSize; //当前的字符串的长度
m_buff[m_curretSize]=0;
}
return *this;
}
inline CStringBuff& AppendChar(char str)
{
char buff[2];
buff[1]=0;
buff[0]= str;
Append(buff);
return *this;
}
inline CStringBuff& operator << (char* val)
{
return Append(val);
}
inline CStringBuff& operator << (char val)
{
return AppendChar(val);
}
//获取这个字符串
char * Get()
{
return m_buff;
}
//重用一下
inline void Reset()
{
m_curretSize =0;
if(m_buff && m_totalSize >0 )
{
m_buff[0]=0;
}
}
//释放内存
inline void Empty()
{
if(m_buff)
{
free(m_buff);
m_buff = nullptr;
}
m_totalSize =0;
m_curretSize =0;
}
private:
char * m_buff; //数据指针
size_t m_totalSize; //总大小
size_t m_curretSize; //当前的大小
bool m_bIsLock; //是否是锁住的
};