thread_safe#

Include dependency graph for thread_safe.h:

digraph {
    graph [bgcolor="#00000000"]
    node [shape=rectangle style=filled fillcolor="#FFFFFF" font=Helvetica padding=2]
    edge [color="#1414CE"]
    "3" [label="atomic" tooltip="atomic"]
    "5" [label="functional" tooltip="functional"]
    "16" [label="variant" tooltip="variant"]
    "13" [label="string" tooltip="string"]
    "6" [label="map" tooltip="map"]
    "9" [label="utility.h" tooltip="utility.h"]
    "14" [label="string_view" tooltip="string_view"]
    "4" [label="condition_variable" tooltip="condition_variable"]
    "12" [label="optional" tooltip="optional"]
    "8" [label="vector" tooltip="vector"]
    "2" [label="array" tooltip="array"]
    "7" [label="mutex" tooltip="mutex"]
    "15" [label="type_traits" tooltip="type_traits"]
    "10" [label="algorithm" tooltip="algorithm"]
    "11" [label="memory" tooltip="memory"]
    "1" [label="src/thread_safe.h" tooltip="src/thread_safe.h" fillcolor="#BFBFBF"]
    "9" -> "10" [dir=forward tooltip="include"]
    "9" -> "4" [dir=forward tooltip="include"]
    "9" -> "11" [dir=forward tooltip="include"]
    "9" -> "7" [dir=forward tooltip="include"]
    "9" -> "12" [dir=forward tooltip="include"]
    "9" -> "13" [dir=forward tooltip="include"]
    "9" -> "14" [dir=forward tooltip="include"]
    "9" -> "15" [dir=forward tooltip="include"]
    "9" -> "16" [dir=forward tooltip="include"]
    "9" -> "8" [dir=forward tooltip="include"]
    "1" -> "2" [dir=forward tooltip="include"]
    "1" -> "3" [dir=forward tooltip="include"]
    "1" -> "4" [dir=forward tooltip="include"]
    "1" -> "5" [dir=forward tooltip="include"]
    "1" -> "6" [dir=forward tooltip="include"]
    "1" -> "7" [dir=forward tooltip="include"]
    "1" -> "8" [dir=forward tooltip="include"]
    "1" -> "9" [dir=forward tooltip="include"]
}

This graph shows which files directly or indirectly include thread_safe.h:

digraph {
    graph [bgcolor="#00000000"]
    node [shape=rectangle style=filled fillcolor="#FFFFFF" font=Helvetica padding=2]
    edge [color="#1414CE"]
    "50" [label="src/platform/macos/av_img_t.h" tooltip="src/platform/macos/av_img_t.h"]
    "13" [label="src/globals.h" tooltip="src/globals.h"]
    "5" [label="src/stream.cpp" tooltip="src/stream.cpp"]
    "45" [label="src/platform/linux/graphics.h" tooltip="src/platform/linux/graphics.h"]
    "30" [label="src/platform/linux/vaapi.cpp" tooltip="src/platform/linux/vaapi.cpp"]
    "26" [label="src/nvenc/nvenc_base.h" tooltip="src/nvenc/nvenc_base.h"]
    "29" [label="src/platform/linux/kmsgrab.cpp" tooltip="src/platform/linux/kmsgrab.cpp"]
    "34" [label="src/platform/windows/display.h" tooltip="src/platform/windows/display.h"]
    "38" [label="src/nvhttp.h" tooltip="src/nvhttp.h"]
    "2" [label="src/audio.h" tooltip="src/audio.h"]
    "9" [label="src/entry_handler.cpp" tooltip="src/entry_handler.cpp"]
    "52" [label="src/platform/macos/microphone.mm" tooltip="src/platform/macos/microphone.mm"]
    "17" [label="src/platform/windows/input.cpp" tooltip="src/platform/windows/input.cpp"]
    "58" [label="src/rtsp.h" tooltip="src/rtsp.h"]
    "43" [label="src/nvenc/nvenc_utils.h" tooltip="src/nvenc/nvenc_utils.h"]
    "6" [label="src/upnp.cpp" tooltip="src/upnp.cpp"]
    "25" [label="src/video.h" tooltip="src/video.h"]
    "15" [label="src/input.cpp" tooltip="src/input.cpp"]
    "44" [label="src/platform/linux/audio.cpp" tooltip="src/platform/linux/audio.cpp"]
    "24" [label="src/platform/linux/input.cpp" tooltip="src/platform/linux/input.cpp"]
    "37" [label="src/platform/windows/display_vram.cpp" tooltip="src/platform/windows/display_vram.cpp"]
    "16" [label="src/platform/linux/x11grab.cpp" tooltip="src/platform/linux/x11grab.cpp"]
    "42" [label="src/platform/common.h" tooltip="src/platform/common.h"]
    "48" [label="src/platform/linux/vaapi.h" tooltip="src/platform/linux/vaapi.h"]
    "12" [label="src/config.cpp" tooltip="src/config.cpp"]
    "23" [label="src/input.h" tooltip="src/input.h"]
    "36" [label="src/platform/windows/display_base.cpp" tooltip="src/platform/windows/display_base.cpp"]
    "14" [label="src/globals.cpp" tooltip="src/globals.cpp"]
    "47" [label="src/platform/linux/wayland.cpp" tooltip="src/platform/linux/wayland.cpp"]
    "21" [label="src/httpcommon.h" tooltip="src/httpcommon.h"]
    "56" [label="src/process.h" tooltip="src/process.h"]
    "35" [label="src/platform/windows/display_ram.cpp" tooltip="src/platform/windows/display_ram.cpp"]
    "54" [label="src/platform/windows/audio.cpp" tooltip="src/platform/windows/audio.cpp"]
    "55" [label="src/process.cpp" tooltip="src/process.cpp"]
    "28" [label="src/platform/linux/cuda.cpp" tooltip="src/platform/linux/cuda.cpp"]
    "10" [label="src/main.cpp" tooltip="src/main.cpp"]
    "11" [label="src/entry_handler.h" tooltip="src/entry_handler.h"]
    "57" [label="src/upnp.h" tooltip="src/upnp.h"]
    "51" [label="src/platform/macos/nv12_zero_device.h" tooltip="src/platform/macos/nv12_zero_device.h"]
    "20" [label="src/platform/macos/misc.mm" tooltip="src/platform/macos/misc.mm"]
    "39" [label="src/platform/linux/publish.cpp" tooltip="src/platform/linux/publish.cpp"]
    "18" [label="src/platform/windows/misc.cpp" tooltip="src/platform/windows/misc.cpp"]
    "4" [label="src/stream.h" tooltip="src/stream.h"]
    "53" [label="src/platform/macos/input.cpp" tooltip="src/platform/macos/input.cpp"]
    "8" [label="src/confighttp.cpp" tooltip="src/confighttp.cpp"]
    "41" [label="src/platform/windows/publish.cpp" tooltip="src/platform/windows/publish.cpp"]
    "3" [label="src/audio.cpp" tooltip="src/audio.cpp"]
    "19" [label="src/video.cpp" tooltip="src/video.cpp"]
    "33" [label="src/platform/macos/nv12_zero_device.cpp" tooltip="src/platform/macos/nv12_zero_device.cpp"]
    "27" [label="src/platform/linux/graphics.cpp" tooltip="src/platform/linux/graphics.cpp"]
    "7" [label="src/confighttp.h" tooltip="src/confighttp.h"]
    "40" [label="src/platform/macos/publish.cpp" tooltip="src/platform/macos/publish.cpp"]
    "22" [label="src/httpcommon.cpp" tooltip="src/httpcommon.cpp"]
    "31" [label="src/platform/linux/wlgrab.cpp" tooltip="src/platform/linux/wlgrab.cpp"]
    "32" [label="src/platform/macos/display.mm" tooltip="src/platform/macos/display.mm"]
    "1" [label="src/thread_safe.h" tooltip="src/thread_safe.h" fillcolor="#BFBFBF"]
    "49" [label="src/platform/linux/x11grab.h" tooltip="src/platform/linux/x11grab.h"]
    "46" [label="src/platform/linux/wayland.h" tooltip="src/platform/linux/wayland.h"]
    "50" -> "32" [dir=back tooltip="include"]
    "50" -> "51" [dir=back tooltip="include"]
    "13" -> "3" [dir=back tooltip="include"]
    "13" -> "8" [dir=back tooltip="include"]
    "13" -> "9" [dir=back tooltip="include"]
    "13" -> "14" [dir=back tooltip="include"]
    "13" -> "15" [dir=back tooltip="include"]
    "13" -> "10" [dir=back tooltip="include"]
    "13" -> "16" [dir=back tooltip="include"]
    "13" -> "17" [dir=back tooltip="include"]
    "13" -> "18" [dir=back tooltip="include"]
    "13" -> "5" [dir=back tooltip="include"]
    "13" -> "6" [dir=back tooltip="include"]
    "13" -> "19" [dir=back tooltip="include"]
    "45" -> "27" [dir=back tooltip="include"]
    "45" -> "28" [dir=back tooltip="include"]
    "45" -> "29" [dir=back tooltip="include"]
    "45" -> "30" [dir=back tooltip="include"]
    "45" -> "46" [dir=back tooltip="include"]
    "45" -> "47" [dir=back tooltip="include"]
    "45" -> "16" [dir=back tooltip="include"]
    "26" -> "19" [dir=back tooltip="include"]
    "34" -> "35" [dir=back tooltip="include"]
    "34" -> "36" [dir=back tooltip="include"]
    "34" -> "37" [dir=back tooltip="include"]
    "38" -> "12" [dir=back tooltip="include"]
    "38" -> "8" [dir=back tooltip="include"]
    "38" -> "22" [dir=back tooltip="include"]
    "38" -> "10" [dir=back tooltip="include"]
    "38" -> "39" [dir=back tooltip="include"]
    "38" -> "40" [dir=back tooltip="include"]
    "38" -> "41" [dir=back tooltip="include"]
    "38" -> "6" [dir=back tooltip="include"]
    "2" -> "3" [dir=back tooltip="include"]
    "2" -> "4" [dir=back tooltip="include"]
    "58" -> "12" [dir=back tooltip="include"]
    "58" -> "8" [dir=back tooltip="include"]
    "58" -> "22" [dir=back tooltip="include"]
    "58" -> "56" [dir=back tooltip="include"]
    "58" -> "6" [dir=back tooltip="include"]
    "43" -> "37" [dir=back tooltip="include"]
    "25" -> "10" [dir=back tooltip="include"]
    "25" -> "26" [dir=back tooltip="include"]
    "25" -> "27" [dir=back tooltip="include"]
    "25" -> "28" [dir=back tooltip="include"]
    "25" -> "29" [dir=back tooltip="include"]
    "25" -> "30" [dir=back tooltip="include"]
    "25" -> "31" [dir=back tooltip="include"]
    "25" -> "16" [dir=back tooltip="include"]
    "25" -> "32" [dir=back tooltip="include"]
    "25" -> "33" [dir=back tooltip="include"]
    "25" -> "34" [dir=back tooltip="include"]
    "25" -> "36" [dir=back tooltip="include"]
    "25" -> "37" [dir=back tooltip="include"]
    "25" -> "4" [dir=back tooltip="include"]
    "25" -> "19" [dir=back tooltip="include"]
    "42" -> "3" [dir=back tooltip="include"]
    "42" -> "12" [dir=back tooltip="include"]
    "42" -> "8" [dir=back tooltip="include"]
    "42" -> "9" [dir=back tooltip="include"]
    "42" -> "22" [dir=back tooltip="include"]
    "42" -> "23" [dir=back tooltip="include"]
    "42" -> "15" [dir=back tooltip="include"]
    "42" -> "43" [dir=back tooltip="include"]
    "42" -> "44" [dir=back tooltip="include"]
    "42" -> "45" [dir=back tooltip="include"]
    "42" -> "29" [dir=back tooltip="include"]
    "42" -> "24" [dir=back tooltip="include"]
    "42" -> "39" [dir=back tooltip="include"]
    "42" -> "30" [dir=back tooltip="include"]
    "42" -> "48" [dir=back tooltip="include"]
    "42" -> "47" [dir=back tooltip="include"]
    "42" -> "31" [dir=back tooltip="include"]
    "42" -> "49" [dir=back tooltip="include"]
    "42" -> "50" [dir=back tooltip="include"]
    "42" -> "16" [dir=back tooltip="include"]
    "42" -> "32" [dir=back tooltip="include"]
    "42" -> "52" [dir=back tooltip="include"]
    "42" -> "53" [dir=back tooltip="include"]
    "42" -> "20" [dir=back tooltip="include"]
    "42" -> "51" [dir=back tooltip="include"]
    "42" -> "40" [dir=back tooltip="include"]
    "42" -> "54" [dir=back tooltip="include"]
    "42" -> "34" [dir=back tooltip="include"]
    "42" -> "36" [dir=back tooltip="include"]
    "42" -> "17" [dir=back tooltip="include"]
    "42" -> "18" [dir=back tooltip="include"]
    "42" -> "41" [dir=back tooltip="include"]
    "42" -> "55" [dir=back tooltip="include"]
    "42" -> "56" [dir=back tooltip="include"]
    "42" -> "57" [dir=back tooltip="include"]
    "42" -> "25" [dir=back tooltip="include"]
    "42" -> "19" [dir=back tooltip="include"]
    "48" -> "29" [dir=back tooltip="include"]
    "48" -> "31" [dir=back tooltip="include"]
    "48" -> "16" [dir=back tooltip="include"]
    "23" -> "15" [dir=back tooltip="include"]
    "23" -> "24" [dir=back tooltip="include"]
    "23" -> "5" [dir=back tooltip="include"]
    "23" -> "25" [dir=back tooltip="include"]
    "23" -> "19" [dir=back tooltip="include"]
    "21" -> "8" [dir=back tooltip="include"]
    "21" -> "9" [dir=back tooltip="include"]
    "21" -> "22" [dir=back tooltip="include"]
    "21" -> "10" [dir=back tooltip="include"]
    "56" -> "8" [dir=back tooltip="include"]
    "56" -> "22" [dir=back tooltip="include"]
    "56" -> "10" [dir=back tooltip="include"]
    "56" -> "55" [dir=back tooltip="include"]
    "56" -> "5" [dir=back tooltip="include"]
    "11" -> "12" [dir=back tooltip="include"]
    "11" -> "9" [dir=back tooltip="include"]
    "11" -> "13" [dir=back tooltip="include"]
    "11" -> "10" [dir=back tooltip="include"]
    "11" -> "20" [dir=back tooltip="include"]
    "11" -> "18" [dir=back tooltip="include"]
    "57" -> "10" [dir=back tooltip="include"]
    "57" -> "6" [dir=back tooltip="include"]
    "51" -> "32" [dir=back tooltip="include"]
    "51" -> "33" [dir=back tooltip="include"]
    "4" -> "5" [dir=back tooltip="include"]
    "4" -> "6" [dir=back tooltip="include"]
    "7" -> "8" [dir=back tooltip="include"]
    "7" -> "9" [dir=back tooltip="include"]
    "7" -> "10" [dir=back tooltip="include"]
    "7" -> "6" [dir=back tooltip="include"]
    "1" -> "2" [dir=back tooltip="include"]
    "1" -> "3" [dir=back tooltip="include"]
    "1" -> "7" [dir=back tooltip="include"]
    "1" -> "11" [dir=back tooltip="include"]
    "1" -> "21" [dir=back tooltip="include"]
    "1" -> "23" [dir=back tooltip="include"]
    "1" -> "38" [dir=back tooltip="include"]
    "1" -> "42" [dir=back tooltip="include"]
    "1" -> "44" [dir=back tooltip="include"]
    "1" -> "41" [dir=back tooltip="include"]
    "1" -> "58" [dir=back tooltip="include"]
    "1" -> "5" [dir=back tooltip="include"]
    "1" -> "25" [dir=back tooltip="include"]
    "49" -> "16" [dir=back tooltip="include"]
    "46" -> "28" [dir=back tooltip="include"]
    "46" -> "29" [dir=back tooltip="include"]
    "46" -> "47" [dir=back tooltip="include"]
    "46" -> "31" [dir=back tooltip="include"]
}

