Maipa's Standard Library Extension 1.5.6
mstd
Loading...
Searching...
No Matches
string_utils.hpp
1/*
2 * mstd - Maipa's Standard Library
3 *
4 * Licensed under the BSD 3-Clause License with Attribution Requirement.
5 * See the LICENSE file for details: https://github.com/MAIPA01/mstd/blob/main/LICENSE
6 *
7 * Copyright (c) 2025, Patryk Antosik (MAIPA01)
8 */
9
10#pragma once
11#ifndef _MSTD_STRING_UTILS_HPP_
12 #define _MSTD_STRING_UTILS_HPP_
13
14 #include <mstd/config.hpp>
15
17_MSTD_WARNING("this is only available for c++17 and greater!");
18 #else
19
20 #include <mstd/string_libs.hpp>
21
22namespace mstd::utils {
23 template<class T, class = void>
25
26 template<class T>
28 std::enable_if_t<std::is_same_v<std::remove_cv_t<T>, char> || std::is_same_v<std::remove_cv_t<T>, signed char> ||
29 std::is_same_v<std::remove_cv_t<T>, unsigned char> > > {
30 static _MSTD_CONSTEXPR17 size_t size(const T&) { return 1; }
31 };
32
33 template<class T, size_t N>
34 struct string_type_info<T[N],
35 std::enable_if_t<std::is_same_v<std::remove_cv_t<T>, char> || std::is_same_v<std::remove_cv_t<T>, signed char> ||
36 std::is_same_v<std::remove_cv_t<T>, unsigned char> > > {
37 static _MSTD_CONSTEXPR17 size_t size(const T (&)[N]) { return N - 1; }
38 };
39
40 template<class T>
42 std::enable_if_t<std::is_pointer_v<T> && (std::is_same_v<std::remove_cv_t<std::remove_pointer_t<T> >, char> ||
43 std::is_same_v<std::remove_cv_t<std::remove_pointer_t<T> >, signed char> ||
44 std::is_same_v<std::remove_cv_t<std::remove_pointer_t<T> >, unsigned char>)> > {
45 static _MSTD_CONSTEXPR17 size_t size(T s) { return s ? std::strlen(reinterpret_cast<const char*>(s)) : 0; }
46 };
47
48 template<class T>
49 struct string_type_info<T, std::enable_if_t<std::is_same_v<std::remove_cv_t<T>, std::string> > > {
50 static _MSTD_CONSTEXPR17 size_t size(const std::string& s) { return s.size(); }
51 };
52
53 template<class T>
57
58 template<class String>
59 _MSTD_CONSTEXPR17 size_t string_size(String&& s) {
62 }
63} // namespace mstd::utils
64
65 #endif
66#endif
#define _MSTD_HAS_CXX17
Definition config.hpp:45
#define _MSTD_CONSTEXPR17
Definition config.hpp:76
Definition function_traits.hpp:23
_MSTD_CONSTEXPR17 size_t string_size(String &&s)
Definition string_utils.hpp:59
Definition arithmetic_types.hpp:23
static _MSTD_CONSTEXPR17 size_t size(const std::string &s)
Definition string_utils.hpp:50
Definition string_utils.hpp:24