34 #define OIIO_HAS_SPRINTF 1
40 #ifndef OIIO_FORMAT_IS_FMT
41 # define OIIO_FORMAT_IS_FMT 0
47 #ifdef OIIO_HIDE_FORMAT
48 # define OIIO_FORMAT_DEPRECATED OIIO_DEPRECATED("old style (printf-like) formatting version of this function is deprecated")
50 # define OIIO_FORMAT_DEPRECATED
54 #ifndef OIIO_PRINT_IS_SYNCHRONIZED
55 # define OIIO_PRINT_IS_SYNCHRONIZED 0
61 #define OIIO_FMT_LOCALE_INDEPENDENT 1
92 template<
typename Str,
typename... Args>
93 std::string
sprintf(
const Str& fmt, Args&&...
args);
126 template<
typename Str,
typename... Args>
135 template<
typename... Args>
137 inline std::string
format (
const char* fmt,
const Args&...
args)
144 template<
typename... Args>
155 #if OIIO_FORMAT_IS_FMT
173 template<
typename... Args>
179 template<
typename... Args>
180 inline void fprintf (FILE *file,
const char* fmt,
const Args&...
args)
185 template<
typename... Args>
186 inline void fprintf (std::ostream &file,
const char* fmt,
const Args&...
args)
206 #if FMT_VERSION >= 70000
207 template<
typename Str,
typename... Args>
208 inline void print (FILE *file,
const Str& fmt, Args&&...
args)
213 template<
typename Str,
typename... Args>
214 inline void print (
const Str& fmt, Args&&...
args)
219 template<
typename Str,
typename... Args>
220 inline void print (std::ostream &file,
const Str& fmt, Args&&...
args)
227 template<
typename... Args>
228 inline void print (FILE *file,
const char* fmt, Args&&...
args)
233 template<
typename... Args>
236 print(stdout, fmt, std::forward<Args>(
args)...);
239 template<
typename... Args>
240 inline void print (std::ostream &file,
const char* fmt, Args&&...
args)
268 template<
typename... Args>
269 void print (
const char* fmt,
const Args&...
args);
271 template<
typename... Args>
272 void print (FILE *file,
const char* fmt,
const Args&...
args);
274 template<
typename... Args>
275 void print (std::ostream &file,
const char* fmt,
const Args&...
args);
277 #elif FMT_VERSION >= 70000 && !OIIO_PRINT_IS_SYNCHRONIZED
292 template<
typename... Args>
304 #if defined(__GNUC__) && !defined(__CUDACC__)
314 #if defined(__GNUC__) && !defined(__CUDACC__)
340 std::map<std::string, std::string> &
result);
372 inline constexpr
size_t
380 inline constexpr uint64_t
393 inline constexpr
size_t
402 inline constexpr uint64_t
551 template<
class Sequence>
554 std::ostringstream out;
555 out.imbue(std::locale::classic());
557 for (
auto&&
s : seq) {
558 if (! first && sep.size())
574 template<
class Sequence>
578 std::ostringstream out;
579 out.imbue(std::locale::classic());
581 for (
auto&&
s : seq) {
586 if (len && (--len == 0))
634 #define OIIO_STRUTIL_HAS_STOF 1
689 auto r = strtoll(std::string(s).
c_str(),
nullptr, 10);
690 return static_cast<int64_t
>(
r);
695 auto r = strtoull(std::string(s).
c_str(),
nullptr, 10);
696 return static_cast<uint64_t
>(
r);
751 template<
class T,
class Allocator>
756 size_t nvals = vals.size();
757 std::vector<string_view> valuestrings;
759 for (
size_t i = 0, e = valuestrings.size(); i < e; ++i) {
760 T v = from_string<T> (valuestrings[i]);
763 else if (valuestrings[i].
size()) {
765 vals[i] = from_string<T> (valuestrings[i]);
769 if (valuestrings.size() == 1 && nvals > 0) {
771 vals.resize (nvals, vals[0]);
773 return list.
size() ? (
int) valuestrings.size() : 0;
803 std::vector<T> vals (nvals,
val);
821 int& hour,
int&
min,
int& sec);
843 bool operator() (
const char *
a,
const char *
b)
const noexcept {
return strcmp (
a,
b) == 0; }
851 bool operator() (
const char *
a,
const char *
b)
const noexcept;
858 bool operator() (
const char *
a,
const char *
b)
const noexcept {
return strcmp (
a,
b) < 0; }
866 bool operator() (
const char *
a,
const char *
b)
const noexcept;
876 #if OPENIMAGEIO_VERSION < 30000
881 #if OPENIMAGEIO_VERSION >= 20500
939 return c ==
' ' || c ==
'\n' || c ==
'\t' || c ==
'\r';
1021 bool eat =
true) noexcept;
1026 bool eat = true) noexcept;
1087 bool eat=true) noexcept;
1125 return (!ident.
empty() && str.empty());
string_view safe_string_view(const char *str, size_t size) noexcept
uint64_t from_string< uint64_t >(string_view s)
bool OIIO_UTIL_API parse_int(string_view &str, int &val, bool eat=true) noexcept
typedef int(APIENTRYP RE_PFNGLXSWAPINTERVALSGIPROC)(int)
bool string_is_identifier(string_view str)
Does the string follow the lexical rule of a C identifier?
OIIO_FORMAT_DEPRECATED std::string format(const char *fmt, const Args &...args)
void printf(const char *fmt, const Args &...args)
std::string upper(string_view a)
Return an all-upper case version of a (locale-independent).
bool OIIO_UTIL_API iequals(string_view a, string_view b)
size_t operator()(string_view s) const
unsigned int from_string< unsigned int >(string_view s)
OIIO_UTIL_API bool scan_datetime(string_view str, int &year, int &month, int &day, int &hour, int &min, int &sec)
OIIO_UTIL_API std::vector< string_view > splitsv(string_view str, string_view sep="", int maxsplit=-1)
bool OIIO_UTIL_API parse_char(string_view &str, char c, bool skip_whitespace=true, bool eat=true) noexcept
OIIO_UTIL_API bool string_is_int(string_view s)
GLsizei const GLfloat * value
void fprintf(FILE *file, const char *fmt, const Args &...args)
OIIO_UTIL_API unsigned int stoui(string_view s, size_t *pos=0, int base=10)
std::string to_string(const T &value)
OIIO_NODISCARD std::string format(const Str &fmt, Args &&...args)
size_t OIIO_UTIL_API irfind(string_view a, string_view b)
GLboolean GLboolean GLboolean GLboolean a
bool OIIO_UTIL_API istarts_with(string_view a, string_view b)
string_view OIIO_UTIL_API rstrip(string_view str, string_view chars=string_view())
OIIO_UTIL_API void debug(string_view str)
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)
**But if you need a result
void print(std::ostream &file, const char *fmt, Args &&...args)
OIIO_UTIL_API size_t safe_strlen(const char *str, size_t size) noexcept
bool OIIO_UTIL_API iends_with(string_view a, string_view b)
bool OIIO_UTIL_API icontains(string_view a, string_view b)
std::string OIIO_UTIL_API escape_chars(string_view unescaped)
string_view OIIO_UTIL_API lstrip(string_view str, string_view chars=string_view())
string_view OIIO_UTIL_API parse_nested(string_view &str, bool eat=true) noexcept
bool OIIO_UTIL_API parse_string(string_view &str, string_view &val, bool eat=true, QuoteBehavior keep_quotes=DeleteQuotes) noexcept
OIIO_UTIL_API float stof(string_view s, size_t *pos=0)
basic_string_view< char > string_view
string_view OIIO_UTIL_API parse_line(string_view &str, bool eat=true) noexcept
OIIO_UTIL_API char * safe_strcpy(char *dst, string_view src, size_t size) noexcept
bool OIIO_UTIL_API iless(string_view a, string_view b)
constexpr size_t strhash(size_t len, const char *s)
int64_t from_string< int64_t >(string_view s)
OIIO_UTIL_API bool string_is_float(string_view s)
string_view OIIO_UTIL_API parse_while(string_view &str, string_view set, bool eat=true) noexcept
void OIIO_UTIL_API remove_trailing_whitespace(string_view &str) noexcept
std::string OIIO_UTIL_API vformat(const char *fmt, va_list ap)
static const size_type npos
std::string to_string(const char *value)
size_t OIIO_UTIL_API ifind(string_view a, string_view b)
void OIIO_UTIL_API sync_output(FILE *file, string_view str, bool flush=true)
void OIIO_UTIL_API to_lower(std::string &a)
bool OIIO_UTIL_API parse_values(string_view &str, string_view prefix, span< int > values, string_view sep="", string_view postfix="", bool eat=true) noexcept
float from_string< float >(string_view s)
constexpr auto set(type rhs) -> int
size_t OIIO_UTIL_API rfind(string_view a, string_view b)
std::string OIIO_UTIL_API replace(string_view str, string_view pattern, string_view replacement, bool global=false)
bool OIIO_UTIL_API parse_float(string_view &str, float &val, bool eat=true) noexcept
float OIIO_UTIL_API strtof(const char *nptr, char **endptr=nullptr) noexcept
GLint GLint GLsizei GLint GLenum format
std::string OIIO_UTIL_API wordwrap(string_view src, int columns=80, int prefix=0, string_view sep=" ", string_view presep="")
std::string safe_string(const char *str, size_t size)
double from_string< double >(string_view s)
OIIO_UTIL_API double stod(string_view s, size_t *pos=0)
OIIO_UTIL_API int stoi(string_view s, size_t *pos=0, int base=10)
std::string OIIO_UTIL_API memformat(long long bytes, int digits=1)
OIIO_UTIL_API std::string excise_string_after_head(std::string &str, string_view head)
std::wstring OIIO_UTIL_API utf8_to_utf16(string_view utf8str) noexcept
string_view trimmed_whitespace(string_view str) noexcept
GLboolean GLboolean GLboolean b
OIIO_UTIL_API char * safe_strcat(char *dst, string_view src, size_t size) noexcept
bool OIIO_UTIL_API contains_any_char(string_view a, string_view set)
Does 'a' contain any of the characters within set?
T from_string(string_view s)
void debug(const char *fmt, Args &&...args)
void trim_whitespace(string_view &str) noexcept
constexpr uint64_t strhash64(size_t len, const char *s)
A guaranteed 64-bit string hash on all platforms.
size_t OIIO_UTIL_API find(string_view a, string_view b)
bool OIIO_UTIL_API parse_until_char(string_view &str, char c, bool eat=true) noexcept
bool string_is(string_view)
constexpr auto size() const noexcept-> size_t
void print(FILE *file, const char *fmt, Args &&...args)
std::string OIIO_UTIL_API repeat(string_view str, int n)
Repeat a string formed by concatenating str n times.
constexpr auto make_format_args(T &&...args) -> format_arg_store< Context, remove_cvref_t< T >...>
std::string OIIO_UTIL_API unescape_chars(string_view escaped)
std::string OIIO_UTIL_API base64_encode(string_view str)
std::string join(const Sequence &seq, string_view sep="")
GLenum GLsizei GLsizei GLint * values
OIIO_UTIL_API size_t edit_distance(string_view a, string_view b, EditDistMetric metric=EditDistMetric::Levenshtein)
std::string lower(string_view a)
Return an all-upper case version of a (locale-independent).
int extract_from_list_string(std::vector< T, Allocator > &vals, string_view list, string_view sep=",")
STATIC_INLINE uint64_t Hash64(const char *s, size_t len)
bool OIIO_UTIL_API starts_with(string_view a, string_view b)
Does 'a' start with the string 'b', with a case-sensitive comparison?
bool ircontains(string_view a, string_view b)
OIIO_UTIL_API std::vector< std::string > splits(string_view str, string_view sep="", int maxsplit=-1)
bool string_is< int >(string_view s)
bool string_is< float >(string_view s)
void OIIO_UTIL_API skip_whitespace(string_view &str) noexcept
**If you just want to fire and args
int from_string< int >(string_view s)
constexpr auto data() const noexcept-> const Char *
OIIO_UTIL_API const char * c_str(string_view str)
OIIO_UTIL_API bool eval_as_bool(string_view value)
#define OIIO_FORMAT_DEPRECATED
std::string OIIO_UTIL_API vsprintf(const char *fmt, va_list ap)
string_view OIIO_UTIL_API parse_identifier(string_view &str, bool eat=true) noexcept
#define OIIO_NAMESPACE_END
auto sprintf(const S &fmt, const T &...args) -> std::basic_string< Char >
string_view OIIO_UTIL_API strip(string_view str, string_view chars=string_view())
void OIIO_UTIL_API split(string_view str, std::vector< string_view > &result, string_view sep=string_view(), int maxsplit=-1)
C++ functor for comparing two strings for equality of their characters.
bool OIIO_UTIL_API get_rest_arguments(const std::string &str, std::string &base, std::map< std::string, std::string > &result)
constexpr bool empty() const noexcept
Is the basic_string_view empty, containing no characters?
bool scan_values(string_view str, string_view prefix, span< int > values, string_view sep="", string_view postfix="") noexcept
std::string OIIO_UTIL_API utf16_to_utf8(const std::wstring &utf16str) noexcept
bool OIIO_UTIL_API contains(string_view a, string_view b)
Does 'a' contain the string 'b' within it?
void OIIO_UTIL_API utf8_to_unicode(string_view str, std::vector< uint32_t > &uvec)
void OIIO_UTIL_API to_upper(std::string &a)
std::string OIIO_UTIL_API concat(string_view s, string_view t)
string_view OIIO_UTIL_API parse_word(string_view &str, bool eat=true) noexcept
std::string OIIO_UTIL_API timeintervalformat(double secs, int digits=1)
C++ functor for comparing the ordering of two strings.
std::wstring OIIO_UTIL_API utf8_to_utf16wstring(string_view utf8str) noexcept
constexpr size_type length() const noexcept
bool OIIO_UTIL_API parse_prefix(string_view &str, string_view prefix, bool eat=true) noexcept
bool rcontains(string_view a, string_view b)
string_view OIIO_UTIL_API parse_until(string_view &str, string_view set=" \t\r\n", bool eat=true) noexcept
#define OIIO_NAMESPACE_BEGIN
bool OIIO_UTIL_API parse_identifier_if(string_view &str, string_view id, bool eat=true) noexcept
bool parse_value(string_view &str, float &val, bool eat=true) noexcept
Synonym for parse_int.
double OIIO_UTIL_API strtod(const char *nptr, char **endptr=nullptr) noexcept