123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134 |
- // XDWExclusiveHolder.tli
- //
- #pragma once
- #include "XDWExclusiveHolder.tlh"
- template <typename T>
- XDWExclusiveHolder <T>::XDWExclusiveHolder ()
- {
- m_pObject = NULL;
- }
- template <typename T>
- XDWExclusiveHolder <T>::~XDWExclusiveHolder ()
- {
- LockHolder Lock (this);
- delete m_pObject;
- }
- template <typename T>
- XDWExclusiveHolder <T>::XDWExclusiveHolder (T * object)
- {
- m_pObject = object;
- }
- template <typename T>
- void XDWExclusiveHolder <T>::Attach (T * object)
- {
- LockHolder Lock (this);
- delete m_pObject;
- m_pObject = object;
- }
- template <typename T>
- T * XDWExclusiveHolder <T>::Detach ()
- {
- LockHolder Lock (this);
- T * over = m_pObject;
- m_pObject = NULL;
- Release ();
- return over;
- }
- template <typename T>
- void XDWExclusiveHolder <T>::Release ()
- {
- LockHolder Lock (this);
- delete m_pObject;
- m_pObject = NULL;
- }
- template <typename T>
- XDWExclusiveHolder <T> & XDWExclusiveHolder <T>::operator = (T * object)
- {
- Attach (object);
- return *this;
- }
- template <typename T>
- bool XDWExclusiveHolder <T>::IsEmpty () const
- {
- LockHolder Lock (this);
- return (m_pObject == NULL);
- }
- template <typename T>
- XDWExclusiveHolder <T>::LockHolder::LockHolder (const XDWExclusiveHolder <T> *holder)
- {
- auto lock = new std::lock_guard < std::recursive_mutex > (holder->m_Mutex);
- m_Lock.Attach (lock);
- m_Holder = holder;
- }
- template <typename T>
- XDWExclusiveHolder <T>::LockHolder::LockHolder (const LockHolder & h)
- {
- m_Lock = h.m_Lock;
- m_Holder = h.m_Holder;
- }
- template <typename T>
- XDWExclusiveHolder <T>::LockHolder::~LockHolder ()
- {
- // m_Lock->Unlock ();
- }
- /*
- template <typename T>
- void XDWExclusiveHolder <T>::LockHolder::Unlock ()
- {
- m_Lock->Unlock ();
- }
- */
- template <typename T>
- T * XDWExclusiveHolder <T>::LockHolder::As ()
- {
- return m_Holder->m_pObject;
- }
- template <typename T>
- const T * XDWExclusiveHolder <T>::LockHolder::As () const
- {
- return m_Holder->m_pObject;
- }
- template <typename T>
- template <typename C> C * XDWExclusiveHolder <T>::LockHolder::AS ()
- {
- return m_Holder->m_pObject;
- }
- template <typename T>
- template <typename C> const C * XDWExclusiveHolder <T>::LockHolder::AS () const
- {
- return m_Holder->m_pObject;
- }
|