/* This file is part of Ingen. Copyright 2007-2016 David Robillard Ingen is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or any later version. Ingen is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for details. You should have received a copy of the GNU Affero General Public License along with Ingen. If not, see . */ #ifndef INGEN_LOG_HPP #define INGEN_LOG_HPP #include "ingen/LV2Features.hpp" #include "ingen/fmt.hpp" // IWYU pragma: export #include "ingen/ingen.h" #include "lv2/core/lv2.h" #include "lv2/log/log.h" #include "lv2/urid/urid.h" #include #include #include #include #include namespace ingen { class Node; class URIs; class World; class INGEN_API Log { public: using Sink = std::function; Log(LV2_Log_Log* log, URIs& uris); struct Feature : public LV2Features::Feature { const char* uri() const override { return LV2_LOG__log; } std::shared_ptr feature(World& world, Node* block) override; struct Handle { LV2_Log_Log lv2_log; Log* log; Node* node; }; }; void rt_error(const char* msg); void error(const std::string& msg); void info(const std::string& msg); void warn(const std::string& msg); void trace(const std::string& msg); template void error(const char* format, Args&&... args) { error(fmt(format, std::forward(args)...)); } template void info(const char* format, Args&&... args) { info(fmt(format, std::forward(args)...)); } template void warn(const char* format, Args&&... args) { warn(fmt(format, std::forward(args)...)); } template void trace(const char* format, Args&&... args) { trace(fmt(format, std::forward(args)...)); } int vtprintf(LV2_URID type, const char* fmt, va_list args); void set_flush(bool f) { _flush = f; } void set_trace(bool f) { _trace = f; } void set_sink(Sink s) { _sink = std::move(s); } private: LV2_Log_Log* _log; URIs& _uris; Sink _sink; bool _flush{false}; bool _trace{false}; }; } // namespace ingen #endif // INGEN_LOG_HPP