todo

namespace safe#

Typedefs

template<class T>
using alarm_t = std::shared_ptr<alarm_raw_t<T>>#
using mail_t = std::shared_ptr<mail_raw_t>#
using signal_t = event_t<bool>#

Functions

inline void cleanup(mail_raw_t*)#
template<class T>
inline auto lock(const std::weak_ptr<void> &wp)#
template<class T>
alarm_t<T> make_alarm()#
template<class T, class F_Construct, class F_Destruct>
auto make_shared(F_Construct &&fc, F_Destruct &&fd)#
template<class T>
class alarm_raw_t#

Public Types

using status_t = util::optional_t<T>#

Public Functions

inline void reset()#
inline void ring(const status_t &status)#
inline void ring(status_t &&status)#
inline status_t &status()#
inline const status_t &status() const#
inline auto wait()#
template<class Pred>
inline auto wait(Pred &&pred)#
template<class Rep, class Period>
inline auto wait_for(const std::chrono::duration<Rep, Period> &rel_time)#
template<class Rep, class Period, class Pred>
inline auto wait_for(const std::chrono::duration<Rep, Period> &rel_time, Pred &&pred)#
template<class Rep, class Period>
inline auto wait_until(const std::chrono::duration<Rep, Period> &rel_time)#
template<class Rep, class Period, class Pred>
inline auto wait_until(const std::chrono::duration<Rep, Period> &rel_time, Pred &&pred)#

