#include "config.h"
#include "PrintStream.h"
#include <stdio.h>
#include <wtf/text/CString.h>
#include <wtf/text/UniquedStringImpl.h>
#include <wtf/text/WTFString.h>
namespace WTF {
PrintStream::PrintStream() { }
PrintStream::~PrintStream() { }
void PrintStream::printf(const char* format, ...)
{
va_list argList;
va_start(argList, format);
vprintf(format, argList);
va_end(argList);
}
void PrintStream::printfVariableFormat(const char* format, ...)
{
#if COMPILER(CLANG)
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wformat-nonliteral"
#elif COMPILER(GCC)
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wsuggest-attribute=format"
#endif
va_list argList;
va_start(argList, format);
vprintf(format, argList);
va_end(argList);
#if COMPILER(CLANG)
#pragma clang diagnostic pop
#elif COMPILER(GCC)
#pragma GCC diagnostic pop
#endif
}
void PrintStream::flush()
{
}
PrintStream& PrintStream::begin()
{
return *this;
}
void PrintStream::end()
{
}
void printInternal(PrintStream& out, const char* string)
{
out.printf("%s", string);
}
static void printExpectedCStringHelper(PrintStream& out, const char* type, Expected<CString, UTF8ConversionError> expectedCString)
{
if (UNLIKELY(!expectedCString)) {
if (expectedCString.error() == UTF8ConversionError::OutOfMemory)
out.print("(Out of memory while converting ", type, " to utf8)");
else
out.print("(failed to convert ", type, " to utf8)");
return;
}
out.print(expectedCString.value());
}
void printInternal(PrintStream& out, const StringView& string)
{
printExpectedCStringHelper(out, "StringView", string.tryGetUtf8());
}
void printInternal(PrintStream& out, const CString& string)
{
out.print(string.data());
}
void printInternal(PrintStream& out, const String& string)
{
printExpectedCStringHelper(out, "String", string.tryGetUtf8());
}
void printInternal(PrintStream& out, const StringImpl* string)
{
if (!string) {
out.print("(null StringImpl*)");
return;
}
printExpectedCStringHelper(out, "StringImpl*", string->tryGetUtf8());
}
void printInternal(PrintStream& out, bool value)
{
out.print(boolForPrinting(value));
}
void printInternal(PrintStream& out, int value)
{
out.printf("%d", value);
}
void printInternal(PrintStream& out, unsigned value)
{
out.printf("%u", value);
}
void printInternal(PrintStream& out, signed char value)
{
out.printf("%d", static_cast<int>(value));
}
void printInternal(PrintStream& out, unsigned char value)
{
out.printf("%u", static_cast<unsigned>(value));
}
void printInternal(PrintStream& out, short value)
{
out.printf("%d", static_cast<int>(value));
}
void printInternal(PrintStream& out, unsigned short value)
{
out.printf("%u", static_cast<unsigned>(value));
}
void printInternal(PrintStream& out, long value)
{
out.printf("%ld", value);
}
void printInternal(PrintStream& out, unsigned long value)
{
out.printf("%lu", value);
}
void printInternal(PrintStream& out, long long value)
{
out.printf("%lld", value);
}
void printInternal(PrintStream& out, unsigned long long value)
{
out.printf("%llu", value);
}
void printInternal(PrintStream& out, float value)
{
out.print(static_cast<double>(value));
}
void printInternal(PrintStream& out, double value)
{
out.printf("%lf", value);
}
void printInternal(PrintStream& out, RawPointer value)
{
out.printf("%p", value.value());
}
void dumpCharacter(PrintStream& out, char value)
{
out.printf("%c", value);
}
}