IPAddress::empty()
authorMarc Celani <marccelani@fb.com>
Fri, 25 Jul 2014 22:59:12 +0000 (15:59 -0700)
committerSara Golemon <sgolemon@fb.com>
Thu, 14 Aug 2014 18:49:03 +0000 (11:49 -0700)
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
folly/test/IPAddressTest.cpp

index 46c096578dee6ae2b2ac47c09daa88d36b019a92..e147c10d7bc599970e9401f70ee975f90edfea38 100644 (file)
@@ -251,6 +251,12 @@ class IPAddress : boost::totally_ordered<IPAddress> {
     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); }
 
index d72a2b90e020ca3f117b3ac4ce0bb32e594c9f9b..952cf4aac902958cd2e688d7ac448e067a03bbb3 100644 (file)
@@ -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);