18 #ifndef OpenMPvtkSMPThreadLocalImpl_h
19 #define OpenMPvtkSMPThreadLocalImpl_h
23 #include "SMP/OpenMP/vtkSMPToolsImpl.txx"
42 : Backend(GetNumberOfThreadsOpenMP())
47 : Backend(GetNumberOfThreadsOpenMP())
65 T* local =
reinterpret_cast<T*
>(ptr);
68 ptr = local =
new T(this->Exemplar);
73 size_t size()
const override {
return this->Backend.Size(); }
80 bool Compare(ItImplAbstract* other)
override
82 return this->Impl ==
static_cast<ItImpl*
>(other)->Impl;
85 T&
GetContent()
override {
return *
reinterpret_cast<T*
>(this->Impl.GetStorage()); }
87 T*
GetContentPtr()
override {
return reinterpret_cast<T*
>(this->Impl.GetStorage()); }
98 std::unique_ptr<ItImplAbstract>
begin() override
101 auto it = std::unique_ptr<ItImpl>(
new ItImpl());
102 it->Impl.SetThreadSpecificStorage(this->Backend);
103 it->Impl.SetToBegin();
105 std::unique_ptr<ItImplAbstract> abstractIt(std::move(it));
109 std::unique_ptr<ItImplAbstract>
end()
override
112 auto it = std::unique_ptr<ItImpl>(
new ItImpl());
113 it->Impl.SetThreadSpecificStorage(this->Backend);
116 std::unique_ptr<ItImplAbstract> abstractIt(std::move(it));
vtkSMPThreadLocalImpl(const T &exemplar)
virtual std::unique_ptr< ItImpl > begin()=0
void SetThreadSpecificStorage(ThreadSpecific &threadSpecifc)
~vtkSMPThreadLocalImpl() override
ItImpl & operator=(const ItImpl &)=default
Specialization of tuple ranges and iterators for vtkAOSDataArrayTemplate.
std::unique_ptr< ItImplAbstract > end() override
T * GetContentPtr() override
size_t size() const override
void Increment() override
virtual ItImpl * CloneImpl() const override
T & GetContent() override
void * StoragePointerType
bool Compare(ItImplAbstract *other) override
StoragePointerType & GetStorage() const