0.5.4
C++ to UML diagram generator based on Clang
Loading...
Searching...
No Matches
Public Types | Public Member Functions | Private Attributes | List of all members
clanguml::common::optional_ref< T > Class Template Reference

Simple optional reference type. More...

Detailed Description

template<typename T>
class clanguml::common::optional_ref< T >

Simple optional reference type.

This class template provides a convenient way around the std::optional limitation of not allowing references. This is useful for storing references to diagram elements in various views, and writing methods which return can return an empty value if the diagram does not contain something.

This is not an owning type - it will not accept an rvalue - the actual value must be stored somewhere else as lvalue or some kind of smart pointer.

Note
Probably unsafe - do not use at home.
Template Parameters
TType of reference

Definition at line 112 of file types.h.

#include <types.h>

Public Types

using optional_type = T
 

Public Member Functions

 optional_ref ()=default
 
 optional_ref (T *value)
 
 optional_ref (const T *value)
 
 optional_ref (T &value)
 
 optional_ref (const T &value)
 
 optional_ref (optional_ref &right)
 
template<typename V , typename = std::enable_if< std::is_base_of_v<optional_type, typename V::optional_type> || std::is_same_v<optional_type, typename V::optional_type>>>
 optional_ref (const V &t)
 
template<typename V , typename = std::enable_if< std::is_base_of_v<optional_type, typename V::optional_type> || std::is_same_v<optional_type, typename V::optional_type>>>
 optional_ref (V &&t)
 
template<typename V , typename = std::enable_if<std::is_base_of_v<optional_type, V>>>
 optional_ref (const std::reference_wrapper< V > &t)
 
optional_refoperator= (const optional_ref &right)
 
optional_refoperator= (optional_ref &&right) noexcept
 
bool has_value () const noexcept
 
 operator bool () const noexcept
 
const T & value () const
 
T & value ()
 
T & operator* ()
 
const T & operator* () const
 
void reset ()
 
T * get () const
 

Private Attributes

T * value_ {nullptr}
 

Member Typedef Documentation

◆ optional_type

template<typename T >
using clanguml::common::optional_ref< T >::optional_type = T

Definition at line 114 of file types.h.

Constructor & Destructor Documentation

◆ optional_ref() [1/9]

template<typename T >
clanguml::common::optional_ref< T >::optional_ref ( )
default

◆ optional_ref() [2/9]

template<typename T >
clanguml::common::optional_ref< T >::optional_ref ( T *  value)
inline

Definition at line 118 of file types.h.

119 : value_{value}
120 {
121 }

◆ optional_ref() [3/9]

template<typename T >
clanguml::common::optional_ref< T >::optional_ref ( const T *  value)
inline

Definition at line 123 of file types.h.

124 : value_{value}
125 {
126 }

◆ optional_ref() [4/9]

template<typename T >
clanguml::common::optional_ref< T >::optional_ref ( T &  value)
inline

Definition at line 128 of file types.h.

129 : value_{&value}
130 {
131 }

◆ optional_ref() [5/9]

template<typename T >
clanguml::common::optional_ref< T >::optional_ref ( const T &  value)
inline

Definition at line 133 of file types.h.

134 : value_{&value}
135 {
136 }

◆ optional_ref() [6/9]

template<typename T >
clanguml::common::optional_ref< T >::optional_ref ( optional_ref< T > &  right)
inline

Definition at line 138 of file types.h.

139 : value_{right.get()}
140 {
141 }

◆ optional_ref() [7/9]

template<typename T >
template<typename V , typename = std::enable_if< std::is_base_of_v<optional_type, typename V::optional_type> || std::is_same_v<optional_type, typename V::optional_type>>>
clanguml::common::optional_ref< T >::optional_ref ( const V &  t)
inline

Definition at line 147 of file types.h.

148 : value_{t.get()}
149 {
150 }

◆ optional_ref() [8/9]

template<typename T >
template<typename V , typename = std::enable_if< std::is_base_of_v<optional_type, typename V::optional_type> || std::is_same_v<optional_type, typename V::optional_type>>>
clanguml::common::optional_ref< T >::optional_ref ( V &&  t)
inline

Definition at line 156 of file types.h.

157 : value_{t.get()}
158 {
159 t.reset();
160 }

◆ optional_ref() [9/9]

template<typename T >
template<typename V , typename = std::enable_if<std::is_base_of_v<optional_type, V>>>
clanguml::common::optional_ref< T >::optional_ref ( const std::reference_wrapper< V > &  t)
inline

Definition at line 164 of file types.h.

165 : value_{&t.get()}
166 {
167 }

Member Function Documentation

◆ get()

template<typename T >
T * clanguml::common::optional_ref< T >::get ( ) const
inline

Definition at line 218 of file types.h.

218{ return value_; }

◆ has_value()

template<typename T >
bool clanguml::common::optional_ref< T >::has_value ( ) const
inlinenoexcept

Definition at line 188 of file types.h.

188{ return value_ != nullptr; }

◆ operator bool()

template<typename T >
clanguml::common::optional_ref< T >::operator bool ( ) const
inlinenoexcept

Definition at line 190 of file types.h.

190{ return has_value(); }

◆ operator*() [1/2]

template<typename T >
T & clanguml::common::optional_ref< T >::operator* ( )
inline

Definition at line 204 of file types.h.

205 {
206 assert(value_ != nullptr);
207 return *value_;
208 }

◆ operator*() [2/2]

template<typename T >
const T & clanguml::common::optional_ref< T >::operator* ( ) const
inline

Definition at line 210 of file types.h.

211 {
212 assert(value_ != nullptr);
213 return *value_;
214 }

◆ operator=() [1/2]

template<typename T >
optional_ref & clanguml::common::optional_ref< T >::operator= ( const optional_ref< T > &  right)
inline

Definition at line 169 of file types.h.

170 {
171 if (this == &right)
172 return *this;
173
174 value_ = right.value_;
175 return *this;
176 }

◆ operator=() [2/2]

template<typename T >
optional_ref & clanguml::common::optional_ref< T >::operator= ( optional_ref< T > &&  right)
inlinenoexcept

Definition at line 178 of file types.h.

179 {
180 if (this == &right)
181 return *this;
182
183 value_ = right.value_;
184 right.reset();
185 return *this;
186 }

◆ reset()

template<typename T >
void clanguml::common::optional_ref< T >::reset ( )
inline

Definition at line 216 of file types.h.

216{ value_ = nullptr; }

◆ value() [1/2]

template<typename T >
T & clanguml::common::optional_ref< T >::value ( )
inline

Definition at line 198 of file types.h.

199 {
200 assert(value_ != nullptr);
201 return *value_;
202 }

◆ value() [2/2]

template<typename T >
const T & clanguml::common::optional_ref< T >::value ( ) const
inline

Definition at line 192 of file types.h.

193 {
194 assert(value_ != nullptr);
195 return *value_;
196 }

Member Data Documentation

◆ value_

template<typename T >
T* clanguml::common::optional_ref< T >::value_ {nullptr}
private

Definition at line 221 of file types.h.


The documentation for this class was generated from the following file: