]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blob - gdb/source-cache.h
[binutils, ARM, 4/16] BF insns infrastructure with array of relocs in struct arm_it
[thirdparty/binutils-gdb.git] / gdb / source-cache.h
1 /* Cache of styled source file text
2 Copyright (C) 2018-2019 Free Software Foundation, Inc.
3
4 This file is part of GDB.
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 of the License, or
9 (at your option) 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, see <http://www.gnu.org/licenses/>. */
18
19 #ifndef SOURCE_CACHE_H
20 #define SOURCE_CACHE_H
21
22 /* This caches highlighted source text, keyed by the source file's
23 full name. A size-limited LRU cache is used.
24
25 Highlighting depends on the GNU Source Highlight library. When not
26 available, this cache will fall back on reading plain text from the
27 appropriate file. */
28 class source_cache
29 {
30 public:
31
32 source_cache ()
33 {
34 }
35
36 /* Get the source text for the source file in symtab S. FIRST_LINE
37 and LAST_LINE are the first and last lines to return; line
38 numbers are 1-based. If the file cannot be read, false is
39 returned. Otherwise, LINES_OUT is set to the desired text. The
40 returned text may include ANSI terminal escapes. */
41 bool get_source_lines (struct symtab *s, int first_line,
42 int last_line, std::string *lines_out);
43
44 /* Remove all the items from the source cache. */
45 void clear ()
46 {
47 m_source_map.clear ();
48 }
49
50 private:
51
52 /* One element in the cache. */
53 struct source_text
54 {
55 /* The full name of the file. */
56 std::string fullname;
57 /* The contents of the file. */
58 std::string contents;
59 };
60
61 /* A helper function for get_source_lines that is used when the
62 source lines are not highlighted. The arguments and return value
63 are as for get_source_lines. */
64 bool get_plain_source_lines (struct symtab *s, int first_line,
65 int last_line, std::string *lines_out);
66 /* A helper function for get_plain_source_lines that extracts the
67 desired source lines from TEXT, putting them into LINES_OUT. The
68 arguments are as for get_source_lines. The return value is the
69 desired lines. */
70 std::string extract_lines (const struct source_text &text, int first_line,
71 int last_line);
72
73 /* The contents of the cache. */
74 std::vector<source_text> m_source_map;
75 };
76
77 /* The global source cache. */
78 extern source_cache g_source_cache;
79
80 #endif /* SOURCE_CACHE_H */