5#ifndef TBBvtkSMPThreadLocalImpl_h
6#define TBBvtkSMPThreadLocalImpl_h
11#pragma push_macro("__TBB_NO_IMPLICIT_LINKAGE")
12#define __TBB_NO_IMPLICIT_LINKAGE 1
15#include <tbb/enumerable_thread_specific.h>
18#pragma pop_macro("__TBB_NO_IMPLICIT_LINKAGE")
30VTK_ABI_NAMESPACE_BEGIN
35 typedef tbb::enumerable_thread_specific<T> TLS;
36 typedef typename TLS::iterator TLSIter;
47 T&
Local()
override {
return this->Internal.local(); }
49 size_t size()
const override {
return this->Internal.size(); }
58 return this->Iter ==
static_cast<ItImpl*
>(other)->Iter;
74 std::unique_ptr<ItImplAbstract>
begin() override
76 auto iter = std::make_unique<ItImpl>();
77 iter->Iter = this->Internal.begin();
81 std::unique_ptr<ItImplAbstract>
end()
override
83 auto iter = std::make_unique<ItImpl>();
84 iter->Iter = this->Internal.end();
ItImpl & operator=(const ItImpl &)=default
virtual std::unique_ptr< ItImpl > begin()=0
T * GetContentPtr() override
T & GetContent() override
ItImpl * CloneImpl() const override
void Increment() override
bool Compare(ItImplAbstract *other) override
std::unique_ptr< ItImplAbstract > end() override
size_t size() const override
vtkSMPThreadLocalImpl()=default
vtkSMPThreadLocalImpl(const T &exemplar)
Specialization of tuple ranges and iterators for vtkAOSDataArrayTemplate.