49 #include "Iterators.hh" 50 #include "TopologyKernel.hh" 59 VertexOHalfEdgeIter::VertexOHalfEdgeIter(
const VertexHandle& _ref_h,
60 const TopologyKernel* _mesh,
int _max_laps) :
61 BaseIter(_mesh, _ref_h, _max_laps),
64 if(!_mesh->has_vertex_bottom_up_incidences()) {
66 std::cerr <<
"This iterator needs bottom-up incidences!" << std::endl;
68 BaseIter::valid(
false);
72 if((
unsigned int)_ref_h.idx() >= BaseIter::mesh()->outgoing_hes_per_vertex_.size()) {
73 BaseIter::valid(
false);
76 if(BaseIter::valid()) {
77 if((
unsigned int)cur_index_ >= BaseIter::mesh()->outgoing_hes_per_vertex_[_ref_h.idx()].size()) {
78 BaseIter::valid(
false);
82 if(BaseIter::valid()) {
83 BaseIter::cur_handle((
84 BaseIter::mesh()->outgoing_hes_per_vertex_[_ref_h.idx()])[cur_index_]);
89 VertexOHalfEdgeIter& VertexOHalfEdgeIter::operator--() {
91 size_t n_outgoing_halfedges = BaseIter::mesh()->outgoing_hes_per_vertex_[BaseIter::ref_handle().idx()].size();
93 if (cur_index_ == 0) {
94 cur_index_ = n_outgoing_halfedges-1;
97 BaseIter::valid(
false);
103 BaseIter::cur_handle((BaseIter::mesh()->outgoing_hes_per_vertex_[BaseIter::ref_handle().idx()])[cur_index_]);
109 VertexOHalfEdgeIter& VertexOHalfEdgeIter::operator++() {
111 size_t n_outgoing_halfedges = BaseIter::mesh()->outgoing_hes_per_vertex_[BaseIter::ref_handle().idx()].size();
115 if (cur_index_ == n_outgoing_halfedges) {
118 if (lap_ >= max_laps_)
119 BaseIter::valid(
false);
122 BaseIter::cur_handle((BaseIter::mesh()->outgoing_hes_per_vertex_[BaseIter::ref_handle().idx()])[cur_index_]);
132 HalfEdgeHalfFaceIter::HalfEdgeHalfFaceIter(
const HalfEdgeHandle& _ref_h,
133 const TopologyKernel* _mesh,
int _max_laps) :
134 BaseIter(_mesh, _ref_h, _max_laps),
137 if(!_mesh->has_edge_bottom_up_incidences()) {
139 std::cerr <<
"This iterator needs bottom-up incidences!" << std::endl;
141 BaseIter::valid(
false);
145 if((
unsigned int)_ref_h.idx() >= BaseIter::mesh()->incident_hfs_per_he_.size()) {
146 BaseIter::valid(
false);
149 if(BaseIter::valid()) {
150 if((
unsigned int)cur_index_ >= BaseIter::mesh()->incident_hfs_per_he_[_ref_h.idx()].size()) {
151 BaseIter::valid(
false);
155 if(BaseIter::valid()) {
156 BaseIter::cur_handle((
157 BaseIter::mesh()->incident_hfs_per_he_[_ref_h.idx()])[cur_index_]);
162 HalfEdgeHalfFaceIter& HalfEdgeHalfFaceIter::operator--() {
164 size_t n_outgoing_halffaces = BaseIter::mesh()->incident_hfs_per_he_[BaseIter::ref_handle().idx()].size();
166 if (cur_index_ == 0) {
167 cur_index_ = n_outgoing_halffaces-1;
170 BaseIter::valid(
false);
176 BaseIter::cur_handle((BaseIter::mesh()->incident_hfs_per_he_[BaseIter::ref_handle().idx()])[cur_index_]);
182 HalfEdgeHalfFaceIter& HalfEdgeHalfFaceIter::operator++() {
185 size_t n_outgoing_halffaces = BaseIter::mesh()->incident_hfs_per_he_[BaseIter::ref_handle().idx()].size();
189 if (cur_index_ == n_outgoing_halffaces) {
192 if (lap_ >= max_laps_)
193 BaseIter::valid(
false);
196 BaseIter::cur_handle((BaseIter::mesh()->incident_hfs_per_he_[BaseIter::ref_handle().idx()])[cur_index_]);
205 VertexCellIter::VertexCellIter(
const VertexHandle& _ref_h,
206 const TopologyKernel* _mesh,
int _max_laps) :
207 BaseIter(_mesh, _ref_h, _max_laps) {
209 if(!_mesh->has_full_bottom_up_incidences()) {
211 std::cerr <<
"This iterator needs bottom-up incidences!" << std::endl;
213 BaseIter::valid(
false);
217 if((
unsigned int)_ref_h.idx() >= BaseIter::mesh()->outgoing_hes_per_vertex_.size()) {
218 BaseIter::valid(
false);
223 const std::vector<HalfEdgeHandle>& incidentHalfedges = BaseIter::mesh()->outgoing_hes_per_vertex_[_ref_h.idx()];
224 for(std::vector<HalfEdgeHandle>::const_iterator it = incidentHalfedges.begin(); it != incidentHalfedges.end(); ++it) {
226 if(*it < 0 || (
unsigned int)it->idx() >= BaseIter::mesh()->incident_hfs_per_he_.size())
continue;
227 const std::vector<HalfFaceHandle>& incidentHalfFaces = BaseIter::mesh()->incident_hfs_per_he_[it->idx()];
229 for(std::vector<HalfFaceHandle>::const_iterator hf_it = incidentHalfFaces.begin();
230 hf_it != incidentHalfFaces.end(); ++hf_it) {
231 if((
unsigned int)hf_it->idx() < BaseIter::mesh()->incident_cell_per_hf_.size()) {
232 CellHandle c_idx = BaseIter::mesh()->incident_cell_per_hf_[hf_it->idx()];
233 if(c_idx != TopologyKernel::InvalidCellHandle)
234 cells_.push_back(c_idx);
239 std::sort(cells_.begin(), cells_.end());
240 cells_.resize(std::unique(cells_.begin(), cells_.end()) - cells_.begin());
243 if ((cells_.size() > 0) && !cells_.front().is_valid())
244 cells_.erase(cells_.begin());
247 BaseIter::valid(cells_.size()>0);
248 if(BaseIter::valid()) {
249 BaseIter::cur_handle(cells_[cur_index_]);
253 VertexCellIter& VertexCellIter::operator--() {
255 if(cur_index_ == 0) {
256 cur_index_ = cells_.size()-1;
259 BaseIter::valid(
false);
265 BaseIter::cur_handle(cells_[cur_index_]);
270 VertexCellIter& VertexCellIter::operator++() {
273 if(cur_index_ == cells_.size()) {
276 if (lap_ >= max_laps_) {
277 BaseIter::valid(
false);
280 BaseIter::cur_handle(cells_[cur_index_]);
289 HalfEdgeCellIter::HalfEdgeCellIter(
const HalfEdgeHandle& _ref_h,
290 const TopologyKernel* _mesh,
int _max_laps) :
291 BaseIter(_mesh, _ref_h, _max_laps),
294 if(!_mesh->has_edge_bottom_up_incidences() || !_mesh->has_face_bottom_up_incidences()) {
296 std::cerr <<
"This iterator needs bottom-up incidences!" << std::endl;
298 BaseIter::valid(
false);
302 if((
unsigned int)_ref_h.idx() >= BaseIter::mesh()->incident_hfs_per_he_.size()) {
304 BaseIter::valid(
false);
307 if((
unsigned int)cur_index_ >= BaseIter::mesh()->incident_hfs_per_he_[_ref_h.idx()].size()) {
309 BaseIter::valid(
false);
312 if((
unsigned int)((BaseIter::mesh()->incident_hfs_per_he_[_ref_h.idx()])[cur_index_]).idx() >=
313 BaseIter::mesh()->incident_cell_per_hf_.size()) {
315 BaseIter::valid(
false);
320 const std::vector<HalfFaceHandle>& incidentHalffaces = BaseIter::mesh()->incident_hfs_per_he_[_ref_h.idx()];
321 std::set<CellHandle> cells;
322 for (
unsigned int i = 0; i < incidentHalffaces.size(); ++i)
324 CellHandle ch = getCellHandle(i);
326 if(cells.count(ch) == 0) {
327 cells_.push_back(ch);
333 BaseIter::valid(cells_.size() > 0);
335 if(BaseIter::valid()) {
336 BaseIter::cur_handle(cells_[cur_index_]);
341 HalfEdgeCellIter& HalfEdgeCellIter::operator--() {
343 if (cur_index_ == 0) {
344 cur_index_ = cells_.size()-1;
347 BaseIter::valid(
false);
353 BaseIter::cur_handle(cells_[cur_index_]);
358 HalfEdgeCellIter& HalfEdgeCellIter::operator++() {
362 if (cur_index_ == cells_.size()) {
365 if (lap_ >= max_laps_)
366 BaseIter::valid(
false);
369 BaseIter::cur_handle(cells_[cur_index_]);
373 CellHandle HalfEdgeCellIter::getCellHandle(
int _cur_index)
const 375 const std::vector<HalfFaceHandle>& halffacehandles = BaseIter::mesh()->incident_hfs_per_he_[BaseIter::ref_handle().idx()];
376 HalfFaceHandle currentHalfface = halffacehandles[_cur_index];
377 if(!currentHalfface.is_valid())
return CellHandle(-1);
378 CellHandle cellhandle = BaseIter::mesh()->incident_cell_per_hf_[currentHalfface.idx()];
388 CellVertexIter::CellVertexIter(
const CellHandle& _ref_h,
389 const TopologyKernel* _mesh,
int _max_laps) :
390 BaseIter(_mesh, _ref_h, _max_laps) {
392 OpenVolumeMeshCell c = BaseIter::mesh()->cell(_ref_h);
393 std::vector<HalfFaceHandle>::const_iterator hf_iter = c.halffaces().begin();
394 for(; hf_iter != c.halffaces().end(); ++hf_iter) {
395 const OpenVolumeMeshFace& halfface = BaseIter::mesh()->halfface(*hf_iter);
396 const std::vector<HalfEdgeHandle>& hes = halfface.halfedges();
397 for(std::vector<HalfEdgeHandle>::const_iterator he_iter = hes.begin(); he_iter != hes.end(); ++he_iter) {
398 incident_vertices_.push_back(BaseIter::mesh()->halfedge(*he_iter).to_vertex());
403 std::sort(incident_vertices_.begin(), incident_vertices_.end());
404 incident_vertices_.resize(std::unique(incident_vertices_.begin(), incident_vertices_.end()) - incident_vertices_.begin());
407 BaseIter::valid(incident_vertices_.size() > 0);
409 if(BaseIter::valid()) {
410 BaseIter::cur_handle(incident_vertices_[cur_index_]);
415 CellVertexIter& CellVertexIter::operator--() {
417 if (cur_index_ == 0) {
418 cur_index_ = incident_vertices_.size()-1;
421 BaseIter::valid(
false);
427 BaseIter::cur_handle(incident_vertices_[cur_index_]);
432 CellVertexIter& CellVertexIter::operator++() {
435 if (cur_index_ == incident_vertices_.size()){
438 if (lap_ >= max_laps_)
439 BaseIter::valid(
false);
442 BaseIter::cur_handle(incident_vertices_[cur_index_]);
451 CellCellIter::CellCellIter(
const CellHandle& _ref_h,
452 const TopologyKernel* _mesh,
int _max_laps) :
453 BaseIter(_mesh, _ref_h, _max_laps) {
455 if(!_mesh->has_face_bottom_up_incidences()) {
457 std::cerr <<
"This iterator needs bottom-up incidences!" << std::endl;
459 BaseIter::valid(
false);
463 std::vector<HalfFaceHandle>::const_iterator hf_iter = BaseIter::mesh()->cell(_ref_h).halffaces().begin();
464 std::vector<HalfFaceHandle>::const_iterator hf_end = BaseIter::mesh()->cell(_ref_h).halffaces().end();
465 for(; hf_iter != hf_end; ++hf_iter) {
467 HalfFaceHandle opp_hf = BaseIter::mesh()->opposite_halfface_handle(*hf_iter);
468 CellHandle ch = BaseIter::mesh()->incident_cell_per_hf_[opp_hf.idx()];
469 if(ch != TopologyKernel::InvalidCellHandle) {
470 adjacent_cells_.push_back(ch);
475 std::sort(adjacent_cells_.begin(), adjacent_cells_.end());
476 adjacent_cells_.resize(std::unique(adjacent_cells_.begin(), adjacent_cells_.end()) - adjacent_cells_.begin());
479 BaseIter::valid(adjacent_cells_.size()>0);
480 if(BaseIter::valid()) {
481 BaseIter::cur_handle(adjacent_cells_[cur_index_]);
486 CellCellIter& CellCellIter::operator--() {
488 if (cur_index_ == 0) {
489 cur_index_ = adjacent_cells_.size() - 1;
492 BaseIter::valid(
false);
498 BaseIter::cur_handle(adjacent_cells_[cur_index_]);
503 CellCellIter& CellCellIter::operator++() {
506 if (cur_index_ == adjacent_cells_.size())
510 if (lap_ >= max_laps_)
511 BaseIter::valid(
false);
513 BaseIter::cur_handle(adjacent_cells_[cur_index_]);
522 HalfFaceVertexIter::HalfFaceVertexIter(
const HalfFaceHandle& _ref_h,
523 const TopologyKernel* _mesh,
int _max_laps) :
524 BaseIter(_mesh, _ref_h, _max_laps) {
526 if(!_ref_h.is_valid())
return;
528 const OpenVolumeMeshFace& halfface = _mesh->halfface(_ref_h);
529 const std::vector<HalfEdgeHandle>& hes = halfface.halfedges();
530 for(std::vector<HalfEdgeHandle>::const_iterator he_it = hes.begin();
531 he_it != hes.end(); ++he_it) {
532 vertices_.push_back(_mesh->halfedge(*he_it).from_vertex());
537 BaseIter::valid(vertices_.size() > 0);
538 if(BaseIter::valid()) {
539 BaseIter::cur_handle(vertices_[cur_index_]);
544 HalfFaceVertexIter& HalfFaceVertexIter::operator--() {
546 if (cur_index_ == 0) {
547 cur_index_ = vertices_.size() - 1;
550 BaseIter::valid(
false);
556 BaseIter::cur_handle(vertices_[cur_index_]);
561 HalfFaceVertexIter& HalfFaceVertexIter::operator++() {
564 if (cur_index_ == vertices_.size())
568 if (lap_ >= max_laps_)
569 BaseIter::valid(
false);
571 BaseIter::cur_handle(vertices_[cur_index_]);
579 BoundaryHalfFaceHalfFaceIter::BoundaryHalfFaceHalfFaceIter(
const HalfFaceHandle& _ref_h,
580 const TopologyKernel* _mesh,
int _max_laps) :
581 BaseIter(_mesh, _ref_h, _max_laps) {
583 if(!_mesh->has_face_bottom_up_incidences()) {
585 std::cerr <<
"This iterator needs bottom-up incidences!" << std::endl;
587 BaseIter::valid(
false);
593 const OpenVolumeMeshFace& halfface = _mesh->halfface(_ref_h);
594 const std::vector<HalfEdgeHandle>& halfedges = halfface.halfedges();
595 for(std::vector<HalfEdgeHandle>::const_iterator he_it = halfedges.begin();
596 he_it != halfedges.end(); ++he_it) {
600 for(; hehf_it.valid(); ++hehf_it) {
602 if(_mesh->is_boundary(*hehf_it)) {
603 neighbor_halffaces_.push_back(*hehf_it);
604 common_edges_.push_back(_mesh->edge_handle(*he_it));
610 BaseIter::valid(neighbor_halffaces_.size() > 0);
611 if(BaseIter::valid()) {
612 BaseIter::cur_handle(neighbor_halffaces_[cur_index_]);
617 BoundaryHalfFaceHalfFaceIter& BoundaryHalfFaceHalfFaceIter::operator--() {
621 cur_index_ = neighbor_halffaces_.size() - 1;
624 BaseIter::valid(
false);
630 BaseIter::cur_handle(neighbor_halffaces_[cur_index_]);
635 BoundaryHalfFaceHalfFaceIter& BoundaryHalfFaceHalfFaceIter::operator++() {
638 if (cur_index_ == neighbor_halffaces_.size())
642 if (lap_ >= max_laps_)
643 BaseIter::valid(
false);
646 BaseIter::cur_handle(neighbor_halffaces_[cur_index_]);
655 BoundaryFaceIter::BoundaryFaceIter(
const TopologyKernel* _mesh) :
657 bf_it_(_mesh->faces_begin()) {
659 if(!_mesh->has_face_bottom_up_incidences()) {
661 std::cerr <<
"This iterator needs bottom-up incidences!" << std::endl;
663 BaseIter::valid(
false);
667 while(bf_it_ != BaseIter::mesh()->faces_end() &&
668 !BaseIter::mesh()->is_boundary(*bf_it_) &&
669 BaseIter::mesh()->is_deleted(bf_it_.cur_handle())){
672 BaseIter::valid(bf_it_ != BaseIter::mesh()->faces_end());
673 if(BaseIter::valid()) {
674 BaseIter::cur_handle(*bf_it_);
679 BoundaryFaceIter& BoundaryFaceIter::operator--() {
682 while(bf_it_ >= BaseIter::mesh()->faces_begin() &&
683 !BaseIter::mesh()->is_boundary(*bf_it_) &&
684 BaseIter::mesh()->is_deleted(bf_it_.cur_handle())){
687 if(bf_it_ >= BaseIter::mesh()->faces_begin()) {
688 BaseIter::cur_handle(*bf_it_);
690 BaseIter::valid(
false);
696 BoundaryFaceIter& BoundaryFaceIter::operator++() {
699 while(bf_it_ != BaseIter::mesh()->faces_end() &&
700 !BaseIter::mesh()->is_boundary(*bf_it_) &&
701 BaseIter::mesh()->is_deleted(bf_it_.cur_handle())){
704 if(bf_it_ != BaseIter::mesh()->faces_end()) {
705 BaseIter::cur_handle(*bf_it_);
707 BaseIter::valid(
false);
717 VertexIter::VertexIter(
const TopologyKernel* _mesh,
const VertexHandle& _vh) :
718 BaseIter(_mesh, _vh),
719 cur_index_(_vh.idx()) {
721 while ((
unsigned int)cur_index_ < BaseIter::mesh()->n_vertices() && BaseIter::mesh()->is_deleted(VertexHandle(cur_index_)))
723 if((
unsigned int)cur_index_ >= BaseIter::mesh()->n_vertices()) {
724 BaseIter::valid(
false);
726 BaseIter::cur_handle(VertexHandle(cur_index_));
730 VertexIter& VertexIter::operator--() {
733 while (cur_index_ >= 0 && BaseIter::mesh()->is_deleted(VertexHandle(cur_index_)))
736 BaseIter::valid(
false);
738 BaseIter::cur_handle(VertexHandle(cur_index_));
743 VertexIter& VertexIter::operator++() {
746 while ((
unsigned int)cur_index_ < BaseIter::mesh()->n_vertices() && BaseIter::mesh()->is_deleted(VertexHandle(cur_index_)))
748 if((
unsigned int)cur_index_ >= BaseIter::mesh()->n_vertices()) {
749 BaseIter::valid(
false);
751 BaseIter::cur_handle(VertexHandle(cur_index_));
760 EdgeIter::EdgeIter(
const TopologyKernel* _mesh,
const EdgeHandle& _eh) :
761 BaseIter(_mesh, _eh),
762 cur_index_(_eh.idx()) {
764 while ((
unsigned int)cur_index_ < BaseIter::mesh()->edges_.size() && BaseIter::mesh()->is_deleted(EdgeHandle(cur_index_)))
766 if((
unsigned int)cur_index_ >= BaseIter::mesh()->edges_.size()) {
767 BaseIter::valid(
false);
769 BaseIter::cur_handle(EdgeHandle(cur_index_));
773 EdgeIter& EdgeIter::operator--() {
776 while (cur_index_ >= 0 && BaseIter::mesh()->is_deleted(EdgeHandle(cur_index_)))
779 BaseIter::valid(
false);
781 BaseIter::cur_handle(EdgeHandle(cur_index_));
786 EdgeIter& EdgeIter::operator++() {
789 while ((
unsigned int)cur_index_ < BaseIter::mesh()->edges_.size() && BaseIter::mesh()->is_deleted(EdgeHandle(cur_index_)))
791 if((
unsigned int)cur_index_ >= BaseIter::mesh()->edges_.size()) {
792 BaseIter::valid(
false);
794 BaseIter::cur_handle(EdgeHandle(cur_index_));
803 HalfEdgeIter::HalfEdgeIter(
const TopologyKernel* _mesh,
const HalfEdgeHandle& _heh) :
804 BaseIter(_mesh, _heh),
805 cur_index_(_heh.idx()) {
807 while ((
unsigned int)cur_index_ < BaseIter::mesh()->edges_.size() * 2 && BaseIter::mesh()->is_deleted(HalfEdgeHandle(cur_index_)))
809 if((
unsigned int)cur_index_ >= BaseIter::mesh()->edges_.size() * 2) {
810 BaseIter::valid(
false);
812 BaseIter::cur_handle(HalfEdgeHandle(cur_index_));
816 HalfEdgeIter& HalfEdgeIter::operator--() {
819 while (cur_index_ >= 0 && BaseIter::mesh()->is_deleted(HalfEdgeHandle(cur_index_)))
822 BaseIter::valid(
false);
824 BaseIter::cur_handle(HalfEdgeHandle(cur_index_));
829 HalfEdgeIter& HalfEdgeIter::operator++() {
832 while ((
unsigned int)cur_index_ < BaseIter::mesh()->edges_.size() * 2 && BaseIter::mesh()->is_deleted(HalfEdgeHandle(cur_index_)))
834 if((
unsigned int)cur_index_ >= BaseIter::mesh()->edges_.size() * 2) {
835 BaseIter::valid(
false);
837 BaseIter::cur_handle(HalfEdgeHandle(cur_index_));
846 FaceIter::FaceIter(
const TopologyKernel* _mesh,
const FaceHandle& _fh) :
847 BaseIter(_mesh, _fh),
848 cur_index_(_fh.idx()) {
850 while ((
unsigned int)cur_index_ < BaseIter::mesh()->faces_.size() && BaseIter::mesh()->is_deleted(FaceHandle(cur_index_)))
852 if((
unsigned int)cur_index_ >= BaseIter::mesh()->faces_.size()) {
853 BaseIter::valid(
false);
855 BaseIter::cur_handle(FaceHandle(cur_index_));
859 FaceIter& FaceIter::operator--() {
862 while (cur_index_ >= 0 && BaseIter::mesh()->is_deleted(FaceHandle(cur_index_)))
865 BaseIter::valid(
false);
867 BaseIter::cur_handle(FaceHandle(cur_index_));
872 FaceIter& FaceIter::operator++() {
875 while ((
unsigned int)cur_index_ < BaseIter::mesh()->faces_.size() && BaseIter::mesh()->is_deleted(FaceHandle(cur_index_)))
877 if((
unsigned int)cur_index_ >= BaseIter::mesh()->faces_.size()) {
878 BaseIter::valid(
false);
880 BaseIter::cur_handle(FaceHandle(cur_index_));
889 HalfFaceIter::HalfFaceIter(
const TopologyKernel* _mesh,
const HalfFaceHandle& _hfh) :
890 BaseIter(_mesh, _hfh),
891 cur_index_(_hfh.idx()) {
893 while ((
unsigned int)cur_index_ < BaseIter::mesh()->faces_.size() * 2 && BaseIter::mesh()->is_deleted(HalfFaceHandle(cur_index_)))
895 if((
unsigned int)cur_index_ >= BaseIter::mesh()->faces_.size() * 2) {
896 BaseIter::valid(
false);
898 BaseIter::cur_handle(HalfFaceHandle(cur_index_));
902 HalfFaceIter& HalfFaceIter::operator--() {
905 while (cur_index_ >= 0 && BaseIter::mesh()->is_deleted(HalfFaceHandle(cur_index_)))
908 BaseIter::valid(
false);
910 BaseIter::cur_handle(HalfFaceHandle(cur_index_));
915 HalfFaceIter& HalfFaceIter::operator++() {
918 while ((
unsigned int)cur_index_ < BaseIter::mesh()->faces_.size() * 2 && BaseIter::mesh()->is_deleted(HalfFaceHandle(cur_index_)))
920 if((
unsigned int)cur_index_ >= BaseIter::mesh()->faces_.size() * 2) {
921 BaseIter::valid(
false);
923 BaseIter::cur_handle(HalfFaceHandle(cur_index_));
932 CellIter::CellIter(
const TopologyKernel* _mesh,
const CellHandle& _ch) :
933 BaseIter(_mesh, _ch),
934 cur_index_(_ch.idx()) {
936 while ((
unsigned int)cur_index_ < BaseIter::mesh()->cells_.size() && BaseIter::mesh()->is_deleted(CellHandle(cur_index_)))
938 if((
unsigned int)cur_index_ >= BaseIter::mesh()->cells_.size()) {
939 BaseIter::valid(
false);
941 BaseIter::cur_handle(CellHandle(cur_index_));
945 CellIter& CellIter::operator--() {
948 while (cur_index_ >= 0 && BaseIter::mesh()->is_deleted(CellHandle(cur_index_)))
951 BaseIter::valid(
false);
953 BaseIter::cur_handle(CellHandle(cur_index_));
958 CellIter& CellIter::operator++() {
961 while ((
unsigned int)cur_index_ < BaseIter::mesh()->cells_.size() && BaseIter::mesh()->is_deleted(CellHandle(cur_index_)))
963 if((
unsigned int)cur_index_ >= BaseIter::mesh()->cells_.size()) {
964 BaseIter::valid(
false);
966 BaseIter::cur_handle(CellHandle(cur_index_));