24 #if (__has_include(<string_view>) && \
25 (__cplusplus > 201402L || defined(_LIBCPP_VERSION))) || \
26 (defined(_MSVC_LANG) && _MSVC_LANG > 201402L && _MSC_VER >= 1910)
27 # include <string_view>
28 # define OIIO_STD_STRING_VIEW_AVAILABLE
29 #elif __has_include("experimental/string_view")
30 # include <experimental/string_view>
31 # define OIIO_EXPERIMENTAL_STRING_VIEW_AVAILABLE
77 template<
class CharT,
class Traits = std::
char_traits<CharT>>
93 using traits = std::char_traits<CharT>;
102 : m_chars(copy.
data()), m_len(copy.
size()) { }
106 : m_chars(chars), m_len(len) { }
110 : m_chars(chars), m_len(chars ? cestrlen(chars) : 0) { }
116 : m_chars(
str.data()), m_len(
str.size()) { }
119 #if defined(OIIO_STD_STRING_VIEW_AVAILABLE) || defined(OIIO_DOXYGEN)
121 constexpr
basic_string_view(
const std::basic_string_view<CharT, Traits>& sv) noexcept
122 : m_chars(sv.data()), m_len(sv.size()) { }
125 #ifdef OIIO_EXPERIMENTAL_STRING_VIEW_AVAILABLE
127 constexpr
basic_string_view(
const std::experimental::basic_string_view<CharT, Traits>& sv) noexcept
128 : m_chars(sv.data()), m_len(sv.size()) { }
135 OIIO_CONSTEXPR20
string str()
const
160 const CharT*
c_str()
const;
170 #if defined(OIIO_STD_STRING_VIEW_AVAILABLE) || defined(OIIO_DOXYGEN)
172 constexpr
operator std::basic_string_view<CharT, Traits>()
const
178 #ifdef OIIO_EXPERIMENTAL_STRING_VIEW_AVAILABLE
180 constexpr
operator std::experimental::basic_string_view<CharT, Traits>()
const noexcept
194 constexpr
iterator end() const noexcept {
return m_chars + m_len; }
209 constexpr
bool empty() const noexcept {
return m_len == 0; }
218 throw(std::out_of_range(
"OpenImageIO::string_view::at"));
253 return cmp != 0 ? cmp :
int(m_len) -
int(
x.m_len);
294 return i == e ?
npos : (reverse_distance(this->
crbegin(),i) - s.
size() + 1);
305 return i == e ?
npos : reverse_distance (this->
crbegin(),i);
323 size_t off =
size()-pos;
340 if (! traits::eq (c, *i))
348 size_t off =
size()-pos;
356 size_t off =
size()-pos;
358 if (! traits::eq (c, *i))
359 return reverse_distance (this->
crbegin(), i);
363 friend OIIO_CONSTEXPR17
bool
366 return x.size() ==
y.size() ? (
x.compare(
y) == 0) :
false;
369 friend OIIO_CONSTEXPR17
bool
372 return x.size() ==
y.size() ? (
x.compare(
y) != 0) :
true;
375 friend OIIO_CONSTEXPR17
bool
378 return x.compare(
y) < 0;
381 friend OIIO_CONSTEXPR17
bool
384 return x.compare(
y) > 0;
387 friend OIIO_CONSTEXPR17
bool
390 return x.compare(
y) <= 0;
393 friend OIIO_CONSTEXPR17
bool
396 return x.compare(
y) >= 0;
399 friend std::basic_ostream<CharT, Traits>&
400 operator<<(std::basic_ostream<CharT, Traits>& out,
404 out.write(
str.data(),
str.size());
409 const CharT* m_chars =
nullptr;
418 template<
typename r_iter>
424 template<
typename iter>
434 static constexpr
size_t cestrlen(
const charT* chars) {
435 #if OIIO_CPLUSPLUS_VERSION >= 17
438 if (chars ==
nullptr)
441 while (chars[len] != 0)
449 constexpr traits_eq (CharT ch) noexcept : ch(ch) {}
450 constexpr
bool operator () (CharT
val)
const noexcept {
return traits::eq (ch,
val); }
493 template<> inline const
char*
502 #if FMT_VERSION >= 100000
518 #if OIIO_CPLUSPLUS_VERSION < 17
519 template<
class CharT,
class Traits = std::
char_traits<CharT>>
520 constexpr
size_t size(
const OIIO::basic_string_view<CharT, Traits>&
c) {
525 #if OIIO_CPLUSPLUS_VERSION < 20
526 template<
class CharT,
class Traits = std::
char_traits<CharT>>
527 constexpr ptrdiff_t
ssize(
const OIIO::basic_string_view<CharT, Traits>&
c) {
528 return static_cast<ptrdiff_t
>(c.size());
534 #define OIIO_STRING_VIEW_HAS_STD_SIZE 1
typedef int(APIENTRYP RE_PFNGLXSWAPINTERVALSGIPROC)(int)
constexpr iterator begin() const noexcept
constexpr basic_string_view(const basic_string_view ©)
Copy ctr.
const_reverse_iterator reverse_iterator
std::char_traits< CharT > traits
constexpr size_t size(const OIIO::span< T, E > &c)
OIIO_CONSTEXPR17 const_reverse_iterator crend() const noexcept
size_type find_first_not_of(basic_string_view s, size_t pos=0) const noexcept
OIIO_CONSTEXPR14 void clear() noexcept
OIIO_CONSTEXPR14 basic_string_view substr(size_type pos, size_type n=npos) const noexcept
OIIO_UTIL_API bool copy(string_view from, string_view to, std::string &err)
constexpr const_iterator cend() const noexcept
CompareResults OIIO_API compare(const ImageBuf &A, const ImageBuf &B, float failthresh, float warnthresh, float failrelative, float warnrelative, ROI roi={}, int nthreads=0)
constexpr basic_string_view(const CharT *chars, size_t len) noexcept
Construct from char* and length.
constexpr const_pointer data() const noexcept
GLuint GLsizei GLsizei * length
bool OIIO_UTIL_API ends_with(string_view a, string_view b)
Does 'a' end with the string 'b', with a case-sensitive comparison?
ImageBuf OIIO_API min(Image_or_Const A, Image_or_Const B, ROI roi={}, int nthreads=0)
ptrdiff_t difference_type
FMT_CONSTEXPR auto find(Ptr first, Ptr last, T value, Ptr &out) -> bool
constexpr size_type max_size() const noexcept
OIIO_CONSTEXPR17 int compare(basic_string_view x) const noexcept
const CharT & const_reference
#define FMT_END_NAMESPACE
OIIO_CONSTEXPR14 void remove_suffix(size_type n) noexcept
IMATH_HOSTDEVICE constexpr int cmp(T a, T b) IMATH_NOEXCEPT
size_type find_first_of(CharT c, size_t pos=0) const noexcept
constexpr auto end() const noexcept-> iterator
size_type find_first_of(basic_string_view s, size_t pos=0) const noexcept
constexpr const_reference back() const
friend OIIO_CONSTEXPR17 bool operator>(basic_string_view x, basic_string_view y) noexcept
constexpr basic_string_view(const CharT *chars) noexcept
Construct from char*, use strlen to determine length.
size_type find(CharT c, size_t pos=0) const noexcept
static const size_type npos
constexpr basic_string_view() noexcept
Default ctr.
constexpr const_reference front() const
OIIO_CONSTEXPR14 basic_string_view & operator=(const basic_string_view ©) noexcept=default
constexpr const_iterator cbegin() const noexcept
GLint GLint GLsizei GLint GLenum format
constexpr size_type size() const noexcept
size_type find_last_of(basic_string_view s, size_t pos=npos) const noexcept
size_type find_first_not_of(CharT c, size_t pos=0) const noexcept
const CharT * c_str() const
size_type find_last_not_of(basic_string_view s, size_t pos=npos) const noexcept
GLboolean GLboolean GLboolean b
OIIO_CONSTEXPR17 reverse_iterator rbegin() const noexcept
OIIO_CONSTEXPR17 const_reference at(size_t pos) const
Element access with bounds checking and exception if out of bounds.
std::reverse_iterator< const_iterator > const_reverse_iterator
auto search(const T &set, const V &val) -> std::pair< bool, decltype(std::begin(detail::smart_deref(set)))>
A search function.
friend OIIO_CONSTEXPR17 bool operator==(basic_string_view x, basic_string_view y) noexcept
constexpr auto size() const noexcept-> size_t
basic_string_view(const string &str) noexcept
__hostdev__ uint64_t last(uint32_t i) const
OIIO_CONSTEXPR17 reverse_iterator rend() const noexcept
OIIO_CONSTEXPR17 const_reverse_iterator crbegin() const noexcept
OIIO_CONSTEXPR20 string str() const
friend OIIO_CONSTEXPR17 bool operator>=(basic_string_view x, basic_string_view y) noexcept
size_type find_last_of(CharT c, size_t pos=npos) const noexcept
size_type rfind(CharT c, size_t pos=npos) const noexcept
FMT_CONSTEXPR_CHAR_TRAITS bool starts_with(basic_string_view< Char > sv) const noexcept
constexpr const_reference operator[](size_type pos) const
const_pointer const_iterator
ImageBuf OIIO_API max(Image_or_Const A, Image_or_Const B, ROI roi={}, int nthreads=0)
basic_string_view< char > string_view
constexpr auto data() const noexcept-> const Char *
constexpr iterator end() const noexcept
OIIO_UTIL_API const char * c_str(string_view str)
friend auto operator<=(basic_string_view lhs, basic_string_view rhs) -> bool
OIIO_CONSTEXPR14 void remove_prefix(size_type n) noexcept
const CharT * const_pointer
constexpr auto begin() const noexcept-> iterator
#define FMT_BEGIN_NAMESPACE
constexpr ptrdiff_t ssize(const OIIO::span< T, E > &c)
#define OIIO_NAMESPACE_END
SIM_API const UT_StringHolder distance
constexpr bool empty() const noexcept
Is the basic_string_view empty, containing no characters?
size_type find_last_not_of(CharT c, size_t pos=npos) const noexcept
size_type find(basic_string_view s, size_t pos=0) const noexcept
friend OIIO_CONSTEXPR17 bool operator!=(basic_string_view x, basic_string_view y) noexcept
size_type rfind(basic_string_view s, size_t pos=npos) const noexcept
constexpr size_type length() const noexcept
friend auto operator<(basic_string_view lhs, basic_string_view rhs) -> bool
#define OIIO_NAMESPACE_BEGIN