// Copyright 2014 PDFium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com

#include "../../include/fxcrt/fx_basic.h"
#include "plex.h"
CFX_Plex* CFX_Plex::Create(CFX_Plex*& pHead, FX_DWORD nMax, FX_DWORD cbElement)
{
    CFX_Plex* p = (CFX_Plex*)FX_Alloc(uint8_t, sizeof(CFX_Plex) + nMax * cbElement);
    p->pNext = pHead;
    pHead = p;
    return p;
}
void CFX_Plex::FreeDataChain()
{
    CFX_Plex* p = this;
    while (p != NULL) {
        uint8_t* bytes = (uint8_t*)p;
        CFX_Plex* pNext = p->pNext;
        FX_Free(bytes);
        p = pNext;
    }
}
