void SATGroup::_FollowSeed(WindowArea* area, WindowArea* veto, WindowAreaList& seedList, WindowAreaList& newGroup) { WindowAreaList neighbours; _FillNeighbourList(neighbours, area); for (int i = 0; i < neighbours.CountItems(); i++) { WindowArea* currentArea = neighbours.ItemAt(i); if (currentArea != veto && !newGroup.HasItem(currentArea)) { newGroup.AddItem(currentArea); // if we get a area from the seed list it is not a seed any more seedList.RemoveItem(currentArea); } else { // don't _FollowSeed of invalid areas neighbours.RemoveItemAt(i); i--; } } for (int i = 0; i < neighbours.CountItems(); i++) _FollowSeed(neighbours.ItemAt(i), veto, seedList, newGroup); }