// Copyright 2020 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef BASE_STRINGS_STRING_SPLIT_WIN_H_
#define BASE_STRINGS_STRING_SPLIT_WIN_H_

#include <string>
#include <string_view>
#include <vector>

#include "base/base_export.h"
#include "base/compiler_specific.h"
#include "base/strings/string_split.h"

namespace base {

namespace internal {

template <>
inline constexpr std::wstring_view WhitespaceForType<wchar_t>() {
  return kWhitespaceWide;
}

}  // namespace internal

// The following section contains overloads of the cross-platform APIs for
// std::wstring and std::wstring_view.
[[nodiscard]] BASE_EXPORT constexpr std::vector<std::wstring> SplitString(
    std::wstring_view input,
    std::wstring_view separators,
    WhitespaceHandling whitespace,
    SplitResult result_type) {
  return internal::SplitStringT<std::wstring>(input, separators, whitespace,
                                              result_type);
}

[[nodiscard]] BASE_EXPORT constexpr std::vector<std::wstring_view>
SplitStringPiece(std::wstring_view input LIFETIME_BOUND,
                 std::wstring_view separators,
                 WhitespaceHandling whitespace,
                 SplitResult result_type) {
  return internal::SplitStringT<std::wstring_view>(input, separators,
                                                   whitespace, result_type);
}

[[nodiscard]] BASE_EXPORT constexpr std::vector<std::wstring>
SplitStringUsingSubstr(std::wstring_view input,
                       std::wstring_view delimiter,
                       WhitespaceHandling whitespace,
                       SplitResult result_type) {
  return internal::SplitStringUsingSubstrT<std::wstring>(
      input, delimiter, whitespace, result_type);
}

[[nodiscard]] BASE_EXPORT constexpr std::vector<std::wstring_view>
SplitStringPieceUsingSubstr(std::wstring_view input LIFETIME_BOUND,
                            std::wstring_view delimiter,
                            WhitespaceHandling whitespace,
                            SplitResult result_type) {
  return internal::SplitStringUsingSubstrT<std::wstring_view>(
      input, delimiter, whitespace, result_type);
}

}  // namespace base

#endif  // BASE_STRINGS_STRING_SPLIT_WIN_H_
