aboutsummaryrefslogtreecommitdiff
path: root/gdb/ui-file.h
diff options
context:
space:
mode:
authorSimon Marchi <simon.marchi@polymtl.ca>2022-01-24 20:00:46 -0500
committerSimon Marchi <simon.marchi@polymtl.ca>2022-01-26 10:01:40 -0500
commit5d10a2041eb843fd321ce1d850cf3e0df7648bc7 (patch)
treea1bd00ecbd780dc194da8d44b713b09f10446c0a /gdb/ui-file.h
parentb583c328e71369f90f4042ac7973ce9edfdb44b3 (diff)
downloadfsf-binutils-gdb-5d10a2041eb843fd321ce1d850cf3e0df7648bc7.zip
fsf-binutils-gdb-5d10a2041eb843fd321ce1d850cf3e0df7648bc7.tar.gz
fsf-binutils-gdb-5d10a2041eb843fd321ce1d850cf3e0df7648bc7.tar.bz2
gdb: add string_file::release method
A common pattern for string_file is to want to move out the internal string buffer, because it is the result of the computation that we want to return. It is the reason why string_file::string returns a non-const reference, as explained in the comment. I think it would make sense to have a dedicated method for that instead and make string_file::string return a const reference. This allows removing the explicit std::move in the typical case. Note that compile_program::compute was missing a move, meaning that the resulting string was copied. With the new version, it's not possible to forget to move. Change-Id: Ieaefa35b73daa7930b2f3a26988b6e3b4121bb79
Diffstat (limited to 'gdb/ui-file.h')
-rw-r--r--gdb/ui-file.h20
1 files changed, 11 insertions, 9 deletions
diff --git a/gdb/ui-file.h b/gdb/ui-file.h
index c097abf..7c7b00d 100644
--- a/gdb/ui-file.h
+++ b/gdb/ui-file.h
@@ -160,17 +160,19 @@ public:
/* string_file-specific public API. */
/* Accesses the std::string containing the entire output collected
- so far.
+ so far. */
+ const std::string &string () { return m_string; }
- Returns a non-const reference so that it's easy to move the
- string contents out of the string_file. E.g.:
+ /* Return an std::string containing the entire output collected so far.
- string_file buf;
- buf.printf (....);
- buf.printf (....);
- return std::move (buf.string ());
- */
- std::string &string () { return m_string; }
+ The internal buffer is cleared, such that it's ready to build a new
+ string. */
+ std::string release ()
+ {
+ std::string ret = std::move (m_string);
+ m_string.clear ();
+ return ret;
+ }
/* Provide a few convenience methods with the same API as the
underlying std::string. */