From: Yedidya Feldblum Date: Fri, 24 Apr 2015 00:02:55 +0000 (-0700) Subject: IPAddressV6::kToFullyQualifiedSize. X-Git-Tag: v0.36.0~7 X-Git-Url: http://plrg.eecs.uci.edu/git/?a=commitdiff_plain;h=8ab68e82e4abdcdc458548b57f9bb0af4a89b7f1;p=folly.git IPAddressV6::kToFullyQualifiedSize. 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 --- diff --git a/folly/IPAddressV6.h b/folly/IPAddressV6.h index ed64a75d..d4876af6 100644 --- a/folly/IPAddressV6.h +++ b/folly/IPAddressV6.h @@ -82,6 +82,10 @@ class IPAddressV6 : boost::totally_ordered { // 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. diff --git a/folly/test/IPAddressTest.cpp b/folly/test/IPAddressTest.cpp index 9f39b5a8..2e62f5d1 100644 --- a/folly/test/IPAddressTest.cpp +++ b/folly/test/IPAddressTest.cpp @@ -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) {