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