2024-05-28 15:55:24 -04:00
|
|
|
/* A very simple string class.
|
2025-01-02 11:59:57 +01:00
|
|
|
Copyright (C) 2015-2025 Free Software Foundation, Inc.
|
2024-05-28 15:55:24 -04:00
|
|
|
|
|
|
|
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 */
|