We are also moving some internals into an internal header. `HasAbslStringify` was not previously in an internal namespace but was intended to be and has now been moved to an internal namespace. This is in adherence to our compatibility guidelines which wave requirements for APIs within their first 30 days of public release (See https://abseil.io/about/compatibility for details). PiperOrigin-RevId: 481190705 Change-Id: I4c0c348f269ea8d76ea3d4bd5a2c41cce475dc04pull/1298/head
parent
f073fe8ee5
commit
5631e52ed7
7 changed files with 146 additions and 82 deletions
@ -0,0 +1,68 @@ |
|||||||
|
// Copyright 2022 The Abseil Authors
|
||||||
|
//
|
||||||
|
// 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
|
||||||
|
//
|
||||||
|
// https://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.
|
||||||
|
|
||||||
|
#ifndef ABSL_STRINGS_INTERNAL_STRINGIFY_SINK_H_ |
||||||
|
#define ABSL_STRINGS_INTERNAL_STRINGIFY_SINK_H_ |
||||||
|
|
||||||
|
#include <string> |
||||||
|
#include <type_traits> |
||||||
|
#include <utility> |
||||||
|
|
||||||
|
#include "absl/strings/string_view.h" |
||||||
|
|
||||||
|
namespace absl { |
||||||
|
ABSL_NAMESPACE_BEGIN |
||||||
|
|
||||||
|
namespace strings_internal { |
||||||
|
class StringifySink { |
||||||
|
public: |
||||||
|
void Append(size_t count, char ch); |
||||||
|
|
||||||
|
void Append(string_view v); |
||||||
|
|
||||||
|
bool PutPaddedString(string_view v, int width, int precision, bool left); |
||||||
|
|
||||||
|
// Support `absl::Format(&sink, format, args...)`.
|
||||||
|
friend void AbslFormatFlush(StringifySink* sink, absl::string_view v) { |
||||||
|
sink->Append(v); |
||||||
|
} |
||||||
|
|
||||||
|
private: |
||||||
|
template <typename T> |
||||||
|
friend string_view ExtractStringification(StringifySink& sink, const T& v); |
||||||
|
|
||||||
|
std::string buffer_; |
||||||
|
}; |
||||||
|
|
||||||
|
template <typename T> |
||||||
|
string_view ExtractStringification(StringifySink& sink, const T& v) { |
||||||
|
AbslStringify(sink, v); |
||||||
|
return sink.buffer_; |
||||||
|
} |
||||||
|
|
||||||
|
template <typename T, typename = void> |
||||||
|
struct HasAbslStringify : std::false_type {}; |
||||||
|
|
||||||
|
template <typename T> |
||||||
|
struct HasAbslStringify<T, std::enable_if_t<std::is_void<decltype(AbslStringify( |
||||||
|
std::declval<strings_internal::StringifySink&>(), |
||||||
|
std::declval<const T&>()))>::value>> |
||||||
|
: std::true_type {}; |
||||||
|
|
||||||
|
} // namespace strings_internal
|
||||||
|
|
||||||
|
ABSL_NAMESPACE_END |
||||||
|
} // namespace absl
|
||||||
|
|
||||||
|
#endif // ABSL_STRINGS_INTERNAL_STRINGIFY_SINK_H_
|
Loading…
Reference in new issue