Prusa Slicer 2.6.0
Loading...
Searching...
No Matches
Slic3r::CachedObject< T > Class Template Reference

A wrapper class around arbitrary object that needs thread safe caching. More...

#include <src/libslic3r/MTUtils.hpp>

+ Collaboration diagram for Slic3r::CachedObject< T >:

Public Types

using Setter = std::function< void(T &)>
 

Public Member Functions

template<class... Args>
 CachedObject (Setter &&fn, Args &&... args)
 
template<class Fn >
void invalidate (Fn &&fn)
 
const T & get ()
 

Private Attributes

m_obj
 
bool m_valid
 
SpinMutex m_lck
 
std::function< void(T &)> m_setter
 

Detailed Description

template<class T>
class Slic3r::CachedObject< T >

A wrapper class around arbitrary object that needs thread safe caching.

Member Typedef Documentation

◆ Setter

template<class T >
using Slic3r::CachedObject< T >::Setter = std::function<void(T &)>

Constructor & Destructor Documentation

◆ CachedObject()

template<class T >
template<class... Args>
Slic3r::CachedObject< T >::CachedObject ( Setter &&  fn,
Args &&...  args 
)
inline
51 : m_obj(std::forward<Args>(args)...), m_valid(false), m_setter(fn)
52 {}
T m_obj
Definition MTUtils.hpp:39
std::function< void(T &)> m_setter
Definition MTUtils.hpp:45
bool m_valid
Definition MTUtils.hpp:40

Member Function Documentation

◆ get()

template<class T >
const T & Slic3r::CachedObject< T >::get ( )
inline
67 {
68 std::lock_guard<SpinMutex> lck(m_lck);
69 if (!m_valid) {
71 m_valid = true;
72 }
73 return m_obj;
74 }
SpinMutex m_lck
Definition MTUtils.hpp:41

References Slic3r::CachedObject< T >::m_lck, Slic3r::CachedObject< T >::m_obj, Slic3r::CachedObject< T >::m_setter, and Slic3r::CachedObject< T >::m_valid.

◆ invalidate()

template<class T >
template<class Fn >
void Slic3r::CachedObject< T >::invalidate ( Fn &&  fn)
inline
59 {
60 std::lock_guard<SpinMutex> lck(m_lck);
61 fn();
62 m_valid = false;
63 }

References Slic3r::CachedObject< T >::m_lck, and Slic3r::CachedObject< T >::m_valid.

Member Data Documentation

◆ m_lck

◆ m_obj

template<class T >
T Slic3r::CachedObject< T >::m_obj
private

◆ m_setter

template<class T >
std::function<void(T &)> Slic3r::CachedObject< T >::m_setter
private

◆ m_valid

template<class T >
bool Slic3r::CachedObject< T >::m_valid
private

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