Implements extern C function to set print func
continuous-integration/drone/push Build is passing Details

This commit is contained in:
Deukhoofd 2019-07-25 13:30:40 +02:00
parent 40e45b0112
commit e639a2c170
Signed by: Deukhoofd
GPG Key ID: ADF2E9256009EDCE
3 changed files with 12 additions and 6 deletions

View File

@ -5,8 +5,14 @@
std::streambuf* Porygon::GlobalScriptOptions::_printBuffer = std::cout.rdbuf(); std::streambuf* Porygon::GlobalScriptOptions::_printBuffer = std::cout.rdbuf();
std::ostream* Porygon::GlobalScriptOptions::_printStream = new std::ostream(Porygon::GlobalScriptOptions::_printBuffer); std::ostream* Porygon::GlobalScriptOptions::_printStream = new std::ostream(Porygon::GlobalScriptOptions::_printBuffer);
static void DefaultPrint(const std::u16string& s){ static void DefaultPrint(const char16_t* s){
Porygon::GlobalScriptOptions::GetPrintStream() << Porygon::Utilities::StringUtils::FromUTF8(s) << std::endl; Porygon::GlobalScriptOptions::GetPrintStream() << Porygon::Utilities::StringUtils::FromUTF8(s) << std::endl;
} }
void (*Porygon::GlobalScriptOptions::_print)(const std::u16string &) = DefaultPrint; void (*Porygon::GlobalScriptOptions::_print)(const char16_t*) = DefaultPrint;
extern "C"{
void SetPrintFunc(void (*func)(const char16_t*)){
Porygon::GlobalScriptOptions::SetPrintFunc(func);
}
}

View File

@ -5,15 +5,15 @@
namespace Porygon{ namespace Porygon{
class GlobalScriptOptions{ class GlobalScriptOptions{
static void (*_print)(const std::u16string& s); static void (*_print)(const char16_t* s);
static std::streambuf* _printBuffer; static std::streambuf* _printBuffer;
static std::ostream* _printStream; static std::ostream* _printStream;
public: public:
inline static void Print(const std::u16string& s){ inline static void Print(const char16_t* s){
GlobalScriptOptions::_print(s); GlobalScriptOptions::_print(s);
} }
static void SetPrintFunc(void (*print)(const std::u16string&)){ static void SetPrintFunc(void (*print)(const char16_t *)){
GlobalScriptOptions::_print = print; GlobalScriptOptions::_print = print;
} }

View File

@ -36,7 +36,7 @@ namespace Porygon::StandardLibraries{
static Evaluation::EvalValue* _print(void*, Evaluation::EvalValue* parameters[], int parameterCount){ static Evaluation::EvalValue* _print(void*, Evaluation::EvalValue* parameters[], int parameterCount){
auto message = parameters[0]->EvaluateString(); auto message = parameters[0]->EvaluateString();
GlobalScriptOptions::Print(message); GlobalScriptOptions::Print(message.c_str());
return new Evaluation::NilEvalValue(); return new Evaluation::NilEvalValue();
} }