Private Members

std::condition_variable _cv#
std::mutex _lock#
bool _rang = {false}#
status_t _status = {util::false_v<status_t>}#
template<class T>
class event_t#

Public Types

using status_t = util::optional_t<T>#

Public Functions

inline bool peek()#
inline status_t pop()#
template<class Rep, class Period>
inline status_t pop(std::chrono::duration<Rep, Period> delay)#
template<class ...Args>
inline void raise(Args&&... args)#
inline void reset()#
inline bool running() const#
inline void stop()#
inline status_t view()#
template<class Rep, class Period>
inline status_t view(std::chrono::duration<Rep, Period> delay)#

Private Members

bool _continue = {true}#
std::condition_variable _cv#
std::mutex _lock#
status_t _status = {util::false_v<status_t>}#
class mail_raw_t : public std::enable_shared_from_this<mail_raw_t>#

Inheritence diagram for safe::mail_raw_t:

digraph {
    graph [bgcolor="#00000000"]
    node [shape=rectangle style=filled fillcolor="#FFFFFF" font=Helvetica padding=2]
    edge [color="#1414CE"]
    "2" [label="std::enable_shared_from_this< mail_raw_t >" tooltip="std::enable_shared_from_this< mail_raw_t >"]
    "1" [label="safe::mail_raw_t" tooltip="safe::mail_raw_t" fillcolor="#BFBFBF"]
    "1" -> "2" [dir=forward tooltip="public-inheritance"]
}

