This is an example showing various permutations of use of the FastFormat formatting API.
#ifdef _AFXDLL
# include <afx.h>
#endif
#include <fastformat/sinks/ostream.hpp>
#ifdef __AFX_H__
# include <fastformat/sinks/CString.hpp>
#endif
#include <fastformat/fastformat.hpp>
#include <stlsoft/string/simple_string.hpp>
#include <platformstl/platformstl.hpp>
#ifdef __AFX_H__
#endif
#ifdef PLATFORMSTL_OS_IS_WINDOWS
# include <comstl/util/initialisers.hpp>
# include <comstl/util/variant.hpp>
#endif
#include <exception>
#include <iostream>
#include <string>
using std::cerr;
using std::cin;
using std::cout;
using std::endl;
#include <stdio.h>
#include <stdlib.h>
static int main_(int , char** )
{
puts("Case 1");
{
std::string sink;
char const* arg0 = "arg0";
std::string arg1 = "arg1";
#ifdef FASTFORMAT_NO_FILTER_TYPE_CONVERSION_SHIM_SUPPORT
char arg2[] = "10";
#else
int arg2 = 10;
#endif
sink.erase();
fastformat::fmt(sink, "A c-style string: {0}", arg0);
sink.erase();
fastformat::fmt(sink, "A std::string: {0}", arg1);
sink.erase();
fastformat::fmt(sink, "A c-style string: {0}, and a std::string: {1}", arg0, arg1);
sink.erase();
fastformat::fmt(sink, "A c-style string: {1}, and an int: {0}", arg2, arg0);
}
puts("Case 2");
{
stlsoft::simple_string sink;
std::string fmt0("A c-style string: {0}");
std::string fmt1("A std::string: {0}");
std::string fmt2("A c-style string: {0}, and a std::string: {1}");
std::string fmt3("A c-style string: {1}, and an int: {0}");
char const* arg0 = "arg0";
std::string arg1 = "arg1";
#ifdef FASTFORMAT_NO_FILTER_TYPE_CONVERSION_SHIM_SUPPORT
char arg2[] = "10";
#else
int arg2 = 10;
#endif
sink.clear();
fastformat::fmt(sink, fmt0, arg0);
sink.clear();
fastformat::fmt(sink, fmt1, arg1);
sink.clear();
fastformat::fmt(sink, fmt2, arg0, arg1);
sink.clear();
fastformat::fmt(sink, fmt3, arg2, arg0);
}
puts("Case 3");
{
std::ostream& sink = std::cout;
std::string fmt0("A c-style string: {0}");
std::string fmt1("A std::string: {0}");
std::string fmt2("A c-style string: {0}, and a std::string: {1}");
std::string fmt3("A c-style string: {1}, and an int: {0}");
char const* arg0 = "arg0";
std::string arg1 = "arg1";
#ifdef FASTFORMAT_NO_FILTER_TYPE_CONVERSION_SHIM_SUPPORT
char arg2[] = "10";
#else
int arg2 = 10;
#endif
sink.clear();
fastformat::fmtln(sink, fmt0, arg0);
sink.clear();
fastformat::fmtln(sink, fmt1, arg1);
sink.clear();
fastformat::fmtln(sink, fmt2, arg0, arg1);
sink.clear();
fastformat::fmtln(sink, fmt3, arg2, arg0);
}
#ifdef __AFX_H__
puts("Case 4");
{
CString sink;
stlsoft::simple_string fmt0("A c-style string: {0}");
stlsoft::simple_string fmt1("A stlsoft::simple_string: {0}");
stlsoft::simple_string fmt2("A c-style string: {0}, and a stlsoft::simple_string: {1}");
stlsoft::simple_string fmt3("A c-style string: {1}, and an int: {0}");
char const* arg0 = "arg0";
CString arg1 = "arg1";
#ifdef FASTFORMAT_NO_FILTER_TYPE_CONVERSION_SHIM_SUPPORT
char arg2[] = "10";
#else
int arg2 = 10;
#endif
sink.Empty();
fastformat::fmt(sink, fmt0, arg0);
sink.Empty();
fastformat::fmt(sink, fmt1, arg1);
sink.Empty();
fastformat::fmt(sink, fmt2, arg0, arg1);
sink.Empty();
fastformat::fmt(sink, fmt3, arg2, arg0);
}
#endif
#ifdef PLATFORMSTL_OS_IS_WINDOWS
puts("Case 5");
{
std::ostream& sink = std::cout;
comstl::variant fmt0( "A c-style string: {0}");
comstl::variant fmt1(L"A VARIANT: {0}");
comstl::variant fmt2( "A c-style string: {0}, and a VARIANT: {1}");
comstl::variant fmt3(L"A c-style string: {1}, and an unsigned short: {0}");
char const* arg0 = "arg0";
comstl::variant arg1 = "arg1";
#ifdef FASTFORMAT_NO_FILTER_TYPE_CONVERSION_SHIM_SUPPORT
char arg2[] = "10";
#else
unsigned short arg2 = 10;
#endif
fastformat::fmtln(sink, fmt0, arg0);
fastformat::fmtln(sink, fmt1, arg1);
fastformat::fmtln(sink, fmt2, arg0, arg1);
fastformat::fmtln(sink, fmt3, arg2, arg0);
}
#endif
#ifndef FASTFORMAT_NO_FILTER_TYPE_CONVERSION_SHIM_SUPPORT
puts("Case 6");
puts("Case 6.1");
try
{
int number1 = 1;
int number2 = 2;
fastformat::fmtln(std::cout, "number1: {{{0}}; number2: {", number1, number2);
}
catch(fastformat::illformed_format_exception& x)
{
fastformat::writeln(std::cerr, "error: ", x, "; format=\"", x.format, "\"");
}
catch(std::exception&)
{
fastformat::writeln(std::cerr, "Ooops!");
}
puts("Case 6.2");
try
{
int number1 = 1;
int number2 = 2;
fastformat::fmtln(std::cout, "number1: {{{0}}; number2: {1", number1, number2);
}
catch(fastformat::illformed_format_exception& x)
{
fastformat::writeln(std::cerr, "error: ", x, "; format=\"", x.format, "\"");
}
catch(std::exception&)
{
fastformat::writeln(std::cerr, "Ooops!");
}
puts("Case 6.3");
try
{
int number1 = 1;
int number2 = 2;
fastformat::fmtln(std::cout, "number1: {{{0}}; number2: {1{", number1, number2);
}
catch(fastformat::illformed_format_exception& x)
{
fastformat::writeln(std::cerr, "error: ", x, "; format=\"", x.format, "\"");
}
catch(std::exception&)
{
fastformat::writeln(std::cerr, "Ooops!");
}
puts("Case 6.4");
try
{
int number1 = 1;
int number2 = 2;
fastformat::fmtln(std::cout, "number1: {{{0}}; number2: {1:20-100}", number1, number2);
}
catch(fastformat::illformed_format_exception& x)
{
fastformat::writeln(std::cerr, "error: ", x, "; format=\"", x.format, "\"");
}
catch(std::exception&)
{
fastformat::writeln(std::cerr, "Ooops!");
}
puts("Case 6.5");
try
{
int number1 = 1;
int number2 = 2;
fastformat::fmtln(std::cout, "number1: {{{0}}; number2: {1}", number1);
STLSOFT_SUPPRESS_UNUSED(number2);
}
catch(fastformat::missing_argument_exception& x)
{
fastformat::fmtln(std::cerr, "error: {0}; arg {1} out of {2}", x, x.firstMismatchedReplacementIndex, x.numberOfReplacements);
}
catch(std::exception&)
{
fastformat::writeln(std::cerr, "Ooops!");
}
# ifdef FASTFORMAT_DETECT_UNREFERENCED_ARGUMENTS
puts("Case 6.6");
try
{
int number1 = 1;
int number2 = 2;
fastformat::fmtln(std::cout, "number1: {{{0}}; number2: 1}", number1, number2);
}
catch(fastformat::unreferenced_argument_exception& x)
{
fastformat::fmtln(std::cerr, "error: {0}; arg {1} out of {2}", x, x.firstMismatchedReplacementIndex, x.numberOfReplacements);
}
catch(std::exception&)
{
fastformat::writeln(std::cerr, "Ooops!");
}
puts("Case 6.7");
try
{
int number1 = 1;
int number2 = 2;
fastformat::fmtln(std::cout, "number1: {{{0}}; number2: {}1", number1, number2);
}
catch(fastformat::unreferenced_argument_exception& x)
{
fastformat::writeln(std::cerr, "error: ", x);
}
catch(std::exception&)
{
fastformat::writeln(std::cerr, "Ooops!");
}
# endif
#endif
return EXIT_SUCCESS;
}
int main(int argc, char** argv)
{
try
{
#ifdef PLATFORMSTL_OS_IS_WINDOWS
comstl::com_initialiser coinit;
#endif
return main_(argc, argv);
}
catch(std::exception& x)
{
cerr << "Unhandled error: " << x.what() << endl;
}
catch(...)
{
cerr << "Unhandled unknown error" << endl;
}
return EXIT_FAILURE;
}