IPAddressV6::kToFullyQualifiedSize.
authorYedidya Feldblum <yfeldblum@fb.com>
Fri, 24 Apr 2015 00:02:55 +0000 (17:02 -0700)
committerAlecs King <int@fb.com>
Mon, 27 Apr 2015 23:53:32 +0000 (16:53 -0700)
Summary:
[Folly] IPAddressV6::kToFullyQualifiedSize.

The scenario: One has a string known to be a fully-qualified IPv4 or fully-qualified IPv6 address, but one does not know which of the two it is.

The dirty but fast solution: just check its size.

Test Plan: Build. Unit tests.

Reviewed By: mshneer@fb.com

Subscribers: folly-diffs@, dougw, yfeldblum, chalfant, brettp

FB internal diff: D2016634

Signature: t1:2016634:1429831808:08ecb28eab3060988f9613748ed8dabf3724bf13

folly/IPAddressV6.h
folly/test/IPAddressTest.cpp

index ed64a75d05e3e31dff1e3ad55a28f12fa03b8210..d4876af6c6fb70c37c942d35dec31b5ac5a4315b 100644 (file)
@@ -82,6 +82,10 @@ class IPAddressV6 : boost::totally_ordered<IPAddressV6> {
   // Binary prefix for 6to4 networks
   static const uint32_t PREFIX_6TO4;
 
+  // Size of std::string returned by toFullyQualified.
+  static constexpr size_t kToFullyQualifiedSize =
+    8 /*words*/ * 4 /*hex chars per word*/ + 7 /*separators*/;
+
   /**
    * Create a new IPAddress instance from the provided binary data.
    * @throws IPAddressFormatException if the input length is not 16 bytes.
index 9f39b5a871da3a4be44635da45702b17363fb930..2e62f5d173c9df416e75f96ff671fbf4bc240d53 100644 (file)
@@ -409,6 +409,11 @@ TEST(IPAddress, ToFullyQualifiedLocal) {
   EXPECT_EQ("0000:0000:0000:0000:0000:0000:0000:0001", ip.toFullyQualified())
       << ip;
 }
+TEST(IPAddress, ToFullyQualifiedSize) {
+  auto actual = IPAddressV6::kToFullyQualifiedSize;
+  auto expected = IPAddress("::").toFullyQualified().size();
+  EXPECT_EQ(expected, actual);
+}
 
 // test v4-v6 mapped addresses
 TEST_P(IPAddressMappedTest, MappedEqual) {