1 | /* A class for referring to events within a diagnostic_path. |
2 | Copyright (C) 2019-2023 Free Software Foundation, Inc. |
3 | Contributed by David Malcolm <dmalcolm@redhat.com> |
4 | |
5 | This file is part of GCC. |
6 | |
7 | GCC is free software; you can redistribute it and/or modify it under |
8 | the terms of the GNU General Public License as published by the Free |
9 | Software Foundation; either version 3, or (at your option) any later |
10 | version. |
11 | |
12 | GCC is distributed in the hope that it will be useful, but WITHOUT ANY |
13 | WARRANTY; without even the implied warranty of MERCHANTABILITY or |
14 | FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
15 | for more details. |
16 | |
17 | You should have received a copy of the GNU General Public License |
18 | along with GCC; see the file COPYING3. If not see |
19 | <http://www.gnu.org/licenses/>. */ |
20 | |
21 | #ifndef GCC_DIAGNOSTIC_EVENT_ID_H |
22 | #define GCC_DIAGNOSTIC_EVENT_ID_H |
23 | |
24 | /* A class for referring to events within a diagnostic_path. |
25 | |
26 | They are stored as 0-based offsets into the events, but |
27 | printed (e.g. via %@) as 1-based numbers. |
28 | |
29 | For example, a 3-event path has event offsets 0, 1, and 2, |
30 | which would be shown to the user as "(1)", "(2)" and "(3)". |
31 | |
32 | This has its own header so that pretty-print.cc can use this |
33 | to implement "%@" without bringing in all of diagnostic_path |
34 | (which e.g. refers to "tree"). */ |
35 | |
36 | class diagnostic_event_id_t |
37 | { |
38 | public: |
39 | diagnostic_event_id_t () : m_index (UNKNOWN_EVENT_IDX) {} |
40 | diagnostic_event_id_t (int zero_based_idx) : m_index (zero_based_idx) {} |
41 | |
42 | bool known_p () const { return m_index != UNKNOWN_EVENT_IDX; } |
43 | |
44 | int one_based () const |
45 | { |
46 | gcc_assert (known_p ()); |
47 | return m_index + 1; |
48 | } |
49 | |
50 | private: |
51 | static const int UNKNOWN_EVENT_IDX = -1; |
52 | int m_index; // zero-based |
53 | }; |
54 | |
55 | /* A pointer to a diagnostic_event_id_t, for use with the "%@" format |
56 | code, which will print a 1-based representation for it, with suitable |
57 | colorization, e.g. "(1)". |
58 | The %@ format code requires that known_p be true for the event ID. */ |
59 | typedef diagnostic_event_id_t *diagnostic_event_id_ptr; |
60 | |
61 | /* A type for compactly referring to a particular thread within a |
62 | diagnostic_path. Typically there is just one thread per path, |
63 | with id 0. */ |
64 | typedef unsigned diagnostic_thread_id_t; |
65 | |
66 | #endif /* ! GCC_DIAGNOSTIC_EVENT_ID_H */ |
67 | |