#include "base.hpp"

namespace Nif
{
    void Extra::read(NIFStream* nif)
    {
        if (nif->getVersion() >= NIFStream::generateVersion(10, 0, 1, 0))
            nif->read(mName);
        else if (nif->getVersion() <= NIFStream::generateVersion(4, 2, 2, 0))
        {
            mNext.read(nif);
            nif->read(mRecordSize);
        }
    }

    void NiObjectNET::read(NIFStream* nif)
    {
        nif->read(mName);
        if (nif->getVersion() < NIFStream::generateVersion(10, 0, 1, 0))
            mExtra.read(nif);
        else
            readRecordList(nif, mExtraList);
        mController.read(nif);
    }

    void NiObjectNET::post(Reader& nif)
    {
        mExtra.post(nif);
        postRecordList(nif, mExtraList);
        mController.post(nif);
    }

    ExtraList NiObjectNET::getExtraList() const
    {
        ExtraList list = mExtraList;
        for (ExtraPtr extra = mExtra; !extra.empty(); extra = extra->mNext)
            list.emplace_back(extra);
        return list;
    }
}