Bug #88 (Ipv4Address operator ==, !=, < should be inline for performance reasons)
--- a/src/node/ipv4-address.cc Thu Oct 11 17:59:59 2007 +0200
+++ b/src/node/ipv4-address.cc Thu Oct 11 15:39:39 2007 +0100
@@ -151,16 +151,6 @@
m_address = AsciiToIpv4Host (address);
}
-bool
-Ipv4Address::IsEqual (Ipv4Address other) const
-{
- if (other.m_address == m_address) {
- return true;
- } else {
- return false;
- }
-}
-
Ipv4Address
Ipv4Address::CombineMask (Ipv4Mask const &mask) const
{
@@ -296,19 +286,6 @@
return loopback;
}
-bool operator == (Ipv4Address const &a, Ipv4Address const &b)
-{
- return a.IsEqual (b);
-}
-bool operator != (Ipv4Address const &a, Ipv4Address const &b)
-{
- return !a.IsEqual (b);
-}
-bool operator < (Ipv4Address const &addrA, Ipv4Address const &addrB)
-{
- return (addrA.GetHostOrder () < addrB.GetHostOrder ());
-}
-
size_t Ipv4AddressHash::operator()(Ipv4Address const &x) const
{
return x.GetHostOrder ();
--- a/src/node/ipv4-address.h Thu Oct 11 17:59:59 2007 +0200
+++ b/src/node/ipv4-address.h Thu Oct 11 15:39:39 2007 +0100
@@ -73,7 +73,10 @@
* \param other address to which to compare this address
* \return True if the addresses are equal. False otherwise.
*/
- bool IsEqual (Ipv4Address other) const;
+ bool IsEqual (const Ipv4Address &other) const
+ {
+ return m_address == other.m_address;
+ }
/**
* \brief Get the host-order 32-bit IP address
@@ -142,6 +145,10 @@
Address ConvertTo (void) const;
static uint8_t GetType (void);
uint32_t m_address;
+
+ friend bool operator == (Ipv4Address const &a, Ipv4Address const &b);
+ friend bool operator != (Ipv4Address const &a, Ipv4Address const &b);
+ friend bool operator < (Ipv4Address const &addrA, Ipv4Address const &addrB);
};
@@ -177,9 +184,19 @@
std::ostream& operator<< (std::ostream& os, Ipv4Address const& address);
std::ostream& operator<< (std::ostream& os, Ipv4Mask const& mask);
-bool operator == (Ipv4Address const &a, Ipv4Address const &b);
-bool operator != (Ipv4Address const &a, Ipv4Address const &b);
-bool operator < (Ipv4Address const &addrA, Ipv4Address const &addrB);
+inline bool operator == (const Ipv4Address &a, const Ipv4Address &b)
+{
+ return (a.m_address == b.m_address);
+}
+inline bool operator != (const Ipv4Address &a, const Ipv4Address &b)
+{
+ return (a.m_address != b.m_address);
+}
+inline bool operator < (const Ipv4Address &a, const Ipv4Address &b)
+{
+ return (a.m_address < b.m_address);
+}
+
class Ipv4AddressHash : public std::unary_function<Ipv4Address, size_t> {
public: