9#ifndef SequentialvtkSMPThreadLocalImpl_h
10#define SequentialvtkSMPThreadLocalImpl_h
25VTK_ABI_NAMESPACE_BEGIN
30 typedef std::vector<T> TLS;
31 typedef typename TLS::iterator TLSIter;
50 int tid = this->GetThreadID();
51 if (!this->Initialized[tid])
53 this->Internal[tid] = this->Exemplar;
54 this->Initialized[tid] =
true;
55 ++this->NumInitialized;
57 return this->Internal[tid];
60 size_t size()
const override {
return this->NumInitialized; }
72 while (this->InitIter != this->EndIter)
85 return this->Iter ==
static_cast<ItImpl*
>(other)->Iter;
97 std::vector<bool>::iterator InitIter;
98 std::vector<bool>::iterator EndIter;
102 std::unique_ptr<ItImplAbstract>
begin() override
104 TLSIter iter = this->Internal.begin();
105 std::vector<bool>::iterator iter2 = this->Initialized.begin();
106 std::vector<bool>::iterator enditer = this->Initialized.end();
109 while (iter2 != enditer)
118 auto retVal = std::make_unique<ItImpl>();
119 retVal->InitIter = iter2;
120 retVal->EndIter = enditer;
125 std::unique_ptr<ItImplAbstract>
end()
override
127 auto retVal = std::make_unique<ItImpl>();
128 retVal->InitIter = this->Initialized.end();
129 retVal->EndIter = this->Initialized.end();
130 retVal->Iter = this->Internal.end();
136 std::vector<bool> Initialized;
137 size_t NumInitialized;
142 this->Internal.resize(this->GetNumberOfThreads());
143 this->Initialized.resize(this->GetNumberOfThreads());
144 std::fill(this->Initialized.begin(), this->Initialized.end(),
false);
147 int GetNumberOfThreads() {
return 1; }
149 int GetThreadID() {
return 0; }
152 vtkSMPThreadLocalImpl(
const vtkSMPThreadLocalImpl&) =
delete;
153 void operator=(
const vtkSMPThreadLocalImpl&) =
delete;
ItImpl & operator=(const ItImpl &)=default
virtual std::unique_ptr< ItImpl > begin()=0
bool Compare(ItImplAbstract *other) override
ItImpl * CloneImpl() const override
T * GetContentPtr() override
void Increment() override
T & GetContent() override
vtkSMPThreadLocalImpl(const T &exemplar)
std::unique_ptr< ItImplAbstract > end() override
size_t size() const override
Specialization of tuple ranges and iterators for vtkAOSDataArrayTemplate.