STIR  6.3.0
util.h
1 // Formatting library for C++ - test utilities
2 //
3 // Copyright (c) 2012 - present, Victor Zverovich
4 // All rights reserved.
5 //
6 // For the license information refer to format.h.
7 
8 #include <cstdarg>
9 #include <cstdio>
10 #include <locale>
11 #include <string>
12 
13 #include "fmt/os.h"
14 
15 #ifdef _MSC_VER
16 # define FMT_VSNPRINTF vsprintf_s
17 #else
18 # define FMT_VSNPRINTF vsnprintf
19 #endif
20 
21 template <size_t SIZE>
22 void safe_sprintf(char (&buffer)[SIZE], const char* format, ...) {
23  std::va_list args;
24  va_start(args, format);
25  FMT_VSNPRINTF(buffer, SIZE, format, args);
26  va_end(args);
27 }
28 
29 extern const char* const file_content;
30 
31 // Opens a buffered file for reading.
32 auto open_buffered_file(FILE** fp = nullptr) -> fmt::buffered_file;
33 
34 template <typename Char> class basic_test_string {
35  private:
36  std::basic_string<Char> value_;
37 
38  static const Char empty[];
39 
40  public:
41  explicit basic_test_string(const Char* value = empty) : value_(value) {}
42 
43  auto value() const -> const std::basic_string<Char>& { return value_; }
44 };
45 
46 template <typename Char> const Char basic_test_string<Char>::empty[] = {0};
47 
48 using test_string = basic_test_string<char>;
49 using test_wstring = basic_test_string<wchar_t>;
50 
51 template <typename Char>
52 auto operator<<(std::basic_ostream<Char>& os, const basic_test_string<Char>& s)
53  -> std::basic_ostream<Char>& {
54  os << s.value();
55  return os;
56 }
57 
58 class date {
59  int year_, month_, day_;
60 
61  public:
62  date(int year, int month, int day) : year_(year), month_(month), day_(day) {}
63 
64  auto year() const -> int { return year_; }
65  auto month() const -> int { return month_; }
66  auto day() const -> int { return day_; }
67 };
68 
69 // Returns a locale with the given name if available or classic locale
70 // otherwise.
71 auto get_locale(const char* name, const char* alt_name = nullptr)
72  -> std::locale;
STL namespace.