1919
2020#include " IPAddress.h"
2121#include " Print.h"
22- #include < algorithm>
23- #include < cstdint>
2422
2523using namespace arduino ;
2624
@@ -58,9 +56,9 @@ IPAddress::IPAddress(const uint8_t *address) : IPAddress(IPv4, address) {}
5856IPAddress::IPAddress (IPType ip_type, const uint8_t *address) : _type(ip_type)
5957{
6058 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 ) );
6260 } else {
63- std::copy (address , address + _address. size (), _address. begin ( ));
61+ memcpy (_address , address, sizeof (_address ));
6462 }
6563}
6664
@@ -110,7 +108,7 @@ bool IPAddress::fromString4(const char *address)
110108 int16_t acc = -1 ; // Accumulator
111109 uint8_t dots = 0 ;
112110
113- _address. fill ( 0 );
111+ memset (_address, 0 , sizeof (_address) );
114112 while (*address)
115113 {
116114 char c = *address++;
@@ -228,8 +226,8 @@ IPAddress& IPAddress::operator=(const uint8_t *address)
228226 // IPv4 only conversion from byte pointer
229227 _type = IPv4;
230228
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 ) );
233231
234232 return *this ;
235233}
@@ -245,21 +243,22 @@ IPAddress& IPAddress::operator=(uint32_t address)
245243 // IPv4 conversion
246244 // See note on conversion/comparison and uint32_t
247245 _type = IPv4;
248- _address. fill ( 0 );
246+ memset (_address, 0 , sizeof (_address) );
249247 uint32_t & addressRef = reinterpret_cast <uint32_t &>(_address[IPADDRESS_V4_BYTES_INDEX]);
250248 addressRef = address;
251249 return *this ;
252250}
253251
254252bool 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 );
256255}
257256
258257bool IPAddress::operator ==(const uint8_t * addr) const
259258{
260259 // IPv4 only comparison to byte pointer
261260 // 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 ;
263262}
264263
265264uint8_t IPAddress::operator [](int index) const {
0 commit comments