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
77 auto iter = std::unique_ptr<ItImpl>(
new ItImpl());
78 iter->Iter = this->Internal.begin();
80 std::unique_ptr<ItImplAbstract> abstractIt(std::move(iter));
84 std::unique_ptr<ItImplAbstract>
end()
override
87 auto iter = std::unique_ptr<ItImpl>(
new ItImpl());
88 iter->Iter = this->Internal.end();
90 std::unique_ptr<ItImplAbstract> abstractIt(std::move(iter));
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.