diff options
author | David Malcolm <dmalcolm@redhat.com> | 2024-05-28 15:55:24 -0400 |
---|---|---|
committer | David Malcolm <dmalcolm@redhat.com> | 2024-05-28 15:55:24 -0400 |
commit | 9bda2c4c81b668b1d9abbb58cc4e805ac955a639 (patch) | |
tree | df4cd9d51d62b3bc7f0343abc2ba945c1858baeb /libcpp/include/label-text.h | |
parent | fb7a943ead689e80e1ffdf6fa4e129dc155312d3 (diff) | |
download | gcc-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.h | 102 |
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 */ |