废弃ByteArray的拷贝构造函数,以免引起误解

This commit is contained in:
nnhy 2016-03-11 16:54:44 +00:00
parent 03cc00c88a
commit 1b26bdb65e
13 changed files with 52 additions and 80 deletions

View File

@ -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);

View File

@ -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());
}
}

View File

@ -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());
}
}
}

View File

@ -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;

View File

@ -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)
{

View File

@ -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)

View File

@ -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);

View File

@ -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)

View File

@ -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)

View File

@ -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;
}

View File

@ -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);

View File

@ -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
View File

@ -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); // 不允许修改,拷贝