/*
* All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or
* its licensors.
*
* For complete copyright and license terms please see the LICENSE at the root of this
* distribution (the "License"). All use of this software is governed by the License,
* or, if provided, by the license below or the license accompanying this file. Do not
* remove or modify any license notices. This file is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
*
*/
// Original file Copyright Crytek GMBH or its affiliates, used under license.

#include "CryLegacy_precompiled.h"
#include "Pool.h"
#include "Memory.h"

namespace Memory {
    /*
    CContext
    */

    CContext::CContext()
        : m_pPools(NULL)
    {
    }

    //

    void CContext::AddPool(CPool& pool)
    {
        if (HasPool(pool))
        {
            return;
        }

        pool.m_pContext = this;
        pool.m_pNext = m_pPools;
        m_pPools = &pool;
    }

    void CContext::RemovePool(CPool& pool)
    {
        if (m_pPools == &pool)
        {
            pool.m_pContext = NULL;
            m_pPools = m_pPools->m_pNext;
            return;
        }

        CPool* pPool = m_pPools;
        while (pPool)
        {
            if (pPool->m_pNext != &pool)
            {
                continue;
            }

            pool.m_pContext = NULL;
            pPool->m_pNext = pPool->m_pNext->m_pNext;
            break;
        }
    }

    bool CContext::HasPool(CPool& pool)
    {
        return pool.m_pContext == this;
    }

    void CContext::Update()
    {
        CPool* pPool = m_pPools;
        while (pPool)
        {
            pPool->Update();

            pPool = pPool->m_pNext;
        }
    }

    void CContext::GetMemoryUsage(ICrySizer* pSizer) const
    {
        CPool* pPool = m_pPools;
        while (pPool)
        {
            pSizer->AddObject(pPool);
            pPool = pPool->m_pNext;
        }

        pSizer->AddObject(this, sizeof(*this));
    }
} // namespace Memory

/*
CAnimationContext
*/

void CAnimationContext::Update()
{
    m_memoryContext.Update();
}

void CAnimationContext::GetMemoryUsage(ICrySizer* pSizer) const
{
    m_memoryContext.GetMemoryUsage(pSizer);
}