aboutsummaryrefslogtreecommitdiff
path: root/libcpp/include/label-text.h
diff options
context:
space:
mode:
authorDavid Malcolm <dmalcolm@redhat.com>2024-05-28 15:55:24 -0400
committerDavid Malcolm <dmalcolm@redhat.com>2024-05-28 15:55:24 -0400
commit9bda2c4c81b668b1d9abbb58cc4e805ac955a639 (patch)
treedf4cd9d51d62b3bc7f0343abc2ba945c1858baeb /libcpp/include/label-text.h
parentfb7a943ead689e80e1ffdf6fa4e129dc155312d3 (diff)
downloadgcc-9bda2c4c81b668b1d9abbb58cc4e805ac955a639.zip
gcc-9bda2c4c81b668b1d9abbb58cc4e805ac955a639.tar.gz
gcc-9bda2c4c81b668b1d9abbb58cc4e805ac955a639.tar.bz2
libcpp: move label_text to its own header
No functional change intended. libcpp/ChangeLog: * Makefile.in (TAGS_SOURCES): Add include/label-text.h. * include/label-text.h: New file. * include/rich-location.h: Include "label-text.h". (class label_text): Move to label-text.h. Signed-off-by: David Malcolm <dmalcolm@redhat.com>
Diffstat (limited to 'libcpp/include/label-text.h')
-rw-r--r--libcpp/include/label-text.h102
1 files changed, 102 insertions, 0 deletions
diff --git a/libcpp/include/label-text.h b/libcpp/include/label-text.h
new file mode 100644
index 0000000..13562cd
--- /dev/null
+++ b/libcpp/include/label-text.h
@@ -0,0 +1,102 @@
+/* A very simple string class.
+ Copyright (C) 2015-2024 Free Software Foundation, Inc.
+
+This program is free software; you can redistribute it and/or modify it
+under the terms of the GNU General Public License as published by the
+Free Software Foundation; either version 3, or (at your option) any
+later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; see the file COPYING3. If not see
+<http://www.gnu.org/licenses/>.
+
+ In other words, you are welcome to use, share and improve this program.
+ You are forbidden to forbid anyone else to use, share and improve
+ what you give them. Help stamp out software-hoarding! */
+
+#ifndef LIBCPP_LABEL_TEXT_H
+#define LIBCPP_LABEL_TEXT_H
+
+/* A struct for the result of range_label::get_text: a NUL-terminated buffer
+ of localized text, and a flag to determine if the caller should "free" the
+ buffer. */
+
+class label_text
+{
+public:
+ label_text ()
+ : m_buffer (NULL), m_owned (false)
+ {}
+
+ ~label_text ()
+ {
+ if (m_owned)
+ free (m_buffer);
+ }
+
+ /* Move ctor. */
+ label_text (label_text &&other)
+ : m_buffer (other.m_buffer), m_owned (other.m_owned)
+ {
+ other.release ();
+ }
+
+ /* Move assignment. */
+ label_text & operator= (label_text &&other)
+ {
+ if (m_owned)
+ free (m_buffer);
+ m_buffer = other.m_buffer;
+ m_owned = other.m_owned;
+ other.release ();
+ return *this;
+ }
+
+ /* Delete the copy ctor and copy-assignment operator. */
+ label_text (const label_text &) = delete;
+ label_text & operator= (const label_text &) = delete;
+
+ /* Create a label_text instance that borrows BUFFER from a
+ longer-lived owner. */
+ static label_text borrow (const char *buffer)
+ {
+ return label_text (const_cast <char *> (buffer), false);
+ }
+
+ /* Create a label_text instance that takes ownership of BUFFER. */
+ static label_text take (char *buffer)
+ {
+ return label_text (buffer, true);
+ }
+
+ void release ()
+ {
+ m_buffer = NULL;
+ m_owned = false;
+ }
+
+ const char *get () const
+ {
+ return m_buffer;
+ }
+
+ bool is_owner () const
+ {
+ return m_owned;
+ }
+
+private:
+ char *m_buffer;
+ bool m_owned;
+
+ label_text (char *buffer, bool owned)
+ : m_buffer (buffer), m_owned (owned)
+ {}
+};
+
+#endif /* !LIBCPP_LABEL_TEXT_H */