%PDF- %PDF-
Direktori : /home2/vacivi36/vittasync.vacivitta.com.br/vittasync/node/src/ |
Current File : //home2/vacivi36/vittasync.vacivitta.com.br/vittasync/node/src/node_threadsafe_cow-inl.h |
#ifndef SRC_NODE_THREADSAFE_COW_INL_H_ #define SRC_NODE_THREADSAFE_COW_INL_H_ #if defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS namespace node { template <typename T> T* CopyOnWrite<T>::write() { if (data_.use_count() > 1l) { data_ = std::make_shared<T>(*data_); } return data_.get(); } template <typename T> ThreadsafeCopyOnWrite<T>::Read::Read(const ThreadsafeCopyOnWrite<T>* cow) : cow_(cow), lock_(cow->impl_->mutex) {} template <typename T> const T& ThreadsafeCopyOnWrite<T>::Read::operator*() const { return cow_->impl_->data; } template <typename T> const T* ThreadsafeCopyOnWrite<T>::Read::operator->() const { return &cow_->impl_->data; } template <typename T> ThreadsafeCopyOnWrite<T>::Write::Write(ThreadsafeCopyOnWrite<T>* cow) : cow_(cow), impl_(cow->impl_.write()), lock_(impl_->mutex) {} template <typename T> T& ThreadsafeCopyOnWrite<T>::Write::operator*() { return impl_->data; } template <typename T> T* ThreadsafeCopyOnWrite<T>::Write::operator->() { return &impl_->data; } template <typename T> ThreadsafeCopyOnWrite<T>::Impl::Impl(const Impl& other) { RwLock::ScopedReadLock lock(other.mutex); data = other.data; } } // namespace node #endif // defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS #endif // SRC_NODE_THREADSAFE_COW_INL_H_