Collaboration diagram for safe::mail_raw_t:

digraph {
    graph [bgcolor="#00000000"]
    node [shape=rectangle style=filled fillcolor="#FFFFFF" font=Helvetica padding=2]
    edge [color="#1414CE"]
    "2" [label="std::enable_shared_from_this< mail_raw_t >" tooltip="std::enable_shared_from_this< mail_raw_t >"]
    "1" [label="safe::mail_raw_t" tooltip="safe::mail_raw_t" fillcolor="#BFBFBF"]
    "1" -> "2" [dir=forward tooltip="public-inheritance"]
}

Public Types

template<class T>
using event_t = std::shared_ptr<post_t<event_t<T>>>#
template<class T>
using queue_t = std::shared_ptr<post_t<queue_t<T>>>#

Public Functions

inline void cleanup()#
template<class T>
inline event_t<T> event(const std::string_view &id)#
template<class T>
inline queue_t<T> queue(const std::string_view &id)#

Public Members

std::map<std::string, std::weak_ptr<void>, std::less<>> id_to_post#
std::mutex mutex#
template<class T>
class post_t : public T#

Inheritence diagram for safe::post_t:

digraph {
    graph [bgcolor="#00000000"]
    node [shape=rectangle style=filled fillcolor="#FFFFFF" font=Helvetica padding=2]
    edge [color="#1414CE"]
    "2" [label="T" tooltip="T"]
    "1" [label="safe::post_t< T >" tooltip="safe::post_t< T >" fillcolor="#BFBFBF"]
    "1" -> "2" [dir=forward tooltip="public-inheritance"]
}

