35 #ifndef ABSL_STRINGS_STR_SPLIT_H_
36 #define ABSL_STRINGS_STR_SPLIT_H_
46 #include "absl/base/internal/raw_logging.h"
47 #include "absl/base/macros.h"
48 #include "absl/strings/internal/str_split_internal.h"
49 #include "absl/strings/string_view.h"
50 #include "absl/strings/strip.h"
222 namespace strings_internal {
231 template <
typename Delimiter>
232 struct SelectDelimiter {
258 template <
typename Delimiter>
291 template <
typename Delimiter>
292 inline strings_internal::MaxSplitsImpl<
294 MaxSplits(Delimiter delimiter,
int limit) {
297 return strings_internal::MaxSplitsImpl<DelimiterType>(
298 DelimiterType(delimiter), limit);
365 struct SkipWhitespace {
372 template <
typename T>
496 template <
typename Delimiter>
497 strings_internal::Splitter<
500 StrSplit(strings_internal::ConvertibleToStringView
text, Delimiter d) {
501 using DelimiterType =
503 return strings_internal::Splitter<DelimiterType, AllowEmpty,
505 text.value(), DelimiterType(d), AllowEmpty());
508 template <
typename Delimiter,
typename StringType,
509 EnableSplitIfString<StringType> = 0>
510 strings_internal::Splitter<
514 using DelimiterType =
516 return strings_internal::Splitter<DelimiterType, AllowEmpty, std::string>(
520 template <
typename Delimiter,
typename Predicate>
521 strings_internal::Splitter<
524 StrSplit(strings_internal::ConvertibleToStringView
text, Delimiter d,
526 using DelimiterType =
528 return strings_internal::Splitter<DelimiterType, Predicate,
533 template <
typename Delimiter,
typename Predicate,
typename StringType,
534 EnableSplitIfString<StringType> = 0>
535 strings_internal::Splitter<
539 using DelimiterType =
541 return strings_internal::Splitter<DelimiterType, Predicate, std::string>(
548 #endif // ABSL_STRINGS_STR_SPLIT_H_