alstring.h 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. #ifndef AL_STRING_H
  2. #define AL_STRING_H
  3. #include <algorithm>
  4. #include <cstddef>
  5. #include <limits>
  6. #include <string>
  7. #include <string_view>
  8. namespace al {
  9. template<typename T, typename Traits>
  10. [[nodiscard]] constexpr
  11. auto sizei(const std::basic_string_view<T,Traits> str) noexcept -> int
  12. { return static_cast<int>(std::min<std::size_t>(str.size(), std::numeric_limits<int>::max())); }
  13. [[nodiscard]]
  14. constexpr bool contains(const std::string_view str0, const std::string_view str1) noexcept
  15. { return str0.find(str1) != std::string_view::npos; }
  16. [[nodiscard]]
  17. constexpr bool starts_with(const std::string_view str0, const std::string_view str1) noexcept
  18. { return str0.substr(0, std::min(str0.size(), str1.size())) == str1; }
  19. [[nodiscard]]
  20. constexpr bool ends_with(const std::string_view str0, const std::string_view str1) noexcept
  21. { return str0.substr(str0.size() - std::min(str0.size(), str1.size())) == str1; }
  22. [[nodiscard]]
  23. int case_compare(const std::string_view str0, const std::string_view str1) noexcept;
  24. [[nodiscard]]
  25. int case_compare(const std::wstring_view str0, const std::wstring_view str1) noexcept;
  26. [[nodiscard]]
  27. int strcasecmp(const char *str0, const char *str1) noexcept;
  28. [[nodiscard]]
  29. int strncasecmp(const char *str0, const char *str1, std::size_t len) noexcept;
  30. } // namespace al
  31. #endif /* AL_STRING_H */