Files
mir_server/server/LogicServer/base/StringBuff.hpp
aixianling 5c9f1dae4a init
2025-01-09 17:45:40 +08:00

129 lines
2.3 KiB
C++
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#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; //是否是锁住的
};