uvco 0.1
Loading...
Searching...
No Matches
Public Member Functions | Private Attributes | List of all members
uvco::ThreadLocalKey< T > Class Template Reference

#include <async_work.h>

Public Member Functions

 ThreadLocalKey ()
 
 ThreadLocalKey (const ThreadLocalKey &)=default
 
 ThreadLocalKey (ThreadLocalKey &&)=default
 
ThreadLocalKeyoperator= (const ThreadLocalKey &)=default
 
ThreadLocalKeyoperator= (ThreadLocalKey &&)=default
 
 ~ThreadLocalKey ()=default
 
void del ()
 
TgetOrDefault ()
 Get the stored value, or create a new one if none exists.
 
T & get ()
 Get the stored value. If none exists, this will crash.
 
void set (T &&value)
 Set the stored value.
 
void setCopy (const T &value)
 Set the stored value.
 

Private Attributes

uv_key_t key_ {}
 

Detailed Description

template<typename T>
class uvco::ThreadLocalKey< T >

Easily access per-thread data. Use get() and getOrDefault() to access the stored value.

NOTE: this inherently leaks the stored objects, unless they are destroyed using del(). in-place.

Constructor & Destructor Documentation

◆ ThreadLocalKey() [1/3]

template<typename T >
uvco::ThreadLocalKey< T >::ThreadLocalKey ( )
inline
uv_key_t key_
Definition async_work.h:92
T & get()
Get the stored value. If none exists, this will crash.
Definition async_work.h:83

◆ ThreadLocalKey() [2/3]

template<typename T >
uvco::ThreadLocalKey< T >::ThreadLocalKey ( const ThreadLocalKey< T > &  )
default

◆ ThreadLocalKey() [3/3]

template<typename T >
uvco::ThreadLocalKey< T >::ThreadLocalKey ( ThreadLocalKey< T > &&  )
default

◆ ~ThreadLocalKey()

template<typename T >
uvco::ThreadLocalKey< T >::~ThreadLocalKey ( )
default

Member Function Documentation

◆ del()

template<typename T >
void uvco::ThreadLocalKey< T >::del ( )
inline

Destruct the stored value. The key will be empty afterwards, and getOrDefault() will create a new value.

64 {
65 auto *value = uv_key_get(&key_);
66 if (value != nullptr) {
67 delete static_cast<T *>(value);
68 uv_key_set(&key_, nullptr);
69 }
70 }

◆ get()

template<typename T >
T & uvco::ThreadLocalKey< T >::get ( )
inline

Get the stored value. If none exists, this will crash.

83{ return *static_cast<T *>(uv_key_get(&key_)); }

◆ getOrDefault()

template<typename T >
T & uvco::ThreadLocalKey< T >::getOrDefault ( )
inline

Get the stored value, or create a new one if none exists.

73 {
74 auto *value = uv_key_get(&key_);
75 if (value == nullptr) {
76 value = new T{};
78 }
79 return *static_cast<T *>(value);
80 }

◆ operator=() [1/2]

◆ operator=() [2/2]

◆ set()

template<typename T >
void uvco::ThreadLocalKey< T >::set ( T &&  value)
inline

Set the stored value.

86{ getOrDefault() = std::move(value); }
T & getOrDefault()
Get the stored value, or create a new one if none exists.
Definition async_work.h:73

◆ setCopy()

template<typename T >
void uvco::ThreadLocalKey< T >::setCopy ( const T value)
inline

Set the stored value.

89{ getOrDefault() = value; }

Member Data Documentation

◆ key_

template<typename T >
uv_key_t uvco::ThreadLocalKey< T >::key_ {}
private
92{};

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