#pragma once #include inline std::string string_format(const std::string fmt_str, ...) { int final_n, n = ((int)fmt_str.size()) * 2; /* Reserve two times as much as the length of the fmt_str */ std::string str; std::unique_ptr formatted; va_list ap; while (1) { formatted.reset(new char[n]); /* Wrap the plain char array into the unique_ptr */ strcpy(&formatted[0], fmt_str.c_str()); va_start(ap, fmt_str); final_n = vsnprintf(&formatted[0], n, fmt_str.c_str(), ap); va_end(ap); if (final_n < 0 || final_n >= n) n += abs(final_n - n + 1); else break; } return std::string(formatted.get()); } #ifdef WIN32 #include inline std::wstring string2wstring(const std::string& str, const std::string& locale) { typedef std::codecvt_byname F; std::wstring_convert strCnv(new F(locale)); return strCnv.from_bytes(str); } inline std::wstring strToWstr(std::string str) { if (str.length() == 0) return L""; return string2wstring(str, "zh-CN"); } #endif inline void getInputName(Ort::Session* session, string& inputName) { size_t numInputNodes = session->GetInputCount(); if (numInputNodes > 0) { Ort::AllocatorWithDefaultOptions allocator; { auto t = session->GetInputNameAllocated(0, allocator); inputName = t.get(); } } } inline void getOutputName(Ort::Session* session, string& outputName) { size_t numOutputNodes = session->GetOutputCount(); if (numOutputNodes > 0) { Ort::AllocatorWithDefaultOptions allocator; { auto t = session->GetOutputNameAllocated(0, allocator); outputName = t.get(); } } } template inline static size_t argmax(ForwardIterator first, ForwardIterator last) { return std::distance(first, std::max_element(first, last)); }