From 8ab68e82e4abdcdc458548b57f9bb0af4a89b7f1 Mon Sep 17 00:00:00 2001 From: Yedidya Feldblum Date: Thu, 23 Apr 2015 17:02:55 -0700 Subject: [PATCH] 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 --- folly/IPAddressV6.h | 4 ++++ folly/test/IPAddressTest.cpp | 5 +++++ 2 files changed, 9 insertions(+) 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) { -- 2.34.1