Mercurial > minori
view dep/fmt/test/util.h @ 343:1faa72660932
*: transfer back to cmake from autotools
autotools just made lots of things more complicated than
they should have and many things broke (i.e. translations)
author | Paper <paper@paper.us.eu.org> |
---|---|
date | Thu, 20 Jun 2024 05:56:06 -0400 |
parents | |
children |
line wrap: on
line source
// Formatting library for C++ - test utilities // // Copyright (c) 2012 - present, Victor Zverovich // All rights reserved. // // For the license information refer to format.h. #include <cstdarg> #include <cstdio> #include <locale> #include <string> #include "fmt/os.h" #ifdef _MSC_VER # define FMT_VSNPRINTF vsprintf_s #else # define FMT_VSNPRINTF vsnprintf #endif template <size_t SIZE> void safe_sprintf(char (&buffer)[SIZE], const char* format, ...) { std::va_list args; va_start(args, format); FMT_VSNPRINTF(buffer, SIZE, format, args); va_end(args); } extern const char* const file_content; // Opens a buffered file for reading. auto open_buffered_file(FILE** fp = nullptr) -> fmt::buffered_file; inline auto safe_fopen(const char* filename, const char* mode) -> FILE* { #if defined(_WIN32) && !defined(__MINGW32__) // Fix MSVC warning about "unsafe" fopen. FILE* f = nullptr; errno = fopen_s(&f, filename, mode); return f; #else return std::fopen(filename, mode); #endif } template <typename Char> class basic_test_string { private: std::basic_string<Char> value_; static const Char empty[]; public: explicit basic_test_string(const Char* value = empty) : value_(value) {} auto value() const -> const std::basic_string<Char>& { return value_; } }; template <typename Char> const Char basic_test_string<Char>::empty[] = {0}; using test_string = basic_test_string<char>; using test_wstring = basic_test_string<wchar_t>; template <typename Char> auto operator<<(std::basic_ostream<Char>& os, const basic_test_string<Char>& s) -> std::basic_ostream<Char>& { os << s.value(); return os; } class date { int year_, month_, day_; public: date(int year, int month, int day) : year_(year), month_(month), day_(day) {} auto year() const -> int { return year_; } auto month() const -> int { return month_; } auto day() const -> int { return day_; } }; // Returns a locale with the given name if available or classic locale // otherwise. auto get_locale(const char* name, const char* alt_name = nullptr) -> std::locale;