6 #ifndef STDThreadvtkSMPThreadLocalImpl_h
7 #define STDThreadvtkSMPThreadLocalImpl_h
11 #include "SMP/STDThread/vtkSMPToolsImpl.txx"
22 VTK_ABI_NAMESPACE_BEGIN
31 : Backend(GetNumberOfThreadsSTDThread())
36 : Backend(GetNumberOfThreadsSTDThread())
54 T* local =
reinterpret_cast<T*
>(ptr);
57 local =
new T(this->Exemplar);
63 size_t size()
const override {
return this->Backend.GetSize(); }
70 bool Compare(ItImplAbstract* other)
override
72 return this->Impl ==
static_cast<ItImpl*
>(other)->Impl;
75 T&
GetContent()
override {
return *
reinterpret_cast<T*
>(this->Impl.GetStorage()); }
77 T*
GetContentPtr()
override {
return reinterpret_cast<T*
>(this->Impl.GetStorage()); }
88 std::unique_ptr<ItImplAbstract>
begin() override
90 auto it = std::make_unique<ItImpl>();
91 it->Impl.SetThreadSpecificStorage(this->Backend);
92 it->Impl.SetToBegin();
96 std::unique_ptr<ItImplAbstract>
end()
override
98 auto it = std::make_unique<ItImpl>();
99 it->Impl.SetThreadSpecificStorage(this->Backend);
113 VTK_ABI_NAMESPACE_END
T & GetContent() override
virtual std::unique_ptr< ItImpl > begin()=0
void * StoragePointerType
bool Compare(ItImplAbstract *other) override
ItImpl & operator=(const ItImpl &)=default
Specialization of tuple ranges and iterators for vtkAOSDataArrayTemplate.
size_t size() const override
T * GetContentPtr() override
std::unique_ptr< ItImplAbstract > end() override
vtkSMPThreadLocalImpl(const T &exemplar)
ItImpl * CloneImpl() const override
StoragePointerType & GetStorage() const
void Increment() override
void SetThreadSpecificStorage(ThreadSpecific &threadSpecifc)
~vtkSMPThreadLocalImpl() override