From 7677558876497146831ebb79bef8cf53f41bbe25 Mon Sep 17 00:00:00 2001 From: Christopher Dykes Date: Mon, 19 Jun 2017 17:24:45 -0700 Subject: [PATCH] Merge StringBase.cpp and String.cpp Summary: The only reason these were split was because of the use of `folly::format` Reviewed By: yfeldblum Differential Revision: D5278412 fbshipit-source-id: 07639e155421f31a6cc7ed16cba2034750e44325 --- folly/Makefile.am | 1 - folly/String.cpp | 53 +++++++++++++++++++++++++++++++++++++--- folly/StringBase.cpp | 57 -------------------------------------------- 3 files changed, 50 insertions(+), 61 deletions(-) delete mode 100644 folly/StringBase.cpp diff --git a/folly/Makefile.am b/folly/Makefile.am index 37d47db4..5742665c 100644 --- a/folly/Makefile.am +++ b/folly/Makefile.am @@ -451,7 +451,6 @@ libfollybase_la_SOURCES = \ FormatTables.cpp \ MallctlHelper.cpp \ portability/BitsFunctexcept.cpp \ - StringBase.cpp \ String.cpp \ Unicode.cpp diff --git a/folly/String.cpp b/folly/String.cpp index e8de48da..af86c668 100644 --- a/folly/String.cpp +++ b/folly/String.cpp @@ -16,7 +16,6 @@ #include -#include #include #include @@ -30,6 +29,42 @@ namespace folly { +static inline bool is_oddspace(char c) { + return c == '\n' || c == '\t' || c == '\r'; +} + +StringPiece ltrimWhitespace(StringPiece sp) { + // Spaces other than ' ' characters are less common but should be + // checked. This configuration where we loop on the ' ' + // separately from oddspaces was empirically fastest. + +loop: + for (; !sp.empty() && sp.front() == ' '; sp.pop_front()) { + } + if (!sp.empty() && is_oddspace(sp.front())) { + sp.pop_front(); + goto loop; + } + + return sp; +} + +StringPiece rtrimWhitespace(StringPiece sp) { + // Spaces other than ' ' characters are less common but should be + // checked. This configuration where we loop on the ' ' + // separately from oddspaces was empirically fastest. + +loop: + for (; !sp.empty() && sp.back() == ' '; sp.pop_back()) { + } + if (!sp.empty() && is_oddspace(sp.back())) { + sp.pop_back(); + goto loop; + } + + return sp; +} + namespace { int stringAppendfImplHelper(char* buf, @@ -507,6 +542,7 @@ namespace detail { size_t hexDumpLine(const void* ptr, size_t offset, size_t size, std::string& line) { + static char hexValues[] = "0123456789abcdef"; // Line layout: // 8: address // 1: space @@ -520,13 +556,24 @@ size_t hexDumpLine(const void* ptr, size_t offset, size_t size, line.reserve(78); const uint8_t* p = reinterpret_cast(ptr) + offset; size_t n = std::min(size - offset, size_t(16)); - format("{:08x} ", offset).appendTo(line); + line.push_back(hexValues[(offset >> 28) & 0xf]); + line.push_back(hexValues[(offset >> 24) & 0xf]); + line.push_back(hexValues[(offset >> 20) & 0xf]); + line.push_back(hexValues[(offset >> 16) & 0xf]); + line.push_back(hexValues[(offset >> 12) & 0xf]); + line.push_back(hexValues[(offset >> 8) & 0xf]); + line.push_back(hexValues[(offset >> 4) & 0xf]); + line.push_back(hexValues[offset & 0xf]); + line.push_back(' '); for (size_t i = 0; i < n; i++) { if (i == 8) { line.push_back(' '); } - format(" {:02x}", p[i]).appendTo(line); + + line.push_back(' '); + line.push_back(hexValues[(p[i] >> 4) & 0xf]); + line.push_back(hexValues[p[i] & 0xf]); } // 3 spaces for each byte we're not printing, one separating the halves diff --git a/folly/StringBase.cpp b/folly/StringBase.cpp deleted file mode 100644 index da98e2ed..00000000 --- a/folly/StringBase.cpp +++ /dev/null @@ -1,57 +0,0 @@ -/* - * Copyright 2017 Facebook, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include - -namespace folly { - -static inline bool is_oddspace(char c) { - return c == '\n' || c == '\t' || c == '\r'; -} - -StringPiece ltrimWhitespace(StringPiece sp) { - // Spaces other than ' ' characters are less common but should be - // checked. This configuration where we loop on the ' ' - // separately from oddspaces was empirically fastest. - -loop: - for (; !sp.empty() && sp.front() == ' '; sp.pop_front()) { - } - if (!sp.empty() && is_oddspace(sp.front())) { - sp.pop_front(); - goto loop; - } - - return sp; -} - -StringPiece rtrimWhitespace(StringPiece sp) { - // Spaces other than ' ' characters are less common but should be - // checked. This configuration where we loop on the ' ' - // separately from oddspaces was empirically fastest. - -loop: - for (; !sp.empty() && sp.back() == ' '; sp.pop_back()) { - } - if (!sp.empty() && is_oddspace(sp.back())) { - sp.pop_back(); - goto loop; - } - - return sp; -} - -} -- 2.34.1