aboutsummaryrefslogtreecommitdiff
path: root/cores/arduino/IPAddress.h
diff options
context:
space:
mode:
Diffstat (limited to 'cores/arduino/IPAddress.h')
-rw-r--r--cores/arduino/IPAddress.h16
1 files changed, 10 insertions, 6 deletions
diff --git a/cores/arduino/IPAddress.h b/cores/arduino/IPAddress.h
index 6ea8127..94acdc4 100644
--- a/cores/arduino/IPAddress.h
+++ b/cores/arduino/IPAddress.h
@@ -27,12 +27,16 @@
class IPAddress : public Printable {
private:
- uint8_t _address[4]; // IPv4 address
+ union {
+ uint8_t bytes[4]; // IPv4 address
+ uint32_t dword;
+ } _address;
+
// Access the raw byte array containing the address. Because this returns a pointer
// to the internal structure rather than a copy of the address this function should only
// be used when you know that the usage of the returned uint8_t* will be transient and not
// stored.
- uint8_t* raw_address() { return _address; };
+ uint8_t* raw_address() { return _address.bytes; };
public:
// Constructors
@@ -43,13 +47,13 @@ public:
// Overloaded cast operator to allow IPAddress objects to be used where a pointer
// to a four-byte uint8_t array is expected
- operator uint32_t() const { return *((uint32_t*)_address); };
- bool operator==(const IPAddress& addr) const { return (*((uint32_t*)_address)) == (*((uint32_t*)addr._address)); };
+ operator uint32_t() const { return _address.dword; };
+ bool operator==(const IPAddress& addr) const { return _address.dword == addr._address.dword; };
bool operator==(const uint8_t* addr) const;
// Overloaded index operator to allow getting and setting individual octets of the address
- uint8_t operator[](int index) const { return _address[index]; };
- uint8_t& operator[](int index) { return _address[index]; };
+ uint8_t operator[](int index) const { return _address.bytes[index]; };
+ uint8_t& operator[](int index) { return _address.bytes[index]; };
// Overloaded copy operators to allow initialisation of IPAddress objects from other types
IPAddress& operator=(const uint8_t *address);