Update CHANGES.md before the release
[scilab.git] / scilab / modules / scicos / src / cpp / LoggerView.hxx
1 /*
2  *  Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3  *  Copyright (C) 2014-2016 - Scilab Enterprises - Clement DAVID
4  *
5  * Copyright (C) 2012 - 2016 - Scilab Enterprises
6  *
7  * This file is hereby licensed under the terms of the GNU GPL v2.0,
8  * pursuant to article 5.3.4 of the CeCILL v.2.1.
9  * This file was originally licensed under the terms of the CeCILL v2.1,
10  * and continues to be available under such terms.
11  * For more information, see the COPYING file which you should have received
12  * along with this program.
13  *
14  */
15
16 #ifndef LOGGERVIEW_HXX_
17 #define LOGGERVIEW_HXX_
18
19 #include <cwchar>
20 #include <string>
21 #include <sstream>
22
23 #include "View.hxx"
24 #include "utilities.hxx"
25
26 namespace org_scilab_modules_scicos
27 {
28
29 enum LogLevel
30 {
31     LOG_UNDEF = -1,   //!< Undefined value
32     LOG_TRACE = 0,    //!< more detailed information. Expect these to be written to logs only.
33     LOG_DEBUG = 1,    //!< detailed information on the flow through the system. Expect these to be written to logs only.
34     LOG_INFO = 2,    //!< Interesting runtime events (startup/shutdown). Expect these to be immediately visible on a console, so be conservative and keep to a minimum.
35     LOG_WARNING = 3,    //!<
36     LOG_ERROR = 4,    //!< Other runtime errors or unexpected conditions. Expect these to be immediately visible on a status console.
37     LOG_FATAL = 5,    //!< Severe errors that cause premature termination. Expect these to be immediately visible on a status console.
38 };
39
40 class LoggerView: public View
41 {
42 public:
43     LoggerView();
44     ~LoggerView();
45
46     /*
47      * Implement a classical Logger interface
48      */
49
50     static enum LogLevel indexOf(const wchar_t* name);
51     static const wchar_t* toString(enum LogLevel level);
52     static const char* toDisplay(enum LogLevel level);
53
54     enum LogLevel getLevel() const
55     {
56         return m_level;
57     }
58     void setLevel(enum LogLevel level)
59     {
60         this->m_level = level;
61     }
62
63     void log(enum LogLevel level, const std::stringstream& msg);
64     void log(enum LogLevel level, const std::string& msg);
65     void log(enum LogLevel level, const char* msg, ...);
66     void log(enum LogLevel level, const wchar_t* msg, ...);
67
68     /*
69      * Implement the Logger as a View
70      */
71
72     void objectCreated(const ScicosID& uid, kind_t k);
73     void objectReferenced(const ScicosID& uid, kind_t k, unsigned refCount);
74     void objectUnreferenced(const ScicosID& uid, kind_t k, unsigned refCount);
75     void objectDeleted(const ScicosID& uid, kind_t k);
76     void objectCloned(const ScicosID& uid, const ScicosID& cloned, kind_t k);
77     void propertyUpdated(const ScicosID& uid, kind_t k, object_properties_t p, update_status_t u);
78
79 private:
80     enum LogLevel m_level;
81 };
82
83 } /* namespace org_scilab_modules_scicos */
84
85 #endif /* LOGGERVIEW_HXX_ */