From: Marc Celani Date: Fri, 25 Jul 2014 22:59:12 +0000 (-0700) Subject: IPAddress::empty() X-Git-Tag: v0.22.0~428 X-Git-Url: http://plrg.eecs.uci.edu/git/?a=commitdiff_plain;h=6fc66ca783aae000d0a5a4d8221ff5aa6f01bc98;p=folly.git 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 --- 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);