00001 /* 00002 * lib-gmapkernel : Un noyau de 3-G-cartes et des opérations. 00003 * Copyright (C) 2004, Moka Team, Université de Poitiers, Laboratoire SIC 00004 * http://www.sic.sp2mi.univ-poitiers.fr/ 00005 * Copyright (C) 2009, Guillaume Damiand, CNRS, LIRIS, 00006 * guillaume.damiand@liris.cnrs.fr, http://liris.cnrs.fr/ 00007 * 00008 * This file is part of lib-gmapkernel 00009 * 00010 * This program is free software: you can redistribute it and/or modify 00011 * it under the terms of the GNU Lesser General Public License as published by 00012 * the Free Software Foundation, either version 3 of the License, or 00013 * (at your option) any later version. 00014 * 00015 * This program is distributed in the hope that it will be useful, 00016 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00017 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00018 * GNU Lesser General Public License for more details. 00019 * 00020 * You should have received a copy of the GNU Lesser General Public License 00021 * along with this program. If not, see <http://www.gnu.org/licenses/>. 00022 */ 00023 00024 //****************************************************************************** 00025 #include "g-map-generic.hh" 00026 using namespace GMap3d; 00027 //****************************************************************************** 00028 // Ancienne version, beaucoup plus lente: 00029 // 00030 // INLINE 00031 // int CGMapGeneric::deleteMarkedDarts(int AMarkNumber) 00032 // { 00033 // int nbDeleted = 0; 00034 // CDynamicCoverageAll it(this); 00035 // 00036 // while (it.cont()) 00037 // { 00038 // CDart * dart= it++; 00039 // 00040 // if (isMarked(dart, AMarkNumber)) 00041 // { 00042 // for (int i=3; i>=0; --i) 00043 // if (!isFree(dart,i)) 00044 // unsew(dart,i); 00045 // 00046 // delMapDart(dart); 00047 // ++nbDeleted; 00048 // } 00049 // } 00050 // 00051 // return nbDeleted; 00052 // } 00053 //****************************************************************************** 00054 int CGMapGeneric::deleteMarkedDarts(int AMarkNumber) 00055 { 00056 int nbDeleted = 0; 00057 CDynamicCoverageAll it(this); 00058 00059 // Décousures: 00060 for (; it.cont(); ++it) 00061 if (isMarked(*it, AMarkNumber)) 00062 for (int i=3; i>=0; --i) 00063 if (!isFree(*it, i) && !isMarked(alpha(*it, i), AMarkNumber)) 00064 unsew(*it, i); 00065 00066 // Suppresions: 00067 for (it.reinit(); it.cont(); ) 00068 { 00069 CDart * current = it++; 00070 00071 if (isMarked(current, AMarkNumber)) 00072 { 00073 delMapDart(current); 00074 ++nbDeleted; 00075 } 00076 } 00077 00078 return nbDeleted; 00079 } 00080 //******************************************************************************