废弃ByteArray的拷贝构造函数,以免引起误解
This commit is contained in:
parent
03cc00c88a
commit
1b26bdb65e
|
@ -390,7 +390,8 @@ void ConfigBase::Load()
|
|||
|
||||
void ConfigBase::Save() const
|
||||
{
|
||||
auto bs = ToArray();
|
||||
//auto bs = ToArray();
|
||||
Buffer bs(_Start, Size());
|
||||
debug_printf("%s::Save %d 字节 ", _Name, bs.Length());
|
||||
|
||||
auto pt = Cfg.Set(_Name, bs);
|
||||
|
|
|
@ -86,6 +86,6 @@ void BufferPort::OnReceive(const Buffer& bs, void* param)
|
|||
if(Buf.Capacity() > 0)
|
||||
{
|
||||
Buf.SetLength(0);
|
||||
Buf.Copy(0, bs, 0, -1);
|
||||
Buf.Copy(0, bs, 0, bs.Length());
|
||||
}
|
||||
}
|
||||
|
|
|
@ -143,7 +143,7 @@ void UBlox::OnReceive(const Buffer& bs, void* param)
|
|||
// 不合适的数据,可以直接附加在后面
|
||||
if(Buf.Length() != 0)
|
||||
{
|
||||
Buf.Copy(0, bs, 0, Buf.Length());
|
||||
Buf.Copy(Buf.Length(), bs, 0, bs.Length());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -27,7 +27,7 @@ int DataStore::Write(uint offset, const Buffer& bs)
|
|||
if(!OnHook(offset, size, 0)) return -1;
|
||||
|
||||
// 从数据区读取数据
|
||||
uint rs = Data.Copy(offset, bs, 0, -1);
|
||||
uint rs = Data.Copy(offset, bs, 0, size);
|
||||
|
||||
// 执行钩子函数
|
||||
if(!OnHook(offset, size, 1)) return -1;
|
||||
|
|
|
@ -376,11 +376,11 @@ typedef struct _DHCP_OPT
|
|||
return this;
|
||||
}
|
||||
|
||||
struct _DHCP_OPT* SetData(DHCP_OPTION option, String& str)
|
||||
/*struct _DHCP_OPT* SetData(DHCP_OPTION option, String& str)
|
||||
{
|
||||
ByteArray bs(str);
|
||||
return SetData(option, bs);
|
||||
}
|
||||
}*/
|
||||
|
||||
struct _DHCP_OPT* SetData(DHCP_OPTION option, uint value)
|
||||
{
|
||||
|
|
|
@ -85,13 +85,13 @@ uint ITransport::Read(Buffer& bs)
|
|||
return OnRead(bs);
|
||||
}
|
||||
|
||||
Buffer ITransport::Read()
|
||||
/*Buffer ITransport::Read()
|
||||
{
|
||||
ByteArray bs;
|
||||
Read(bs);
|
||||
|
||||
return bs;
|
||||
}
|
||||
}*/
|
||||
|
||||
// 注册回调函数
|
||||
void ITransport::Register(TransportHandler handler, void* param)
|
||||
|
|
|
@ -38,7 +38,7 @@ public:
|
|||
bool Write(const Buffer& bs, void* opt);
|
||||
// 接收数据
|
||||
uint Read(Buffer& bs);
|
||||
Buffer Read();
|
||||
//Buffer Read();
|
||||
|
||||
// 注册回调函数
|
||||
virtual void Register(TransportHandler handler, void* param = NULL);
|
||||
|
|
27
String.cpp
27
String.cpp
|
@ -179,38 +179,13 @@ void String::move(String& rhs)
|
|||
|
||||
if(rhs._Arr != rhs.Arr && rhs._needFree)
|
||||
{
|
||||
_Arr = rhs._Arr;
|
||||
_Capacity = rhs._Capacity;
|
||||
_Length = rhs._Length;
|
||||
_needFree = rhs._needFree;
|
||||
|
||||
rhs._Arr = nullptr;
|
||||
rhs._Capacity = 0;
|
||||
rhs._Length = 0;
|
||||
rhs._needFree = false;
|
||||
Array::move(rhs);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
SetLength(rhs.Length());
|
||||
copy(rhs._Arr, rhs._Length);
|
||||
|
||||
/*if (_Arr)
|
||||
{
|
||||
// 如果容量不足
|
||||
if (_Capacity >= rhs._Length)
|
||||
{
|
||||
Buffer(_Arr, _Capacity).Copy(0, rhs._Arr, rhs._Length);
|
||||
_Length = rhs._Length;
|
||||
_Arr[_Length] = '\0';
|
||||
rhs._Length = 0;
|
||||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
Array::Release();
|
||||
}
|
||||
}*/
|
||||
}
|
||||
|
||||
void String::SetBuffer(const void* str, int length)
|
||||
|
|
|
@ -11,8 +11,7 @@ HelloMessage::HelloMessage() : Ciphers(1), Key(0)
|
|||
Version = Sys.Version;
|
||||
|
||||
ushort code = _REV16(Sys.Code);
|
||||
ByteArray bs(&code, 2);
|
||||
Type = bs.ToHex('\0');
|
||||
Type = Buffer(&code, 2).ToHex();
|
||||
Name = Sys.Company;
|
||||
LocalTime = Time.Now().TotalMicroseconds();
|
||||
Ciphers[0] = 1;
|
||||
|
@ -28,8 +27,8 @@ HelloMessage::HelloMessage(const HelloMessage& msg) : MessageBase(msg), Ciphers(
|
|||
Name = msg.Name;
|
||||
LocalTime = msg.LocalTime;
|
||||
EndPoint = msg.EndPoint;
|
||||
Ciphers.Copy(0, msg.Ciphers, 0, -1);
|
||||
Key.Copy(0, msg.Key, 0, -1);
|
||||
Ciphers.Copy(0, msg.Ciphers, 0, msg.Ciphers.Length());
|
||||
Key.Copy(0, msg.Key, 0, msg.Key.Length());
|
||||
|
||||
Protocol = msg.Protocol;
|
||||
Port = msg.Port;
|
||||
|
@ -48,6 +47,7 @@ bool HelloMessage::Read(Stream& ms)
|
|||
Server = ms.ReadString();
|
||||
Port = ms.ReadUInt16();
|
||||
VisitToken = ms.ReadString();
|
||||
|
||||
return false;
|
||||
}
|
||||
else if(ErrCode < 0x80)
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
#include "Security\MD5.h"
|
||||
|
||||
// 初始化消息,各字段为0
|
||||
RegisterMessage::RegisterMessage() : User(0), Pass(0), Salt(0)
|
||||
RegisterMessage::RegisterMessage() : User(), Pass(), Salt(0)
|
||||
{
|
||||
}
|
||||
|
||||
|
@ -47,7 +47,7 @@ String& RegisterMessage::ToStr(String& str) const
|
|||
str = str + " User=" + User;
|
||||
str = str + " Pass=" + Pass;
|
||||
str = str + " Salt=";
|
||||
ByteArray(Salt).ToHex(str);
|
||||
Salt.ToHex(str);
|
||||
|
||||
return str;
|
||||
}
|
||||
|
|
|
@ -284,44 +284,20 @@ bool TokenClient::OnRedirect(HelloMessage& msg)
|
|||
|
||||
cfg->Show();
|
||||
|
||||
/*uint len1 = ArrayLength(cfg->Server);
|
||||
uint mslen1 = msg.Server.Length();
|
||||
if(mslen1 > len1)
|
||||
{
|
||||
debug_printf("服务器地址超长 Max=%d Server=%s \r\n", len1, msg.Server.GetBuffer());
|
||||
return false;
|
||||
}*/
|
||||
msg.Server = cfg->Server;
|
||||
//cfg->Server[mslen1]= '\0';
|
||||
|
||||
cfg->Server = msg.Server;
|
||||
cfg->ServerPort = msg.Port;
|
||||
|
||||
/*uint len2 = ArrayLength(cfg->VisitToken);
|
||||
uint mslen2 = msg.VisitToken.Length();
|
||||
if(mslen2> len2)
|
||||
{
|
||||
debug_printf("访问令牌超长 Max=%d VisitToken=%s \r\n", len2, msg.VisitToken.GetBuffer());
|
||||
return false;
|
||||
}*/
|
||||
msg.VisitToken = cfg->VisitToken;
|
||||
//cfg->VisitToken[mslen2] = '\0';
|
||||
cfg->VisitToken = msg.VisitToken;
|
||||
|
||||
cfg->Show();
|
||||
//msg.Server.CopyTo(cfg->Vendor, 0, 0);
|
||||
|
||||
// 0xFE永久改变厂商地址
|
||||
if(msg.ErrCode == 0xFE)
|
||||
{
|
||||
cfg->Save();
|
||||
//Sys.Reset();
|
||||
|
||||
//return true;
|
||||
}
|
||||
|
||||
ChangeIPEndPoint(msg.Server, msg.Port);
|
||||
Status = 0;
|
||||
//auto flg = ChangeIPEndPoint(msg.Server,msg.Port);
|
||||
//cfg->Save();
|
||||
//Sys.Reset();
|
||||
//if(!flg) Sys.Reset();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
@ -332,7 +308,7 @@ void TokenClient::Register()
|
|||
debug_printf("TokenClient::Register\r\n");
|
||||
|
||||
RegisterMessage re;
|
||||
re.User = ByteArray((const void*)Sys.ID, 16).ToHex(0, 0);
|
||||
re.User = Buffer(Sys.ID, 16).ToHex();
|
||||
re.Show(true);
|
||||
|
||||
TokenMessage msg(7);
|
||||
|
|
32
Type.cpp
32
Type.cpp
|
@ -602,6 +602,17 @@ bool operator!=(const Array& bs1, const Array& bs2)
|
|||
|
||||
/******************************** ByteArray ********************************/
|
||||
|
||||
ByteArray::ByteArray(int length) : Array(Arr, sizeof(Arr))
|
||||
{
|
||||
_Length = length;
|
||||
}
|
||||
|
||||
ByteArray::ByteArray(byte item, int length) : Array(Arr, sizeof(Arr))
|
||||
{
|
||||
_Length = length;
|
||||
Set(item, 0, length);
|
||||
}
|
||||
|
||||
ByteArray::ByteArray(const void* data, int length, bool copy) : Array(Arr, sizeof(Arr))
|
||||
{
|
||||
if(copy)
|
||||
|
@ -624,7 +635,7 @@ ByteArray::ByteArray(void* data, int length, bool copy) : Array(Arr, sizeof(Arr)
|
|||
Set(data, length);
|
||||
}
|
||||
|
||||
ByteArray::ByteArray(const Buffer& arr) : Array(Arr, arr.Length())
|
||||
/*ByteArray::ByteArray(const Buffer& arr) : Array(Arr, arr.Length())
|
||||
{
|
||||
Copy(0, arr, 0, -1);
|
||||
}
|
||||
|
@ -632,7 +643,7 @@ ByteArray::ByteArray(const Buffer& arr) : Array(Arr, arr.Length())
|
|||
ByteArray::ByteArray(const ByteArray& arr) : Array(Arr, arr.Length())
|
||||
{
|
||||
Copy(0, arr, 0, -1);
|
||||
}
|
||||
}*/
|
||||
|
||||
ByteArray::ByteArray(ByteArray&& rval) : Array((const void*)nullptr, 0)
|
||||
{
|
||||
|
@ -656,13 +667,22 @@ ByteArray::ByteArray(const String& str) : Array(Arr, str.Length())
|
|||
|
||||
void ByteArray::move(ByteArray& rval)
|
||||
{
|
||||
Array::move(rval);
|
||||
/*
|
||||
move逻辑:
|
||||
1,如果右值是内部指针,则必须拷贝数据,因为右值销毁的时候,内部数据跟着释放
|
||||
2,如果右值是外部指针,并且需要释放,则直接拿指针过来使用,由当前对象负责释放
|
||||
3,如果右值是外部指针,而不需要释放,则拷贝数据,因为那指针可能是借用外部的栈内存
|
||||
*/
|
||||
|
||||
// 如果指向自己的缓冲区,那么拷贝一下数据
|
||||
if(rval._Arr == (char*)rval.Arr && rval._Length > 0)
|
||||
if(rval._Arr != (char*)rval.Arr && rval._needFree)
|
||||
{
|
||||
Copy(0, rval._Arr, rval._Length);
|
||||
Array::move(rval);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
SetLength(rval.Length());
|
||||
Copy(0, rval._Arr, rval._Length);
|
||||
}
|
||||
|
||||
/*ByteArray& ByteArray::operator = (const Buffer& rhs)
|
||||
|
|
8
Type.h
8
Type.h
|
@ -340,13 +340,13 @@ public:
|
|||
class ByteArray : public Array
|
||||
{
|
||||
public:
|
||||
ByteArray(int length = 0) : Array(Arr, length > 0 ? length : ArrayLength(Arr)) { }
|
||||
ByteArray(byte item, int length) : Array(Arr, length) { Set(item, 0, length); }
|
||||
ByteArray(int length = 0);
|
||||
ByteArray(byte item, int length);
|
||||
// 因为使用外部指针,这里初始化时没必要分配内存造成浪费
|
||||
ByteArray(const void* data, int length, bool copy = false);
|
||||
ByteArray(void* data, int length, bool copy = false);
|
||||
ByteArray(const Buffer& arr);
|
||||
ByteArray(const ByteArray& arr);
|
||||
ByteArray(const Buffer& arr) = delete;
|
||||
ByteArray(const ByteArray& arr) = delete;
|
||||
ByteArray(ByteArray&& rval);
|
||||
//ByteArray(String& str); // 直接引用数据缓冲区
|
||||
//ByteArray(const String& str); // 不允许修改,拷贝
|
||||
|
|
Loading…
Reference in New Issue