35 "number of elements in pointFlag and pointPosition is not equal \n";
59 maxPoints_ = pointFlag_.capacity();
60 numPoints_ = pointFlag_.size();
66 return pointPosition_;
80 if( capacity() - activeRange_.second >= numNewPoints )
83 return makeUnique<int32IndexContainer>(
85 activeRange_.second+numNewPoints);
89 if( activeRange_.first >= numNewPoints)
91 return makeUnique<int32IndexContainer>(
107 newPoints.push_back(
static_cast<int32>(i));
111 if(numAdded == numNewPoints)
113 return makeUnique<int32IndexContainer>(
120 if( numAdded <numNewPoints && capacity() - size() >= numNewPoints - numAdded )
123 for(
int32 i=numAdded; i<numNewPoints; i++)
125 newPoints.push_back(ind);
129 return makeUnique<int32IndexContainer>(
145 pointFlag_(
"pointFlag",
"pointFlag", maxPoints_, 0 ,
RESERVE()),
146 pointPosition_(
"pointPosition",
"pointPosition", maxPoints_, 0,
RESERVE()),
158 pointFlag_(
"pointFlag",
"pointFlag", maxPoints_, 0 ,
RESERVE()),
159 pointPosition_(
"pointPosition",
"pointPosition", maxPoints_, 0,
RESERVE()),
163 pointFlag_.assign(flgVec);
165 pointPosition_.assign(posVec);
167 if( !evaluatePointStructure() )
180 pointFlag_(
"pointFlag",
"pointFlag", maxPoints_, 0 ,
RESERVE()),
181 pointPosition_(
"pointPosition",
"pointPosition", maxPoints_, 0,
RESERVE()),
185 pointPosition_.assign(posVec);
190 if( !evaluatePointStructure() )
199 return pointPosition_;
224 return numActivePoints_;
230 return numActivePoints_ == numPoints_;
237 if(numPoints_==0)
return 0;
239 int32 minRange, maxRange;
246 pointPosition_.deviceVectorAll(),
247 pointFlag_.deviceVectorAll(),
249 minRange, maxRange );
253 pointFlag_.modifyOnDevice();
254 pointFlag_.syncViews();
257 if( numMarked<=numActivePoints_)
259 numActivePoints_ -= numMarked;
264 "number of points marked as delete ("<<numMarked<<
265 ") is greater than the activePoints ("<<numActivePoints_<<
270 range newRange = {minRange, maxRange};
272 if( activeRange_ != newRange )
274 activeRange_ = newRange;
278 if( !this->notify(msg) )
281 "something went wrong in notifying registered object about range change. \n";
309 auto numNew = pos.
size();
312 return makeUnique<int32IndexContainer>();
315 auto newPointsPtr = getNewPointsIndices( numNew );
317 if(!newPointsPtr)
return nullptr;
319 auto oldSize = size();
320 auto oldCapacity = capacity();
321 auto oldRange = activeRange();
323 tobeInsertedIndex_ = newPointsPtr();
327 if(!pointPosition_.insertSetElement(
332 if(!pointFlag_.insertSetElement(
334 static_cast<int8>(PointFlag::ACTIVE))
340 auto minInd = newPointsPtr().min();
341 auto maxInd = newPointsPtr().max();
346 for(
auto sfEntry:setField)
349 sfEntry.setPointFieldSelectedAll(
355 localExlusion.push_back(
363 activeRange_ = {
min(activeRange_.first, minInd ),
364 max(activeRange_.second, maxInd+1)};
366 numActivePoints_ += numNew;
370 if( oldRange != activeRange_ )
373 if( oldSize != size() )
376 if( oldCapacity != capacity() )
380 if( !this->notify(msg, localExlusion) )
return nullptr;
393 auto psCapacity = is.
lookupDataOrSet(
"pointStructureCapacity", maxSizeDefault_);
394 pointPosition_.reallocate(psCapacity);
395 pointFlag_.reallocate(psCapacity);
397 if( !pointPosition_.read(is))
400 "Error in reading pointPosition in pointStructure \n";
404 if(! pointFlag_.read(is))
407 "Error in reading pointFlag in pointStructure \n";
412 return evaluatePointStructure();
423 if(!pointPosition_.write(os))
426 "error in writing pointPosition to file \n";
430 if(!pointFlag_.write(os))
433 "error in writing pointFlag to file \n";