17#ifndef TBBvtkSMPThreadLocalImpl_h
18#define TBBvtkSMPThreadLocalImpl_h
23#pragma push_macro("__TBB_NO_IMPLICIT_LINKAGE")
24#define __TBB_NO_IMPLICIT_LINKAGE 1
27#include <tbb/enumerable_thread_specific.h>
30#pragma pop_macro("__TBB_NO_IMPLICIT_LINKAGE")
46 typedef tbb::enumerable_thread_specific<T> TLS;
47 typedef typename TLS::iterator TLSIter;
58 T&
Local()
override {
return this->Internal.local(); }
60 size_t size()
const override {
return this->Internal.size(); }
69 return this->Iter ==
static_cast<ItImpl*
>(other)->Iter;
85 std::unique_ptr<ItImplAbstract>
begin() override
88 auto iter = std::unique_ptr<ItImpl>(
new ItImpl());
89 iter->Iter = this->Internal.begin();
91 std::unique_ptr<ItImplAbstract> abstractIt(std::move(iter));
95 std::unique_ptr<ItImplAbstract>
end()
override
98 auto iter = std::unique_ptr<ItImpl>(
new ItImpl());
99 iter->Iter = this->Internal.end();
101 std::unique_ptr<ItImplAbstract> abstractIt(std::move(iter));
ItImpl & operator=(const ItImpl &)=default
virtual std::unique_ptr< ItImpl > begin()=0
virtual ItImpl * CloneImpl() const override
T * GetContentPtr() override
T & GetContent() override
void Increment() override
bool Compare(ItImplAbstract *other) override
std::unique_ptr< ItImplAbstract > end() override
size_t size() const override
vtkSMPThreadLocalImpl(const T &exemplar)
Specialization of tuple ranges and iterators for vtkAOSDataArrayTemplate.