uvco 0.1
Loading...
Searching...
No Matches
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 ()
T & getOrDefault ()
 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
Definition async_work.h:53
uv_key_t key_
Definition async_work.h:92

◆ 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 void *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]

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

◆ operator=() [2/2]

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

◆ set()

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

Set the stored 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: