diff --git a/externals/coda-oss/modules/c++/net/include/net/URL.h b/externals/coda-oss/modules/c++/net/include/net/URL.h index ea9b4f8fe7..60e914e795 100644 --- a/externals/coda-oss/modules/c++/net/include/net/URL.h +++ b/externals/coda-oss/modules/c++/net/include/net/URL.h @@ -113,6 +113,13 @@ class URL std::string mFragment; }; + +inline std::ostream& operator<<(std::ostream& os, const URL& url) +{ + os << url.toString(); + return os; +} + } #endif diff --git a/externals/coda-oss/modules/c++/str/include/str/Format.h b/externals/coda-oss/modules/c++/str/include/str/Format.h index 20df7a024c..3ecb9e81a9 100644 --- a/externals/coda-oss/modules/c++/str/include/str/Format.h +++ b/externals/coda-oss/modules/c++/str/include/str/Format.h @@ -35,18 +35,8 @@ namespace str { -struct CODA_OSS_API Format final -{ - Format(const char* format, ...); - - operator std::string() const - { - return mString; - } - -private: - std::string mString; -}; + CODA_OSS_API std::string Format(const char* format, ...); +} /*! * \param format The format @@ -54,89 +44,125 @@ struct CODA_OSS_API Format final */ //CODA_OSS_API std::string format(const char* format, ...); -inline std::string format(const char* format) +inline auto FmtX(const char* format) { - return Format(format); + return str::Format(format); } -inline std::string format(const char* format, const char* pStr) +inline auto FmtX(const char* format, const char* pStr) +{ + return str::Format(format, pStr); +} +inline auto FmtX(const char* format, const std::string& s) { - return Format(format, pStr); + return str::Format(format, s.c_str()); } -inline std::string format(const char* format, const std::string& s) +inline auto FmtX(const char* format, int i) { - return Format(format, s.c_str()); + return str::Format(format, i); } -inline std::string format(const char* format, int i) +inline auto FmtX(const char* format, uint32_t i) { - return Format(format, i); + return str::Format(format, i); } -inline std::string format(const char* format, uint32_t i) +inline auto FmtX(const char* format, ptrdiff_t l) { - return Format(format, i); + return str::Format(format, l); } -inline std::string format(const char* format, ptrdiff_t l) +inline auto FmtX(const char* format, size_t ul) { - return Format(format, l); + return str::Format(format, ul); } -inline std::string format(const char* format, size_t ul) +inline auto FmtX(const char* format, float f) { - return Format(format, ul); + return str::Format(format, f); } -inline std::string format(const char* format, float f) +inline auto FmtX(const char* format, double d) { - return Format(format, f); + return str::Format(format, d); } -inline std::string format(const char* format, char ch, const char* pStr) +inline auto FmtX(const char* format, char ch, const char* pStr) { - return Format(format, ch, pStr); + return str::Format(format, ch, pStr); } -inline std::string format(const char* format, char ch, const std::string& s) +inline auto FmtX(const char* format, char ch, const std::string& s) { - return Format(format, ch, s.c_str()); + return str::Format(format, ch, s.c_str()); } -inline std::string format(const char* format, const std::string& s1, const std::string& s2) +inline auto FmtX(const char* format, const std::string& s1, const std::string& s2) { - return Format(format, s1.c_str(), s2.c_str()); + return str::Format(format, s1.c_str(), s2.c_str()); } -inline std::string format(const char* format, const std::string& s, size_t ul) +inline auto FmtX(const char* format, const std::string& s, size_t ul) { - return Format(format, s.c_str(), ul); + return str::Format(format, s.c_str(), ul); } -inline std::string format(const char* format, char ch1, char ch2) +inline auto FmtX(const char* format, char ch1, char ch2) { - return Format(format, ch1, ch2); + return str::Format(format, ch1, ch2); } -inline std::string format(const char* format, size_t ul1, size_t ul2) +inline auto FmtX(const char* format, long l1, long l2) { - return Format(format, ul1, ul2); + return str::Format(format, l1, l2); } -inline std::string format(const char* format, int i, const std::string& s) +inline auto FmtX(const char* format, size_t ul1, size_t ul2) { - return Format(format, i, s.c_str()); + return str::Format(format, ul1, ul2); } -inline std::string format(const char* format, int i, const char* pStr) +inline auto FmtX(const char* format, double d1, double d2) { - return Format(format, i, pStr); + return str::Format(format, d1, d2); +} +inline auto FmtX(const char* format, int i, const char* pStr) +{ + return str::Format(format, i, pStr); +} +inline auto FmtX(const char* fmt, int i, const std::string& s) +{ + return FmtX(fmt, i, s.c_str()); } -inline std::string format(const char* format, char ch1, char ch2, const std::string& s) +inline auto FmtX(const char* format, char ch1, char ch2, const std::string& s) +{ + return str::Format(format, ch1, ch2, s.c_str()); +} +inline auto FmtX(const char* format, int i1, int i2, unsigned long ul) +{ + return str::Format(format, i1, i2, ul); +} +inline auto FmtX(const char* format, int i1, int i2, int i3) { - return Format(format, ch1, ch2, s.c_str()); + return str::Format(format, i1, i2, i3); } -inline std::string format(const char* format, int i1, int i2, unsigned long ul) +inline auto FmtX(const char* format, float f1, float f2, float f3) { - return Format(format, i1, i2, ul); + return str::Format(format, f1, f2, f3); } -inline std::string format(const char* format, int i1, int i2, int i3) +inline std::string FmtX(const char* format, const std::string& s1, int i2, int i3) { - return Format(format, i1, i2, i3); + return str::Format(format, s1.c_str(), i2, i3); } -inline std::string format(const char* format, const std::string& s1, const std::string& s2, uint32_t ui) +inline auto FmtX(const char* format, const std::string& s1, const std::string& s2, uint32_t ui) { - return Format(format, s1.c_str(), s2.c_str(), ui); + return str::Format(format, s1.c_str(), s2.c_str(), ui); +} +inline auto FmtX(const char* format, const std::string& s1, const std::string& s2, const std::string& s3) +{ + return str::Format(format, s1.c_str(), s2.c_str(), s3.c_str()); } +inline auto FmtX(const char* format, int i1, int i2, int i3, int i4) +{ + return str::Format(format, i1, i2, i3, i4); } -#endif // CODA_OSS_str_Format_h_INCLUDED_ \ No newline at end of file +inline auto FmtX(const char* format, const char* pStr1, const std::string& s2, const char* pStr3, const std::string& s4) +{ + return str::Format(format, pStr1, s2.c_str(), pStr3, s4.c_str()); +} +inline auto FmtX(const char* format, const std::string& s1, int i2, const std::string& s3, int i4) +{ + return str::Format(format, s1.c_str(), i2, s3.c_str(), i4); +} + +#endif // CODA_OSS_str_Format_h_INCLUDED_ diff --git a/externals/coda-oss/modules/c++/str/source/Format.cpp b/externals/coda-oss/modules/c++/str/source/Format.cpp index 1117ced91d..8fc1205c70 100644 --- a/externals/coda-oss/modules/c++/str/source/Format.cpp +++ b/externals/coda-oss/modules/c++/str/source/Format.cpp @@ -51,20 +51,11 @@ inline void va_end_(va_list& args) CODA_OSS_disable_warning_pop } -//std::string str::format(const char *format, ...) -//{ -// va_list args; -// va_start(args, format); -// auto retval = vformat(format, args); -// va_end_(args); -// return retval; -//} - -str::Format::Format(const char* format, ...) +std::string str::Format(const char* format, ...) { va_list args; va_start(args, format); auto result = vformat(format, args); va_end_(args); - mString = std::move(result); + return result; } diff --git a/externals/coda-oss/modules/c++/str/tests/VersionTest.cpp b/externals/coda-oss/modules/c++/str/tests/VersionTest.cpp index a3e5503682..6b2c00b6d4 100644 --- a/externals/coda-oss/modules/c++/str/tests/VersionTest.cpp +++ b/externals/coda-oss/modules/c++/str/tests/VersionTest.cpp @@ -23,11 +23,7 @@ #include #include -#if defined(TEST_FUNTOR) -# define FORMAT_FUNC (std::string)str::Format -#else -# define FORMAT_FUNC str::format -#endif +#define FORMAT_FUNC str::Format int main() { diff --git a/externals/coda-oss/modules/c++/sys/include/sys/Conf.h b/externals/coda-oss/modules/c++/sys/include/sys/Conf.h index 45cf7da292..6dd45ea28d 100644 --- a/externals/coda-oss/modules/c++/sys/include/sys/Conf.h +++ b/externals/coda-oss/modules/c++/sys/include/sys/Conf.h @@ -156,8 +156,6 @@ namespace sys #include "except/Exception.h" -#define FmtX str::format - #define SYS_FUNC NativeLayer_func__ #define Ctxt(MESSAGE) except::Context(__FILE__, __LINE__, SYS_FUNC, \ diff --git a/externals/nitro/modules/c++/nitf/include/nitf/Object.hpp b/externals/nitro/modules/c++/nitf/include/nitf/Object.hpp index 3a264b0c42..9547c6b7d7 100644 --- a/externals/nitro/modules/c++/nitf/include/nitf/Object.hpp +++ b/externals/nitro/modules/c++/nitf/include/nitf/Object.hpp @@ -151,7 +151,7 @@ class NITRO_NITFCPP_API Object */ std::string getObjectID() const { - return FmtX("%p", getNative()); + return str::Format("%p", getNative()); } bool isManaged() const noexcept { return isValid() && mHandle->isManaged(); } diff --git a/externals/nitro/modules/c++/nitf/tests/test_j2k_nitf_read_region.cpp b/externals/nitro/modules/c++/nitf/tests/test_j2k_nitf_read_region.cpp index 37f247fc07..d99d6b5c15 100644 --- a/externals/nitro/modules/c++/nitf/tests/test_j2k_nitf_read_region.cpp +++ b/externals/nitro/modules/c++/nitf/tests/test_j2k_nitf_read_region.cpp @@ -215,7 +215,7 @@ int main(int argc, char **argv) const auto result_ = j2kReader.readRegion(0, 0, width, height, buf); const std::span result(result_.data(), result_.size()); - const auto namePrefix = str::format("image-%d", (i + 1)); + const auto namePrefix = FmtX("image-%d", (i + 1)); // TODO: Update write to only output tiles in read region writeFile(0, 0, width, height, result, namePrefix); writeJ2K(0, 0, width, height, result, container, namePrefix); diff --git a/externals/nitro/modules/c++/nitf/unittests/test_j2k_loading++.cpp b/externals/nitro/modules/c++/nitf/unittests/test_j2k_loading++.cpp index d0ffa52433..ec6692e31b 100644 --- a/externals/nitro/modules/c++/nitf/unittests/test_j2k_loading++.cpp +++ b/externals/nitro/modules/c++/nitf/unittests/test_j2k_loading++.cpp @@ -271,7 +271,7 @@ void test_j2k_nitf_read_region_(const std::string& testName, const auto result_ = j2kReader.readRegion(0, 0, width, height, buf); const auto result = sys::make_const_span(result_); - const auto namePrefix = str::format("image-%d", (i + 1)); + const auto namePrefix = FmtX("image-%d", (i + 1)); // TODO: Update write to only output tiles in read region writeFile(0, 0, width, height, result, namePrefix); writeJ2K(0, 0, width, height, result, container, namePrefix);