33 template <
typename TT>
35 size_t operator()(TT
const& tt)
const {
return std::hash<TT>()(tt); }
41 inline void hash_combine(std::size_t& hash_seed, T
const& v) {
42 hash_seed ^= std::hash<T>()(v) + 0x9e3779b9 + (hash_seed << 6) +
46 template <class Tuple, size_t Index = std::tuple_size<Tuple>::value - 1>
47 struct HashValueImpl {
48 static void apply(
size_t& seed, Tuple
const& tuple) {
49 HashValueImpl<Tuple, Index - 1>::apply(seed, tuple);
50 hash_combine(seed, std::get<Index>(tuple));
54 template <
class Tuple>
55 struct HashValueImpl<Tuple, 0> {
56 static void apply(
size_t& seed, Tuple
const& tuple) {
57 hash_combine(seed, std::get<0>(tuple));
63 template <
typename... TT>
67 HashValueImpl<std::tuple<TT...>>::apply(hash_seed, tt);
76 for (
int i = 0; i < (int)matrix.size(); i++) {
77 auto elem = *(matrix.data() + i);
78 hash_seed ^= std::hash<typename T::Scalar>()(elem) + 0x9e3779b9 +
79 (hash_seed << 6) + (hash_seed >> 2);
90 return static_cast<std::size_t
>(t);
101 const std::string& old_str,
102 const std::string& new_str);
108 const std::string& dst);
111 const std::string& old_str,
112 const std::string& new_str);
115 const std::string& old_str,
116 const std::string& new_str);
120 const std::string& prefix);
124 const std::string& postfix);
127 const std::string& delimiter =
", ");
133 const std::string& delimiters =
" ",
134 bool trim_empty_str =
true);
139 const std::string& str,
140 const std::string& delimiters =
" ",
141 bool trim_empty_str =
true);
147 const std::string& delimiters =
" ",
148 bool trim_empty_str =
true);
155 const std::string& valid_chars =
"_");
158 std::string& str,
const std::string& chars =
"\t\n\v\f\r ");
161 std::string& str,
const std::string& chars =
"\t\n\v\f\r ");
166 std::string& str,
const std::string& chars =
"\t\n\v\f\r ");
175 template <
typename... Args>
177 int size_s = std::snprintf(
nullptr, 0,
format.c_str(), args...) +
180 throw std::runtime_error(
"Error during formatting.");
182 auto size =
static_cast<size_t>(size_s);
183 auto buf = std::make_unique<char[]>(
size);
184 std::snprintf(buf.get(),
size,
format.c_str(), args...);
185 return std::string(buf.get(),
186 buf.get() +
size - 1);
190 template <
typename... Args>
195 char* buffer =
nullptr;
196 int size_s = asprintf(&buffer,
format.c_str(), args...);
198 throw std::runtime_error(
"Error during formatting.");
200 auto ret = std::string(buffer,
211 div_t tmp = std::div(x, y);
212 return tmp.quot + (tmp.rem != 0 ? 1 : 0);
224 std::mt19937::result_type seed = std::random_device{}())
225 : distribution_(
min,
max), generator_(seed) {}
filament::Texture::InternalFormat format
size_t WordLength(const std::string &doc, size_t start_pos, const std::string &valid_chars="_")
std::string FormatString(const std::string &format, Args... args)
Format string.
std::string StringPrintf(const char *format,...)
void SplitString(std::vector< std::string > &tokens, const std::string &str, const std::string &delimiters=" ", bool trim_empty_str=true)
std::string & StripString(std::string &str, const std::string &chars="\t\n\v\f\r ")
bool StringEndsWith(const std::string &str, const std::string &postfix)
std::string ToLower(const std::string &s)
Convert string to the lower case.
std::string JoinStrings(const std::vector< std::string > &strs, const std::string &delimiter=", ")
int DivUp(int x, int y)
Computes the quotient of x/y with rounding up.
std::string & RightStripString(std::string &str, const std::string &chars="\t\n\v\f\r ")
std::string StringReplaceLast(const std::string &str, const std::string &old_str, const std::string &new_str)
bool StringContains(const std::string &src, const std::string &dst)
void Sleep(int milliseconds)
std::string ToUpper(const std::string &s)
Convert string to the upper case.
std::string GetCurrentTimeStamp()
Returns current time stamp.
std::string FastFormatString(const std::string &format, Args... args)
Format string fast (Unix / BSD Only)
std::string & LeftStripString(std::string &str, const std::string &chars="\t\n\v\f\r ")
std::vector< std::string > StringSplit(const std::string &str, const std::string &delimiters=" ", bool trim_empty_str=true)
std::string StringReplace(const std::string &str, const std::string &old_str, const std::string &new_str)
std::string StringReplaceFirst(const std::string &str, const std::string &old_str, const std::string &new_str)
bool StringStartsWith(const std::string &str, const std::string &prefix)
Generic file read and write utility for python interface.
std::size_t operator()(T const &matrix) const
std::size_t operator()(T t) const
size_t operator()(std::tuple< TT... > const &tt) const
size_t operator()(TT const &tt) const