mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2025-03-07 13:39:43 +08:00
gdb::optional: Add observers
Currently, gdb::optional is really minimal and can only be used for lazy initialization. There's no way to get at the value contained inside the optinal. This commit corrects that, by adding observer methods, mostly copied from libstdc++'s implementation of C++17 std::optional. This will be used in the following patch. gdb/ChangeLog: 2017-04-04 Pedro Alves <palves@redhat.com> * common/gdb_optional.h (gdb::optiona): Add operator->, operator*, operator bool, has_value and get methods.
This commit is contained in:
parent
fff8551cf5
commit
d194f1fe51
@ -1,3 +1,8 @@
|
||||
2017-04-04 Pedro Alves <palves@redhat.com>
|
||||
|
||||
* common/gdb_optional.h (gdb::optiona): Add operator->, operator*,
|
||||
operator bool, has_value and get methods.
|
||||
|
||||
2017-04-04 Pedro Alves <palves@redhat.com>
|
||||
|
||||
* dwarf2read.c (struct file_entry): Add ctors, and initialize all
|
||||
|
@ -61,6 +61,31 @@ class optional
|
||||
m_instantiated = true;
|
||||
}
|
||||
|
||||
/* Observers. */
|
||||
constexpr const T *operator-> () const
|
||||
{ return std::addressof (this->get ()); }
|
||||
|
||||
T *operator-> ()
|
||||
{ return std::addressof (this->get ()); }
|
||||
|
||||
constexpr const T &operator* () const &
|
||||
{ return this->get (); }
|
||||
|
||||
T &operator* () &
|
||||
{ return this->get (); }
|
||||
|
||||
T &&operator* () &&
|
||||
{ return std::move (this->get ()); }
|
||||
|
||||
constexpr const T &&operator* () const &&
|
||||
{ return std::move (this->get ()); }
|
||||
|
||||
constexpr explicit operator bool () const noexcept
|
||||
{ return m_instantiated; }
|
||||
|
||||
constexpr bool has_value () const noexcept
|
||||
{ return m_instantiated; }
|
||||
|
||||
private:
|
||||
|
||||
/* Destroy the object. */
|
||||
@ -71,6 +96,10 @@ class optional
|
||||
m_item.~T ();
|
||||
}
|
||||
|
||||
/* The get operations have m_instantiated as a precondition. */
|
||||
T &get () noexcept { return m_item; }
|
||||
constexpr const T &get () const noexcept { return m_item; }
|
||||
|
||||
/* The object. */
|
||||
union
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user