// DUiObjectList.cpp: implementation of the CDUiObjectList class.
//
//////////////////////////////////////////////////////////////////////

#include "DUiMan.h"

#define ALLOC_INCREMENTS 20

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CDUiObjectList::CDUiObjectList()
{
    m_dwCurrentIndex = 0;
    m_dwDUiObjectCount = 0;
    m_dwDUiObjectArraySize = 0;
    m_pDUiObjects = NULL;
}

CDUiObjectList::~CDUiObjectList()
{

}

DWORD CDUiObjectList::AddObject(CDUiObject *pObject)
{
    DWORD dwRetVal = 0xFFFFFFFF;

    if (!m_dwDUiObjectArraySize)
    {
        m_pDUiObjects = (CDUiObject **) malloc(sizeof(CDUiObject*) * ALLOC_INCREMENTS);
        m_dwDUiObjectArraySize = ALLOC_INCREMENTS;
    }
    else if (m_dwDUiObjectCount == m_dwDUiObjectArraySize)
    {
        m_pDUiObjects = (CDUiObject **) realloc(m_pDUiObjects,sizeof(CDUiObject*) * ALLOC_INCREMENTS);
        m_dwDUiObjectArraySize += ALLOC_INCREMENTS;
    }

    if (m_dwDUiObjectCount < m_dwDUiObjectArraySize)
    {
        dwRetVal = m_dwDUiObjectCount;
        m_pDUiObjects[m_dwDUiObjectCount++] = pObject;
    }
    return dwRetVal;
}

DWORD CDUiObjectList::FindObject(CDUiObject *pObject)
{
    DWORD i;
    for (i = 0; i < m_dwDUiObjectCount; i++)
    {
        if (m_pDUiObjects[i] == pObject)
        {
            return i;
        }
    }
    return 0xFFFFFFFF;
}

DWORD CDUiObjectList::RemoveObject(CDUiObject *pObject)
{
    return 0;
}

void CDUiObjectList::Reset()
{
    m_dwCurrentIndex = 0;
}

CDUiObject *CDUiObjectList::GetObject(DWORD dwPos)
{
    if (dwPos < m_dwDUiObjectCount)
    {
        return m_pDUiObjects[dwPos];
    }
    else
    {
        return NULL;
    }
}

CDUiObject *CDUiObjectList::GetNextObject()
{
    if (m_dwCurrentIndex < m_dwDUiObjectCount)
    {
        m_dwCurrentIndex++;
        return m_pDUiObjects[m_dwCurrentIndex-1];
    }
    else
    {
        return NULL;
    }
}
