增加Array.Expand,控制数组是否可扩容。
字符串增加一个构造函数,允许外部设定一个缓冲区且不可扩容,适用于令牌配置。 初步测试通过
This commit is contained in:
parent
e361c3fb17
commit
fc3ee97f1e
|
@ -43,6 +43,7 @@ void Array::move(Array& rval)
|
||||||
_Capacity = rval._Capacity;
|
_Capacity = rval._Capacity;
|
||||||
_needFree = rval._needFree;
|
_needFree = rval._needFree;
|
||||||
_canWrite = rval._canWrite;
|
_canWrite = rval._canWrite;
|
||||||
|
Expand = rval.Expand;
|
||||||
|
|
||||||
rval._Capacity = 0;
|
rval._Capacity = 0;
|
||||||
rval._needFree = false;
|
rval._needFree = false;
|
||||||
|
@ -51,6 +52,7 @@ void Array::move(Array& rval)
|
||||||
|
|
||||||
void Array::Init()
|
void Array::Init()
|
||||||
{
|
{
|
||||||
|
Expand = true;
|
||||||
_Size = 1;
|
_Size = 1;
|
||||||
|
|
||||||
_Capacity = _Length;
|
_Capacity = _Length;
|
||||||
|
@ -276,6 +278,8 @@ bool Array::CheckCapacity(int len, int bak)
|
||||||
// 是否超出容量
|
// 是否超出容量
|
||||||
// 如果不是可写,在扩容检查时,也要进行扩容,避免内部不可写数据被修改
|
// 如果不是可写,在扩容检查时,也要进行扩容,避免内部不可写数据被修改
|
||||||
if(_Arr && len <= _Capacity && _canWrite) return true;
|
if(_Arr && len <= _Capacity && _canWrite) return true;
|
||||||
|
// 是否可以扩容
|
||||||
|
if(!Expand) return false;
|
||||||
|
|
||||||
// 自动计算合适的容量
|
// 自动计算合适的容量
|
||||||
int sz = 0x40;
|
int sz = 0x40;
|
||||||
|
|
|
@ -7,6 +7,8 @@
|
||||||
class Array : public Buffer
|
class Array : public Buffer
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
bool Expand; // 是否可扩容
|
||||||
|
|
||||||
// 数组最大容量。初始化时决定,后面不允许改变
|
// 数组最大容量。初始化时决定,后面不允许改变
|
||||||
inline int Capacity() const { return _Capacity; }
|
inline int Capacity() const { return _Capacity; }
|
||||||
|
|
||||||
|
|
|
@ -14,8 +14,9 @@ public:
|
||||||
String(cstring cstr = "");
|
String(cstring cstr = "");
|
||||||
String(const String& str);
|
String(const String& str);
|
||||||
String(String&& rval);
|
String(String&& rval);
|
||||||
// 外部传入缓冲区供内部使用,注意长度减去零结束符
|
// 外部传入缓冲区供内部使用,内部计算字符串长度,注意长度减去零结束符
|
||||||
String(char* str, int length);
|
String(char* str, int length);
|
||||||
|
String(char* str, int length, bool expand);
|
||||||
// 包装静态字符串,直接使用,修改时扩容
|
// 包装静态字符串,直接使用,修改时扩容
|
||||||
String(cstring str, int length);
|
String(cstring str, int length);
|
||||||
explicit String(char c);
|
explicit String(char c);
|
||||||
|
|
|
@ -120,15 +120,23 @@ String::String(double value, byte decimalPlaces) : Array(Arr, ArrayLength(Arr))
|
||||||
//dtostrf(value, (decimalPlaces + 2), decimalPlaces, _Arr);
|
//dtostrf(value, (decimalPlaces + 2), decimalPlaces, _Arr);
|
||||||
}
|
}
|
||||||
|
|
||||||
// 外部传入缓冲区供内部使用,注意长度减去零结束符
|
// 外部传入缓冲区供内部使用,内部计算字符串长度,注意长度减去零结束符
|
||||||
String::String(char* str, int length) : Array(str, length)
|
String::String(char* str, int length) : Array(str, length)
|
||||||
{
|
{
|
||||||
//init();
|
_Arr = str;
|
||||||
|
|
||||||
_Arr = str;
|
|
||||||
_Capacity = length - 1;
|
_Capacity = length - 1;
|
||||||
_Length = 0;
|
|
||||||
_Arr[0] = '\0';
|
// 计算外部字符串长度
|
||||||
|
int len = strlen(str);
|
||||||
|
if(len >= length) len = length - 1;
|
||||||
|
_Length = len;
|
||||||
|
_Arr[_Length] = '\0';
|
||||||
|
}
|
||||||
|
|
||||||
|
// 外部传入缓冲区供内部使用,内部计算字符串长度,注意长度减去零结束符
|
||||||
|
String::String(char* str, int length, bool expand) : String(str, length)
|
||||||
|
{
|
||||||
|
Expand = expand;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 包装静态字符串,直接使用,修改时扩容
|
// 包装静态字符串,直接使用,修改时扩容
|
||||||
|
|
|
@ -36,6 +36,7 @@ void Object::Show(bool newLine) const
|
||||||
// 为了减少堆分配,采用较大的栈缓冲区
|
// 为了减少堆分配,采用较大的栈缓冲区
|
||||||
char cs[0x200];
|
char cs[0x200];
|
||||||
String str(cs, ArrayLength(cs));
|
String str(cs, ArrayLength(cs));
|
||||||
|
str.SetLength(0);
|
||||||
ToStr(str);
|
ToStr(str);
|
||||||
str.Show(newLine);
|
str.Show(newLine);
|
||||||
}
|
}
|
||||||
|
|
|
@ -50,7 +50,7 @@ public:
|
||||||
|
|
||||||
// 收到数据
|
// 收到数据
|
||||||
virtual void OnProcess(const Buffer& bs, const IPEndPoint& remote);
|
virtual void OnProcess(const Buffer& bs, const IPEndPoint& remote);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
bool SendData(const String& cmd, const Buffer& bs);
|
bool SendData(const String& cmd, const Buffer& bs);
|
||||||
};
|
};
|
||||||
|
|
|
@ -54,7 +54,9 @@ TokenConfig* TokenConfig::Create(cstring vendor, ProtocolType protocol, ushort s
|
||||||
tc.Init();
|
tc.Init();
|
||||||
tc.Protocol = protocol;
|
tc.Protocol = protocol;
|
||||||
tc.Load();
|
tc.Load();
|
||||||
if(tc.Protocol == 0x00)tc.Protocol = ProtocolType::Udp; // 默认 UDP 不允许 unknown
|
|
||||||
|
// 默认 UDP 不允许 unknown
|
||||||
|
if(tc.Protocol == 0x00) tc.Protocol = ProtocolType::Udp;
|
||||||
|
|
||||||
bool rs = tc.New;
|
bool rs = tc.New;
|
||||||
auto vnd = tc.Vendor();
|
auto vnd = tc.Vendor();
|
||||||
|
|
|
@ -36,11 +36,11 @@ public:
|
||||||
virtual void Init();
|
virtual void Init();
|
||||||
virtual void Show() const;
|
virtual void Show() const;
|
||||||
|
|
||||||
String User() { return String(_User); }
|
String User() { return String(_User, sizeof(_User), false); }
|
||||||
String Pass() { return String(_Pass); }
|
String Pass() { return String(_Pass, sizeof(_Pass), false); }
|
||||||
String Token() { return String(_Token); }
|
String Token() { return String(_Token, sizeof(_Token), false); }
|
||||||
String Server() { return String(_Server); }
|
String Server() { return String(_Server, sizeof(_Server), false); }
|
||||||
String Vendor() { return String(_Vendor); }
|
String Vendor() { return String(_Vendor, sizeof(_Vendor), false); }
|
||||||
|
|
||||||
static TokenConfig* Current;
|
static TokenConfig* Current;
|
||||||
static TokenConfig* Create(cstring vendor, ProtocolType protocol, ushort sport, ushort port);
|
static TokenConfig* Create(cstring vendor, ProtocolType protocol, ushort sport, ushort port);
|
||||||
|
|
|
@ -589,6 +589,7 @@ void StatTask(void* param)
|
||||||
|
|
||||||
char cs[128];
|
char cs[128];
|
||||||
String str(cs, ArrayLength(cs));
|
String str(cs, ArrayLength(cs));
|
||||||
|
str.SetLength(0);
|
||||||
st->ToStr(str);
|
st->ToStr(str);
|
||||||
str.Show(true);
|
str.Show(true);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue