7 #ifndef PXR_BASE_TF_STRING_UTILS_H
8 #define PXR_BASE_TF_STRING_UTILS_H
29 #include <type_traits>
59 ARCH_PRINTF_FUNCTION(1, 2)
80 ARCH_PRINTF_FUNCTION(1, 0)
88 return ptr ? std::string(ptr) : std::string();
135 long TfStringToLong(
const std::string &txt,
bool *outOfRange=NULL);
153 unsigned long TfStringToULong(
const std::string &txt,
bool *outOfRange=NULL);
172 int64_t
TfStringToInt64(
const std::string &txt,
bool *outOfRange=NULL);
197 char const *prefix,
size_t prelen)
199 return slen >= prelen && strncmp(s, prefix, prelen) == 0;
207 s.c_str(), s.length(), prefix, strlen(prefix));
218 char const *suffix,
size_t suflen)
220 return slen >= suflen && strcmp(s + (slen - suflen), suffix) == 0;
227 suffix, strlen(suffix));
285 const char* trimChars =
" \n\t\r");
293 const char* trimChars =
" \n\t\r");
302 const char* trimChars =
" \n\t\r");
350 const std::string& to);
357 template <
class ForwardIterator>
359 ForwardIterator
begin, ForwardIterator
end,
360 const char* separator =
" ")
363 return std::string();
372 ForwardIterator i =
begin;
373 for (i = begin; i !=
end; ++i)
375 retVal.reserve(sum + strlen(separator) * (distance - 1));
380 retVal.append(separator);
393 const char* separator =
" ");
401 const char* separator =
" ");
410 std::string
const &separator);
423 const char* delimiters =
" \t\n");
430 const char* delimiters =
" \t\n");
442 std::vector<std::string>
444 const char* delimiters =
" \t\n",
445 std::string *errors = NULL);
458 std::vector<std::string>
462 char escapeCharacter =
'\0',
463 std::string *errors = NULL);
472 std::vector<std::string>
479 closeDelimiter,
'\0', errors);
526 const std::string &rhs)
const {
531 const unsigned char l = lhs.c_str()[0],
r = rhs.c_str()[0];
532 const bool bothAscii = l < 0x80 &&
r < 0x80;
533 const bool differsIgnoringCase = (l & ~0x20) != (r & ~0x20);
534 const bool inLetterZone = (l >= 0x40) && (r >= 0x40);
535 if (
ARCH_LIKELY(bothAscii && differsIgnoringCase && inLetterZone)) {
538 return ((l + 5) & 31) < ((r + 5) & 31);
541 return _LessImpl(lhs, rhs);
545 TF_API bool _LessImpl(
const std::string &lhs,
546 const std::string &rhs)
const;
554 template <
typename T>
562 std::ostringstream
stream;
563 stream.imbue(std::locale::classic());
585 double d,
char*
buffer,
int len,
bool emitTrailingZero);
614 template <
typename T>
619 std::istringstream
stream(instring);
621 if (status && !stream)
629 bool TfUnstringify(
const std::string &instring,
bool* status);
633 std::string
TfUnstringify(
const std::string &instring,
bool* status);
689 const std::string &suffix );
699 char const *p = identifier.c_str();
700 auto letter = [](
unsigned c) {
return ((
c-
'A') < 26) || ((
c-
'a') < 26); };
701 auto number = [](
unsigned c) {
return (
c-
'0') < 10; };
702 auto under = [](
unsigned c) {
return c ==
'_'; };
704 if (!x || number(x)) {
707 while (letter(x) || number(x) || under(x)) {
730 #endif // PXR_BASE_TF_STRING_UTILS_H
TF_API std::string TfGetXmlEscapedString(const std::string &in)
TF_API std::string TfStringPrintf(const char *fmt,...)
TF_API unsigned long TfStringToULong(const std::string &txt, bool *outOfRange=NULL)
std::string TfSafeString(const char *ptr)
bool TfStringEndsWith(const std::string &s, const char *suffix)
Returns true if s ends with suffix.
TF_API long TfStringToLong(const std::string &txt, bool *outOfRange=NULL)
TF_API std::string TfStringGetSuffix(const std::string &name, char delimiter= '.')
TF_API std::vector< std::string > TfStringSplit(std::string const &src, std::string const &separator)
GLsizei const GLfloat * value
TF_API std::string TfStringTrimRight(const std::string &s, const char *trimChars=" \n\t\r")
TF_API std::ostream & operator<<(std::ostream &o, TfStreamFloat t)
GLboolean GLboolean GLboolean GLboolean a
bool TfStringStartsWith(const std::string &s, const char *prefix)
Returns true if s starts with prefix.
TF_API std::set< std::string > TfStringTokenizeToSet(const std::string &source, const char *delimiters=" \t\n")
TF_API double TfStringToDouble(const std::string &txt)
TF_API std::string TfStringGlobToRegex(const std::string &s)
TF_API std::string TfMakeValidIdentifier(const std::string &in)
TF_API std::string TfStringToLower(const std::string &source)
Makes all characters in source lowercase, and returns the result.
TF_API std::string TfStringTrim(const std::string &s, const char *trimChars=" \n\t\r")
bool operator()(const std::string &lhs, const std::string &rhs) const
TF_API std::vector< std::string > TfQuotedStringTokenize(const std::string &source, const char *delimiters=" \t\n", std::string *errors=NULL)
constexpr auto in(type t, int set) -> bool
TF_API std::vector< std::string > TfMatchedStringTokenize(const std::string &source, char openDelimiter, char closeDelimiter, char escapeCharacter= '\0', std::string *errors=NULL)
TF_API bool TfDoubleToString(double d, char *buffer, int len, bool emitTrailingZero)
std::string TfIntToString(int i)
Returns the given integer as a string.
TF_API std::string TfVStringPrintf(const std::string &fmt, va_list ap)
TF_API uint64_t TfStringToUInt64(const std::string &txt, bool *outOfRange=NULL)
GLsizei GLsizei GLchar * source
std::string TfStringify(const T &v)
TF_API bool TfStringContains(const std::string &s, const char *substring)
Returns true if s contains substring.
GLuint const GLchar * name
GLsizei const GLchar *const * strings
GLboolean GLboolean GLboolean b
std::string TfStringJoin(ForwardIterator begin, ForwardIterator end, const char *separator=" ")
TF_API std::string TfStringCapitalize(const std::string &source)
TF_API std::string TfStringToUpper(const std::string &source)
Makes all characters in source uppercase, and returns the result.
TF_API std::string TfStringGetCommonPrefix(std::string a, std::string b)
PXR_NAMESPACE_CLOSE_SCOPE PXR_NAMESPACE_OPEN_SCOPE
TF_API std::string TfStringToLowerAscii(const std::string &source)
#define PXR_NAMESPACE_CLOSE_SCOPE
T TfUnstringify(const std::string &instring, bool *status=NULL)
TF_API std::string TfGetBaseName(const std::string &fileName)
Returns the base name of a file (final component of the path).
static TF_API std::string GetName(TfEnum val)
bool Tf_StringStartsWithImpl(char const *s, size_t slen, char const *prefix, size_t prelen)
TF_API std::string TfStringGetBeforeSuffix(const std::string &name, char delimiter= '.')
bool TfIsValidIdentifier(std::string const &identifier)
TF_API void TfEscapeStringReplaceChar(const char **in, char **out)
SIM_API const UT_StringHolder distance
TF_API std::vector< std::string > TfStringTokenize(const std::string &source, const char *delimiters=" \t\n")
TF_API int64_t TfStringToInt64(const std::string &txt, bool *outOfRange=NULL)
TF_API std::string TfStringReplace(const std::string &source, const std::string &from, const std::string &to)
TF_API std::string TfStringTrimLeft(const std::string &s, const char *trimChars=" \n\t\r")
TF_API std::string TfStringCatPaths(const std::string &prefix, const std::string &suffix)
TF_API std::string TfEscapeString(const std::string &in)
bool Tf_StringEndsWithImpl(char const *s, size_t slen, char const *suffix, size_t suflen)
TF_API std::string TfGetPathName(const std::string &fileName)
PcpNodeRef_ChildrenIterator begin(const PcpNodeRef::child_const_range &r)
Support for range-based for loops for PcpNodeRef children ranges.