19
19
20
20
#include " IPAddress.h"
21
21
#include " Print.h"
22
- #include < algorithm>
23
- #include < cstdint>
24
22
25
23
using namespace arduino ;
26
24
@@ -58,9 +56,9 @@ IPAddress::IPAddress(const uint8_t *address) : IPAddress(IPv4, address) {}
58
56
IPAddress::IPAddress (IPType ip_type, const uint8_t *address) : _type(ip_type)
59
57
{
60
58
if (ip_type == IPv4) {
61
- std::copy (address, address + 4 , &_address[IPADDRESS_V4_BYTES_INDEX]);
59
+ memcpy ( &_address[IPADDRESS_V4_BYTES_INDEX], address, sizeof ( uint32_t ) );
62
60
} else {
63
- std::copy (address , address + _address. size (), _address. begin ( ));
61
+ memcpy (_address , address, sizeof (_address ));
64
62
}
65
63
}
66
64
@@ -110,7 +108,7 @@ bool IPAddress::fromString4(const char *address)
110
108
int16_t acc = -1 ; // Accumulator
111
109
uint8_t dots = 0 ;
112
110
113
- _address. fill ( 0 );
111
+ memset (_address, 0 , sizeof (_address) );
114
112
while (*address)
115
113
{
116
114
char c = *address++;
@@ -228,8 +226,8 @@ IPAddress& IPAddress::operator=(const uint8_t *address)
228
226
// IPv4 only conversion from byte pointer
229
227
_type = IPv4;
230
228
231
- _address. fill ( 0 );
232
- std::copy (address, address + 4 , &_address[IPADDRESS_V4_BYTES_INDEX]);
229
+ memset (_address, 0 , sizeof (_address) );
230
+ memcpy ( &_address[IPADDRESS_V4_BYTES_INDEX], address, sizeof ( uint32_t ) );
233
231
234
232
return *this ;
235
233
}
@@ -245,21 +243,22 @@ IPAddress& IPAddress::operator=(uint32_t address)
245
243
// IPv4 conversion
246
244
// See note on conversion/comparison and uint32_t
247
245
_type = IPv4;
248
- _address. fill ( 0 );
246
+ memset (_address, 0 , sizeof (_address) );
249
247
uint32_t & addressRef = reinterpret_cast <uint32_t &>(_address[IPADDRESS_V4_BYTES_INDEX]);
250
248
addressRef = address;
251
249
return *this ;
252
250
}
253
251
254
252
bool IPAddress::operator ==(const IPAddress& addr) const {
255
- return addr._type == _type && std::equal (addr._address .begin (), addr._address .end (), _address.begin ());
253
+ return (addr._type == _type)
254
+ && (memcmp (addr._address , _address, sizeof (_address)) == 0 );
256
255
}
257
256
258
257
bool IPAddress::operator ==(const uint8_t * addr) const
259
258
{
260
259
// IPv4 only comparison to byte pointer
261
260
// Can't support IPv6 as we know our type, but not the length of the pointer
262
- return _type == IPv4 && std::equal (_address. begin () + IPADDRESS_V4_BYTES_INDEX, _address. end (), addr) ;
261
+ return _type == IPv4 && memcmp (addr, &_address[ IPADDRESS_V4_BYTES_INDEX], sizeof ( uint32_t )) == 0 ;
263
262
}
264
263
265
264
uint8_t IPAddress::operator [](int index) const {
0 commit comments