summaryrefslogtreecommitdiffstats
path: root/source/core/slang-std-writers.cpp
blob: 264f37c980182c072f3802e2ae851166d86e4847 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#include "slang-std-writers.h"

#if SLANG_WINDOWS_FAMILY
#include <Windows.h>
#endif

namespace Slang
{

/* static */StdWriters* StdWriters::s_singleton = nullptr;

/* static */RefPtr<StdWriters> StdWriters::createDefault()
{
#if SLANG_WINDOWS_FAMILY
    SetConsoleCP(CP_UTF8);
    SetConsoleOutputCP(CP_UTF8);
#endif
    RefPtr<StdWriters> stdWriters(new StdWriters);
    RefPtr<FileWriter> stdError(new FileWriter(stderr, WriterFlag::AutoFlush | WriterFlag::IsUnowned));
    RefPtr<FileWriter> stdOut(new FileWriter(stdout, WriterFlag::AutoFlush | WriterFlag::IsUnowned));

    stdWriters->setWriter(SLANG_WRITER_CHANNEL_STD_ERROR, stdError);
    stdWriters->setWriter(SLANG_WRITER_CHANNEL_STD_OUTPUT, stdOut);
    
    return stdWriters;
}

/* static */RefPtr<StdWriters> StdWriters::initDefaultSingleton()
{
    if (s_singleton)
    {
        return s_singleton;
    }
    auto defaults = createDefault();
    setSingleton(defaults);
    return defaults;
}

}