| /* A very simple string class. |
| Copyright (C) 2015-2025 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 */ |