Doxygen
Loading...
Searching...
No Matches
debug.h
Go to the documentation of this file.
1/******************************************************************************
2 *
3 * Copyright (C) 1997-2020 by Dimitri van Heesch.
4 *
5 * Permission to use, copy, modify, and distribute this software and its
6 * documentation under the terms of the GNU General Public License is hereby
7 * granted. No representations are made about the suitability of this software
8 * for any purpose. It is provided "as is" without express or implied warranty.
9 * See the GNU General Public License for more details.
10 *
11 * Documents produced by Doxygen are derivative works derived from the
12 * input used in their production; they are not affected by this license.
13 *
14 */
15
16#ifndef DEBUG_H
17#define DEBUG_H
18
19#include <cstdint>
20#include "qcstring.h"
21#include "construct.h"
22#include "message.h"
23
24/** Class containing a print function for diagnostics. */
25class Debug
26{
27 public:
28 enum DebugMask : uint64_t {
29 Quiet = 0x00'0000ULL,
30 Preprocessor = 0x00'0001ULL,
31 CommentCnv = 0x00'0002ULL,
32 CommentScan = 0x00'0004ULL,
33 Formula = 0x00'0008ULL,
34 PrintTree = 0x00'0010ULL,
35 Time = 0x00'0020ULL,
36 ExtCmd = 0x00'0040ULL,
37 Markdown = 0x00'0080ULL,
38 FilterOutput = 0x00'0100ULL,
39 Plantuml = 0x00'0200ULL,
40 FortranFixed2Free = 0x00'0400ULL,
41 Cite = 0x00'0800ULL,
42 NoLineNo = 0x00'1000ULL,
43 Rtf = 0x00'2000ULL,
44 Qhp = 0x00'4000ULL,
45 Tag = 0x00'8000ULL,
46 Alias = 0x01'0000ULL,
47 Entries = 0x02'0000ULL,
48 Sections = 0x04'0000ULL,
49 Stderr = 0x08'0000ULL,
50 Layout = 0x10'0000ULL,
51 Lex = 0x0000'FFFF'FF00'0000ULL, // all scanners combined
52 Lex_code = 0x0000'0000'0100'0000ULL,
53 Lex_commentcnv = 0x0000'0000'0200'0000ULL,
54 Lex_commentscan = 0x0000'0000'0400'0000ULL,
55 Lex_configimpl = 0x0000'0000'0800'0000ULL,
56 Lex_constexp = 0x0000'0000'1000'0000ULL,
57 Lex_declinfo = 0x0000'0000'2000'0000ULL,
58 Lex_defargs = 0x0000'0000'4000'0000ULL,
59 Lex_doctokenizer = 0x0000'0000'8000'0000ULL,
60 Lex_fortrancode = 0x0000'0001'0000'0000ULL,
61 Lex_fortranscanner= 0x0000'0002'0000'0000ULL,
62 Lex_lexcode = 0x0000'0004'0000'0000ULL,
63 Lex_lexscanner = 0x0000'0008'0000'0000ULL,
64 Lex_pre = 0x0000'0010'0000'0000ULL,
65 Lex_pycode = 0x0000'0020'0000'0000ULL,
66 Lex_pyscanner = 0x0000'0040'0000'0000ULL,
67 Lex_scanner = 0x0000'0080'0000'0000ULL,
68 Lex_sqlcode = 0x0000'0100'0000'0000ULL,
69 Lex_vhdlcode = 0x0000'0200'0000'0000ULL,
70 Lex_xml = 0x0000'0400'0000'0000ULL,
71 Lex_xmlcode = 0x0000'0800'0000'0000ULL
72 };
73 static void print_(DebugMask mask, int prio, fmt::string_view fmt, fmt::format_args args);
74
75 template<typename ...Args>
76 static void print(DebugMask mask,int prio,fmt::format_string<Args...> fmt, Args&&... args)
77 {
78 print_(mask,prio,fmt,fmt::make_format_args(args...));
79 }
80
81 static bool setFlagStr(const QCString &label);
82 static void setFlag(const DebugMask mask);
83 static void clearFlag(const DebugMask mask);
84 static bool isFlagSet(const DebugMask mask);
85 static void printFlags();
86 static void setPriority(int p);
87
88 static void startTimer();
89 static double elapsedTime();
90
91 private:
93 static int curPrio;
94};
95
97{
98 public:
99 DebugLex(Debug::DebugMask mask,const char *lexName,const char *fileName);
100 ~DebugLex();
102 static void print(Debug::DebugMask mask,const char *state,const char *lexName,const char *fileName);
103 private:
104
108};
109
110
111#endif
Class containing a print function for diagnostics.
Definition debug.h:26
DebugMask
Definition debug.h:28
@ Lex_fortranscanner
Definition debug.h:61
@ Lex_doctokenizer
Definition debug.h:59
@ Lex
Definition debug.h:51
@ Rtf
Definition debug.h:43
@ NoLineNo
Definition debug.h:42
@ Lex_pre
Definition debug.h:64
@ Lex_defargs
Definition debug.h:58
@ Alias
Definition debug.h:46
@ Lex_pycode
Definition debug.h:65
@ Layout
Definition debug.h:50
@ Markdown
Definition debug.h:37
@ Lex_declinfo
Definition debug.h:57
@ Tag
Definition debug.h:45
@ Lex_lexscanner
Definition debug.h:63
@ FilterOutput
Definition debug.h:38
@ Lex_sqlcode
Definition debug.h:68
@ Lex_code
Definition debug.h:52
@ Lex_pyscanner
Definition debug.h:66
@ Cite
Definition debug.h:41
@ ExtCmd
Definition debug.h:36
@ Sections
Definition debug.h:48
@ PrintTree
Definition debug.h:34
@ Time
Definition debug.h:35
@ Quiet
Definition debug.h:29
@ Lex_xml
Definition debug.h:70
@ Stderr
Definition debug.h:49
@ Plantuml
Definition debug.h:39
@ Formula
Definition debug.h:33
@ Lex_commentcnv
Definition debug.h:53
@ Lex_vhdlcode
Definition debug.h:69
@ Lex_constexp
Definition debug.h:56
@ Lex_xmlcode
Definition debug.h:71
@ Lex_fortrancode
Definition debug.h:60
@ Lex_commentscan
Definition debug.h:54
@ Lex_lexcode
Definition debug.h:62
@ Qhp
Definition debug.h:44
@ Entries
Definition debug.h:47
@ Lex_configimpl
Definition debug.h:55
@ Preprocessor
Definition debug.h:30
@ Lex_scanner
Definition debug.h:67
@ CommentCnv
Definition debug.h:31
@ FortranFixed2Free
Definition debug.h:40
@ CommentScan
Definition debug.h:32
static void printFlags()
Definition debug.cpp:137
static DebugMask curMask
Definition debug.h:92
static void setPriority(int p)
Definition debug.cpp:127
static int curPrio
Definition debug.h:93
static void clearFlag(const DebugMask mask)
Definition debug.cpp:122
static bool isFlagSet(const DebugMask mask)
Definition debug.cpp:132
static void print(DebugMask mask, int prio, fmt::format_string< Args... > fmt, Args &&... args)
Definition debug.h:76
static double elapsedTime()
Definition debug.cpp:201
static void startTimer()
Definition debug.cpp:196
static bool setFlagStr(const QCString &label)
Definition debug.cpp:103
static void print_(DebugMask mask, int prio, fmt::string_view fmt, fmt::format_args args)
Definition debug.cpp:81
static void setFlag(const DebugMask mask)
Definition debug.cpp:117
DebugLex(Debug::DebugMask mask, const char *lexName, const char *fileName)
Definition debug.cpp:146
~DebugLex()
Definition debug.cpp:151
Debug::DebugMask m_mask
Definition debug.h:105
QCString m_fileName
Definition debug.h:107
static void print(Debug::DebugMask mask, const char *state, const char *lexName, const char *fileName)
Definition debug.cpp:156
QCString m_lexName
Definition debug.h:106
This is an alternative implementation of QCString.
Definition qcstring.h:101
#define NON_COPYABLE(cls)
Macro to help implementing the rule of 5 for a non-copyable & movable class.
Definition construct.h:37
Definition message.h:144