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 Mermaid = 0x20'0000ULL,
52 Lex = 0x0000'FFFF'FF00'0000ULL, // all scanners combined
53 Lex_code = 0x0000'0000'0100'0000ULL,
54 Lex_commentcnv = 0x0000'0000'0200'0000ULL,
55 Lex_commentscan = 0x0000'0000'0400'0000ULL,
56 Lex_configimpl = 0x0000'0000'0800'0000ULL,
57 Lex_constexp = 0x0000'0000'1000'0000ULL,
58 Lex_declinfo = 0x0000'0000'2000'0000ULL,
59 Lex_defargs = 0x0000'0000'4000'0000ULL,
60 Lex_doctokenizer = 0x0000'0000'8000'0000ULL,
61 Lex_fortrancode = 0x0000'0001'0000'0000ULL,
62 Lex_fortranscanner= 0x0000'0002'0000'0000ULL,
63 Lex_lexcode = 0x0000'0004'0000'0000ULL,
64 Lex_lexscanner = 0x0000'0008'0000'0000ULL,
65 Lex_pre = 0x0000'0010'0000'0000ULL,
66 Lex_pycode = 0x0000'0020'0000'0000ULL,
67 Lex_pyscanner = 0x0000'0040'0000'0000ULL,
68 Lex_scanner = 0x0000'0080'0000'0000ULL,
69 Lex_sqlcode = 0x0000'0100'0000'0000ULL,
70 Lex_vhdlcode = 0x0000'0200'0000'0000ULL,
71 Lex_xml = 0x0000'0400'0000'0000ULL,
72 Lex_xmlcode = 0x0000'0800'0000'0000ULL
73 };
74 static void print_(DebugMask mask, int prio, fmt::string_view fmt, fmt::format_args args);
75
76 template<typename ...Args>
77 static void print(DebugMask mask,int prio,fmt::format_string<Args...> fmt, Args&&... args)
78 {
79 print_(mask,prio,fmt,fmt::make_format_args(args...));
80 }
81
82 static bool setFlagStr(const QCString &label);
83 static void setFlag(const DebugMask mask);
84 static void clearFlag(const DebugMask mask);
85 static bool isFlagSet(const DebugMask mask);
86 static void printFlags();
87 static void setPriority(int p);
88
89 static void startTimer();
90 static double elapsedTime();
91
92 private:
94 static int curPrio;
95};
96
98{
99 public:
100 DebugLex(Debug::DebugMask mask,const char *lexName,const char *fileName);
101 ~DebugLex();
103 static void print(Debug::DebugMask mask,const char *state,const char *lexName,const char *fileName);
104 private:
105
109};
110
111
112#endif
Class containing a print function for diagnostics.
Definition debug.h:26
DebugMask
Definition debug.h:28
@ Lex_fortranscanner
Definition debug.h:62
@ Lex_doctokenizer
Definition debug.h:60
@ Lex
Definition debug.h:52
@ Rtf
Definition debug.h:43
@ NoLineNo
Definition debug.h:42
@ Mermaid
Definition debug.h:51
@ Lex_pre
Definition debug.h:65
@ Lex_defargs
Definition debug.h:59
@ Alias
Definition debug.h:46
@ Lex_pycode
Definition debug.h:66
@ Layout
Definition debug.h:50
@ Markdown
Definition debug.h:37
@ Lex_declinfo
Definition debug.h:58
@ Tag
Definition debug.h:45
@ Lex_lexscanner
Definition debug.h:64
@ FilterOutput
Definition debug.h:38
@ Lex_sqlcode
Definition debug.h:69
@ Lex_code
Definition debug.h:53
@ Lex_pyscanner
Definition debug.h:67
@ 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:71
@ Stderr
Definition debug.h:49
@ Plantuml
Definition debug.h:39
@ Formula
Definition debug.h:33
@ Lex_commentcnv
Definition debug.h:54
@ Lex_vhdlcode
Definition debug.h:70
@ Lex_constexp
Definition debug.h:57
@ Lex_xmlcode
Definition debug.h:72
@ Lex_fortrancode
Definition debug.h:61
@ Lex_commentscan
Definition debug.h:55
@ Lex_lexcode
Definition debug.h:63
@ Qhp
Definition debug.h:44
@ Entries
Definition debug.h:47
@ Lex_configimpl
Definition debug.h:56
@ Preprocessor
Definition debug.h:30
@ Lex_scanner
Definition debug.h:68
@ CommentCnv
Definition debug.h:31
@ FortranFixed2Free
Definition debug.h:40
@ CommentScan
Definition debug.h:32
static void printFlags()
Definition debug.cpp:138
static DebugMask curMask
Definition debug.h:93
static void setPriority(int p)
Definition debug.cpp:128
static int curPrio
Definition debug.h:94
static void clearFlag(const DebugMask mask)
Definition debug.cpp:123
static bool isFlagSet(const DebugMask mask)
Definition debug.cpp:133
static void print(DebugMask mask, int prio, fmt::format_string< Args... > fmt, Args &&... args)
Definition debug.h:77
static double elapsedTime()
Definition debug.cpp:201
static void startTimer()
Definition debug.cpp:196
static bool setFlagStr(const QCString &label)
Definition debug.cpp:104
static void print_(DebugMask mask, int prio, fmt::string_view fmt, fmt::format_args args)
Definition debug.cpp:82
static void setFlag(const DebugMask mask)
Definition debug.cpp:118
DebugLex(Debug::DebugMask mask, const char *lexName, const char *fileName)
Definition debug.cpp:147
~DebugLex()
Definition debug.cpp:152
Debug::DebugMask m_mask
Definition debug.h:106
QCString m_fileName
Definition debug.h:108
static void print(Debug::DebugMask mask, const char *state, const char *lexName, const char *fileName)
Definition debug.cpp:157
QCString m_lexName
Definition debug.h:107
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