From 6fc66ca783aae000d0a5a4d8221ff5aa6f01bc98 Mon Sep 17 00:00:00 2001 From: Marc Celani Date: Fri, 25 Jul 2014 15:59:12 -0700 Subject: [PATCH 1/1] IPAddress::empty() Summary: Checks if IPAddress has not been initialized. Test Plan: unit test Reviewed By: tudorb@fb.com Subscribers: tudorb FB internal diff: D1459525 --- folly/IPAddress.h | 6 ++++++ folly/test/IPAddressTest.cpp | 6 ++++++ 2 files changed, 12 insertions(+) diff --git a/folly/IPAddress.h b/folly/IPAddress.h index 46c09657..e147c10d 100644 --- a/folly/IPAddress.h +++ b/folly/IPAddress.h @@ -251,6 +251,12 @@ class IPAddress : boost::totally_ordered { return isV6() && asV6().isIPv4Mapped(); } + // @return true if address is uninitialized + bool empty() const { return (family_ == AF_UNSPEC); } + + // @return true if address is initialized + explicit operator bool() { return !empty(); } + // @return true if this is an IPAddressV4 instance bool isV4() const { return (family_ == AF_INET); } diff --git a/folly/test/IPAddressTest.cpp b/folly/test/IPAddressTest.cpp index d72a2b90..952cf4aa 100644 --- a/folly/test/IPAddressTest.cpp +++ b/folly/test/IPAddressTest.cpp @@ -31,14 +31,20 @@ TEST(IPAddress, CodeExample) { EXPECT_EQ(4, sizeof(IPAddressV4)); EXPECT_EQ(16, sizeof(IPAddressV6)); EXPECT_EQ(20, sizeof(IPAddress)); + IPAddress uninitaddr; IPAddress v4addr("192.0.2.129"); IPAddress v6map("::ffff:192.0.2.129"); + ASSERT_TRUE(uninitaddr.empty()); + ASSERT_FALSE(v4addr.empty()); + ASSERT_FALSE(v6map.empty()); EXPECT_TRUE(v4addr.inSubnet("192.0.2.0/24")); EXPECT_TRUE(v4addr.inSubnet(IPAddress("192.0.2.0"), 24)); EXPECT_TRUE(v4addr.inSubnet("192.0.2.128/30")); EXPECT_FALSE(v4addr.inSubnet("192.0.2.128/32")); EXPECT_EQ(2164392128, v4addr.asV4().toLong()); EXPECT_EQ(3221226113, v4addr.asV4().toLongHBO()); + ASSERT_FALSE(uninitaddr.isV4()); + ASSERT_FALSE(uninitaddr.isV6()); ASSERT_TRUE(v4addr.isV4()); ASSERT_TRUE(v6map.isV6()); EXPECT_TRUE(v4addr == v6map); -- 2.34.1