60 #if OIIO_GNUC_VERSION >= 70000
61 # pragma GCC diagnostic push
62 # pragma GCC diagnostic ignored "-Wmaybe-uninitialized"
64 #ifndef FMT_HEADER_ONLY
65 # define FMT_HEADER_ONLY
70 #if OIIO_GNUC_VERSION >= 70000
71 # pragma GCC diagnostic pop
75 #define OIIO_HAS_SPRINTF 1
80 #define OIIO_FORMAT_IS_FMT 0
85 #define OIIO_FMT_LOCALE_INDEPENDENT 0
87 #ifndef TINYFORMAT_USE_VARIADIC_TEMPLATES
88 # define TINYFORMAT_USE_VARIADIC_TEMPLATES
92 #ifndef OPENIMAGEIO_PRINTF_ARGS
94 # define __attribute__(x)
107 # define OPENIMAGEIO_PRINTF_ARGS(fmtarg_pos, vararg_pos) \
108 __attribute__ ((format (printf, fmtarg_pos, vararg_pos) ))
135 template<
typename... Args>
181 template<
typename... Args>
189 template<
typename... Args>
197 template<
typename... Args>
220 template<
typename... Args>
226 template<
typename... Args>
227 inline void fprintf (FILE *file,
const char* fmt,
const Args&...
args)
232 template<
typename... Args>
233 inline void fprintf (std::ostream &file,
const char* fmt,
const Args&...
args)
251 template<
typename... Args>
252 inline void print (
const char* fmt,
const Args&...
args)
257 template<
typename... Args>
258 inline void print (FILE *file,
const char* fmt,
const Args&...
args)
263 template<
typename... Args>
264 inline void print (std::ostream &file,
const char* fmt,
const Args&...
args)
305 std::map<std::string, std::string> &
result);
409 template<
class Sequence>
412 std::ostringstream out;
414 for (
auto&&
s : seq) {
415 if (! first && sep.size())
436 float OIIO_API strtof (
const char *nptr,
char **endptr =
nullptr);
437 double OIIO_API strtod (
const char *nptr,
char **endptr =
nullptr);
449 return static_cast<unsigned int>(
stoi (s, pos, base));
457 #define OIIO_STRUTIL_HAS_STOF 1
567 size_t nvals = vals.size();
568 std::vector<string_view> valuestrings;
570 for (
size_t i = 0, e = valuestrings.size(); i < e; ++i) {
571 T v = from_string<T> (valuestrings[i]);
574 else if (valuestrings[i].
size()) {
576 vals[i] = from_string<T> (valuestrings[i]);
580 if (valuestrings.size() == 1 && nvals > 0) {
582 vals.resize (nvals, vals[0]);
584 return list.
size() ? (
int) valuestrings.size() : 0;
614 std::vector<T> vals (nvals,
val);
640 bool operator() (
const char *
a,
const char *
b)
const {
return strcmp (a, b) == 0; }
648 bool operator() (
const char *
a,
const char *
b)
const;
655 bool operator() (
const char *
a,
const char *
b)
const {
return strcmp (a, b) < 0; }
663 bool operator() (
const char *
a,
const char *
b)
const;
bool OIIO_API parse_int(string_view &str, int &val, bool eat=true)
void print(const char *fmt, const Args &...args)
std::string sprintf(const char *fmt, const Args &...args)
void printf(const char *fmt, const Args &...args)
OIIO_API std::vector< std::string > splits(string_view str, string_view sep="", int maxsplit=-1)
size_t operator()(string_view s) const
string_view OIIO_API parse_while(string_view &str, string_view set, bool eat=true)
string_view OIIO_API strip(string_view str, string_view chars=string_view())
bool OIIO_API parse_prefix(string_view &str, string_view prefix, bool eat=true)
unsigned int from_string< unsigned int >(string_view s)
bool OIIO_API parse_float(string_view &str, float &val, bool eat=true)
std::string OIIO_API escape_chars(string_view unescaped)
OIIO_API int stoi(string_view s, size_t *pos=0, int base=10)
bool OIIO_API iends_with(string_view a, string_view b)
GLuint const GLfloat * val
void fprintf(FILE *file, const char *fmt, const Args &...args)
OIIO_API std::vector< string_view > splitsv(string_view str, string_view sep="", int maxsplit=-1)
GLboolean GLboolean GLboolean GLboolean a
std::string format(const char *fmt, const Args &...args)
bool OIIO_API ends_with(string_view a, string_view b)
Does 'a' end with the string 'b', with a case-sensitive comparison?
std::string to_string(const T &value)
string_view OIIO_API parse_identifier(string_view &str, bool eat=true)
std::string format(string_view fmt, const Args &...args)
int extract_from_list_string(std::vector< T > &vals, string_view list, string_view sep=",")
bool OIIO_API istarts_with(string_view a, string_view b)
void OIIO_API utf8_to_unicode(string_view str, std::vector< uint32_t > &uvec)
OIIO_API bool string_is_float(string_view s)
size_t OIIO_API Hash(const char *s, size_t len)
std::string OIIO_API base64_encode(string_view str)
std::string OIIO_API std::string OIIO_API std::string OIIO_API memformat(long long bytes, int digits=1)
#define OPENIMAGEIO_PRINTF_ARGS(fmtarg_pos, vararg_pos)
OIIO_API char * safe_strcpy(char *dst, string_view src, size_t size)
bool OIIO_API parse_char(string_view &str, char c, bool skip_whitespace=true, bool eat=true)
void OIIO_API to_lower(std::string &a)
std::string OIIO_API wordwrap(string_view src, int columns=80, int prefix=0, string_view sep=" ", string_view presep="")
bool OIIO_API parse_identifier_if(string_view &str, string_view id, bool eat=true)
void OIIO_API sync_output(FILE *file, string_view str)
void OIIO_API split(string_view str, std::vector< string_view > &result, string_view sep=string_view(), int maxsplit=-1)
std::string OIIO_API replace(string_view str, string_view pattern, string_view replacement, bool global=false)
float from_string< float >(string_view s)
size_t strhash(string_view s)
Hash a string_view.
std::string to_string(size_t value)
OIIO_API double stod(string_view s, size_t *pos=0)
basic_string_view< char > string_view
void OIIO_API to_upper(std::string &a)
unsigned int stoui(string_view s, size_t *pos=0, int base=10)
std::string OIIO_API vsprintf(const char *fmt, va_list ap) OPENIMAGEIO_PRINTF_ARGS(1
bool OIIO_API iequals(string_view a, string_view b)
bool OIIO_API parse_until_char(string_view &str, char c, bool eat=true)
std::string OIIO_API timeintervalformat(double secs, int digits=1)
typedef int(WINAPI *PFNWGLRELEASEPBUFFERDCARBPROC)(HPBUFFERARB hPbuffer
std::string format(const char *fmt, const Args &...args)
OIIO_API bool string_is_int(string_view s)
T from_string(string_view s)
bool OIIO_API get_rest_arguments(const std::string &str, std::string &base, std::map< std::string, std::string > &result)
string_view OIIO_API parse_nested(string_view &str, bool eat=true)
string_view OIIO_API parse_until(string_view &str, string_view sep=" \t\r\n", bool eat=true)
bool OIIO_API contains(string_view a, string_view b)
Does 'a' contain the string 'b' within it?
bool string_is(string_view)
GLdouble GLdouble GLdouble b
std::string OIIO_API unescape_chars(string_view escaped)
string_view OIIO_API parse_word(string_view &str, bool eat=true)
GLsizei const GLchar *const * string
float OIIO_API strtof(const char *nptr, char **endptr=nullptr)
std::string OIIO_API repeat(string_view str, int n)
Repeat a string formed by concatenating str n times.
std::string join(const Sequence &seq, string_view sep="")
bool string_is< int >(string_view s)
bool string_is< float >(string_view s)
int from_string< int >(string_view s)
bool OIIO_API starts_with(string_view a, string_view b)
Does 'a' start with the string 'b', with a case-sensitive comparison?
bool OIIO_API icontains(string_view a, string_view b)
std::string OIIO_API std::string OIIO_API vformat(const char *fmt, va_list ap) OPENIMAGEIO_PRINTF_ARGS(1
#define OIIO_NAMESPACE_END
const char * c_str() const
C++ functor for comparing two strings for equality of their characters.
OIIO_API std::string excise_string_after_head(std::string &str, string_view head)
void OIIO_API skip_whitespace(string_view &str)
double OIIO_API strtod(const char *nptr, char **endptr=nullptr)
bool OIIO_API iless(string_view a, string_view b)
OIIO_API float stof(string_view s, size_t *pos=0)
GLsizei const GLfloat * value
bool OIIO_API parse_string(string_view &str, string_view &val, bool eat=true, QuoteBehavior keep_quotes=DeleteQuotes)
C++ functor for comparing the ordering of two strings.
#define OIIO_NAMESPACE_BEGIN