MatN work for versatile appimage creation for all types of os
[goodguy/cinelerra.git] / cinelerra-5.1 / tools / makeappimagetool / log.cpp
diff --git a/cinelerra-5.1/tools/makeappimagetool/log.cpp b/cinelerra-5.1/tools/makeappimagetool/log.cpp
new file mode 100644 (file)
index 0000000..cf6e050
--- /dev/null
@@ -0,0 +1,131 @@
+// local includes
+#include "includes/log.h"
+
+namespace linuxdeploy {
+    namespace core {
+        namespace log {
+            LD_LOGLEVEL ldLog::verbosity = LD_INFO;
+
+            void ldLog::setVerbosity(LD_LOGLEVEL verbosity) {
+                ldLog::verbosity = verbosity;
+            }
+
+            ldLog::ldLog() {
+                prependSpace = false;
+                currentLogLevel = LD_INFO;
+                logLevelSet = false;
+            };
+
+            ldLog::ldLog(bool prependSpace, bool logLevelSet, LD_LOGLEVEL logLevel) {
+                this->prependSpace = prependSpace;
+                this->currentLogLevel = logLevel;
+                this->logLevelSet = logLevelSet;
+            }
+
+            void ldLog::checkPrependSpace() {
+                if (prependSpace) {
+                    stream << " ";
+                    prependSpace = false;
+                }
+            }
+
+            bool ldLog::checkVerbosity() {
+//                std::cerr << "current: " << currentLogLevel << " verbosity: " << verbosity << std::endl;
+                return (currentLogLevel >= verbosity);
+            }
+
+            ldLog ldLog::operator<<(const std::string& message) {
+                if (checkVerbosity()) {
+                    checkPrependSpace();
+                    stream << message;
+                }
+
+                return ldLog(true, logLevelSet, currentLogLevel);
+            }
+            ldLog ldLog::operator<<(const char* message) {
+                if (checkVerbosity()) {
+                    checkPrependSpace();
+                    stream << message;
+                }
+
+                return ldLog(true, logLevelSet, currentLogLevel);
+            }
+
+            ldLog ldLog::operator<<(const boost::filesystem::path& path) {
+                if (checkVerbosity()) {
+                    checkPrependSpace();
+                    stream << path.string();
+                }
+
+                return ldLog(true, logLevelSet, currentLogLevel);
+            }
+
+            ldLog ldLog::operator<<(const int val) {
+                return ldLog::operator<<(std::to_string(val));
+            }
+
+            ldLog ldLog::operator<<(const size_t val) {
+                return ldLog::operator<<(std::to_string(val));
+            }
+
+            ldLog ldLog::operator<<(const double val) {
+                return ldLog::operator<<(std::to_string(val));
+            }
+
+            ldLog ldLog::operator<<(stdEndlType strm) {
+                if (checkVerbosity()) {
+                    checkPrependSpace();
+                    stream << strm;
+                }
+
+                return ldLog(false, logLevelSet, currentLogLevel);
+            }
+
+            ldLog ldLog::operator<<(const LD_LOGLEVEL logLevel) {
+                if (logLevelSet) {
+                    throw std::runtime_error(
+                        "log level must be first element passed via the stream insertion operator");
+                }
+
+                logLevelSet = true;
+                currentLogLevel = logLevel;
+
+                if (checkVerbosity()) {
+                    switch (logLevel) {
+                        case LD_DEBUG:
+                            stream << "DEBUG: ";
+                            break;
+                        case LD_WARNING:
+                            stream << "WARNING: ";
+                            break;
+                        case LD_ERROR:
+                            stream << "ERROR: ";
+                            break;
+                        default:
+                            break;
+                    }
+                }
+
+                return ldLog(false, logLevelSet, currentLogLevel);
+            }
+
+            ldLog ldLog::operator<<(const LD_STREAM_CONTROL streamControl) {
+                bool prependSpace = true;
+
+                switch (streamControl) {
+                    case LD_NO_SPACE:
+                        prependSpace = false;
+                        break;
+                    default:
+                        break;
+                }
+
+                return ldLog(prependSpace, logLevelSet, currentLogLevel);
+            }
+
+            void ldLog::write(const char* s, const size_t n) {
+                stream.write(s, n);
+            }
+        }
+    }
+}