Funny bug
Well today I had funny bug debugging my code :
The code I was debugging looks like this (it's code that I cleaning right now) :
Bug is really easy to fix because it was uninitialized variable. But anyway this logic is funny:
The code I was debugging looks like this (it's code that I cleaning right now) :
//////////////////////////////////////////////////////////////////////////
void CGuiShapeEditor::flushHandlers( void )
{
    bool resetSelection = (m_handlers.size() != m_shape->getPointsCount());
 
    m_handlers.resize(m_shape->getPointsCount());
 
    for (uint32 i=0; igetPointsCount(); ++i)
    {
        SHandler& handle = m_handlers[i];
 
        handle.idx = i;
        handle.point = handle.pointBase = m_backgroundRect.topLeft()+QPointF(m_shape->getPoint(i).x*m_backgroundRect.width(), m_shape->getPoint(i).y*m_backgroundRect.height());
 
        setHandlerSelect(handle, resetSelection ? false : handle.select);
    }
}
 
//////////////////////////////////////////////////////////////////////////
void CGuiShapeEditor::setHandlerSelect(SHandler& a_handler, bool state)
{
    SelectedVec::Iterator it=qFind(m_selected.begin(), m_selected.end(), a_handler.idx);
 
    bool selected = (it != m_selected.end());
 
    if (selected != state)
    {
        if (state)
        {
#           m_selected.push_back(a_handler.idx);
        }
        else
        {
            *it = m_selected.back();
            m_selected.pop_back();
        } 
 
        a_handler.select = state;
    }
 
    flushHandler(a_handler);
} 
Bug is really easy to fix because it was uninitialized variable. But anyway this logic is funny:
(true != true) == true.


Comments
Post a Comment