Index   Main   Namespaces   Classes   Hierarchy   Annotated   Files   Compound   Global   Pages  

SgConnCompIterator.cpp

Go to the documentation of this file.
00001 //----------------------------------------------------------------------------
00002 /** @file SgConnCompIterator.cpp */
00003 //----------------------------------------------------------------------------
00004 
00005 #include "SgSystem.h"
00006 #include "SgConnCompIterator.h"
00007 
00008 using namespace std;
00009 
00010 //----------------------------------------------------------------------------
00011 
00012 SgConnCompIterator::SgConnCompIterator(const SgPointSet& set, int boardSize)
00013     : m_set(set),
00014       m_nextPoint(SgPointUtil::Pt(1, 1) - 1),
00015       m_lastBoardPoint(SgPointUtil::Pt(boardSize, boardSize))
00016 {
00017     SG_ASSERTRANGE(boardSize, 1, SG_MAX_SIZE);
00018     operator++(); // find first.
00019 }
00020 
00021 void SgConnCompIterator::operator++()
00022 {
00023     ++m_nextPoint;
00024     while ((m_nextPoint <= m_lastBoardPoint) && !(m_set[m_nextPoint]))
00025         ++m_nextPoint;
00026     if (m_nextPoint <= m_lastBoardPoint)
00027     {
00028         m_nextSet = m_set.ConnComp(m_nextPoint);
00029         m_set -= m_nextSet;
00030     }
00031 }
00032 
00033 const SgPointSet& SgConnCompIterator::operator*() const
00034 {
00035     SG_ASSERT(m_nextPoint <= m_lastBoardPoint);
00036     return m_nextSet;
00037 }
00038 
00039 //----------------------------------------------------------------------------
00040 
00041 SgConnComp8Iterator::SgConnComp8Iterator(const SgPointSet& set, int boardSize)
00042     : m_set(set),
00043       m_nextPoint(SgPointUtil::Pt(1, 1) - 1),
00044       m_lastBoardPoint(SgPointUtil::Pt(boardSize, boardSize))
00045 {
00046     SG_ASSERTRANGE(boardSize, 1, SG_MAX_SIZE);
00047     operator++(); // find first.
00048 }
00049 
00050 void SgConnComp8Iterator::operator++()
00051 {
00052     ++m_nextPoint;
00053     while ((m_nextPoint <= m_lastBoardPoint) && !(m_set[m_nextPoint]))
00054         ++m_nextPoint;
00055     if (m_nextPoint <= m_lastBoardPoint)
00056     {
00057         m_nextSet = m_set.ConnComp8(m_nextPoint);
00058         m_set -= m_nextSet;
00059     }
00060 }
00061 
00062 const SgPointSet& SgConnComp8Iterator::operator*() const
00063 {
00064     SG_ASSERT(m_nextPoint <= m_lastBoardPoint);
00065     return m_nextSet;
00066 }
00067 
00068 //----------------------------------------------------------------------------
00069 


Sun Mar 13 2011 Doxygen 1.7.1