Collaboration diagram for safe::post_t:

digraph {
    graph [bgcolor="#00000000"]
    node [shape=rectangle style=filled fillcolor="#FFFFFF" font=Helvetica padding=2]
    edge [color="#1414CE"]
    "2" [label="T" tooltip="T"]
    "1" [label="safe::post_t< T >" tooltip="safe::post_t< T >" fillcolor="#BFBFBF"]
    "1" -> "2" [dir=forward tooltip="public-inheritance"]
}

Public Functions

template<class ...Args>
inline post_t(mail_t mail, Args&&... args)#
inline ~post_t()#

Public Members

mail_t mail#
template<class T>
class queue_t#

Public Types

using status_t = util::optional_t<T>#

Public Functions

inline bool peek()#
inline status_t pop()#
template<class Rep, class Period>
inline status_t pop(std::chrono::duration<Rep, Period> delay)#
inline queue_t(std::uint32_t max_elements = 32)#
template<class ...Args>
inline void raise(Args&&... args)#
inline bool running() const#
inline void stop()#
inline std::vector<T> &unsafe()#

Private Members

bool _continue = {true}#
std::condition_variable _cv#
std::mutex _lock#
std::uint32_t _max_elements#
std::vector<T> _queue#
template<class T>
class shared_t#

Public Types

using construct_f = std::function<int(element_type&)>#
using destruct_f = std::function<void(element_type&)>#
using element_type = T#

Public Functions

inline ptr_t ref()#
template<class FC, class FD>
inline shared_t(FC &&fc, FD &&fd)#

Private Members

construct_f _construct#
std::uint32_t _count#
destruct_f _destruct#
std::mutex _lock#
std::array<std::uint8_t, sizeof(element_type)> _object_buf#
struct ptr_t#

Collaboration diagram for safe::shared_t::ptr_t:

digraph {
    graph [bgcolor="#00000000"]
    node [shape=rectangle style=filled fillcolor="#FFFFFF" font=Helvetica padding=2]
    edge [color="#1414CE"]
    "1" [label="safe::shared_t< T >::ptr_t" tooltip="safe::shared_t< T >::ptr_t" fillcolor="#BFBFBF"]
    "2" [label="safe::shared_t< T >" tooltip="safe::shared_t< T >"]
    "1" -> "2" [dir=forward tooltip="usage"]
}

Public Functions

inline element_type *get() const#
inline operator bool() const#
inline element_type *operator->()#
inline ptr_t &operator=(const ptr_t &ptr) noexcept#
inline ptr_t &operator=(ptr_t &&ptr) noexcept#
inline ptr_t()#
inline ptr_t(const ptr_t &ptr) noexcept#
inline ptr_t(ptr_t &&ptr) noexcept#
inline explicit ptr_t(shared_t *owner)#
inline void release()#
inline ~ptr_t()#

Public Members

shared_t *owner#