1 /* Copyright (C) 2021-2023 Free Software Foundation, Inc.
2 Contributed by Oracle.
3
4 This file is part of GNU Binutils.
5
6 This program is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 3, or (at your option)
9 any later version.
10
11 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
15
16 You should have received a copy of the GNU General Public License
17 along with this program; if not, write to the Free Software
18 Foundation, 51 Franklin Street - Fifth Floor, Boston,
19 MA 02110-1301, USA. */
20
21 #ifndef _EMSG_H
22 #define _EMSG_H
23
24 #include "Emsgnum.h"
25 #include "vec.h"
26
27 //
28 // The Emsg, experiment message, has as objects I18N'd messages
29 // in a structure suitable for attaching to and fetching
30 // from a queue of such messages. It is intended to
31 // be used for collector errors, collector warnings, parser
32 // errors, and er_archive errors that are encountered when
33 // reading an experiment
34
35 class Emsg;
36 class Emsgqueue;
37 class StringBuilder;
38
39 typedef enum
40 {
41 CMSG_WARN = 0,
42 CMSG_ERROR,
43 CMSG_FATAL,
44 CMSG_COMMENT,
45 CMSG_PARSER,
46 CMSG_ARCHIVE
47 } Cmsg_warn;
48
49 class Emsg
50 {
51 public:
52 friend class Emsgqueue;
53
54 Emsg (Cmsg_warn w, const char *i18n_text);
55 Emsg (Cmsg_warn w, StringBuilder& sb);
56 Emsg (Cmsg_warn w, int f, const char *param);
57 ~Emsg ();
58
59 char *
60 get_msg ()
61 {
62 return text;
63 };
64
65 Cmsg_warn
66 get_warn ()
67 {
68 return warn;
69 };
70
71 Emsg *next; // next message in a queue
72
73 protected:
74 Cmsg_warn warn; // error/warning/...
75 int flavor; // the message flavor
76 char *par; // the input parameter string
77 char *text; // The I18N text of the message
78 };
79
80 class Emsgqueue
81 {
82 public:
83 Emsgqueue (char *);
84 ~Emsgqueue ();
85
86 void append (Emsg*);
87 Emsg *append (Cmsg_warn w, char *msg);
88 Emsg *find_msg (Cmsg_warn w, char *msg);
89 void appendqueue (Emsgqueue*);
90 Emsg *fetch (void);
91 void clear (void); // empty the queue
92 void mark_clear (void); // mark the queue empty, without touching messages
93
94 protected:
95 Emsg *first;
96 Emsg *last;
97 char *qname;
98 };
99
100 class DbeMessages
101 {
102 public:
103 DbeMessages ();
104 ~DbeMessages ();
105 Vector<Emsg*> *msgs;
106 void remove_msg (Emsg *msg);
107 Emsg *get_error ();
108 Emsg *append_msg (Cmsg_warn w, const char *fmt, ...);
109 void append_msgs (Vector<Emsg*> *lst);
110 };
111
112 #endif /* _EMSG_H */