OpenCore  1.0.4
OpenCore Bootloader
Loading...
Searching...
No Matches
FlexArray.c File Reference
#include <Uefi.h>
#include <Library/BaseMemoryLib.h>
#include <Library/BaseOverflowLib.h>
#include <Library/MemoryAllocationLib.h>
#include <Library/OcDebugLogLib.h>
#include <Library/OcFlexArrayLib.h>

Go to the source code of this file.

Macros

#define INITIAL_NUM_ITEMS   (8)
 

Functions

VOID OcFlexArrayFreePointerItem (IN VOID *Item)
 
OC_FLEX_ARRAYOcFlexArrayInit (IN CONST UINTN ItemSize, IN CONST OC_FLEX_ARRAY_FREE_ITEM FreeItem OPTIONAL)
 
STATIC VOID * InternalFlexArrayItemAt (IN CONST OC_FLEX_ARRAY *FlexArray, IN CONST UINTN Index)
 
STATIC VOID * InternalFlexArrayAddItem (IN OUT OC_FLEX_ARRAY *FlexArray)
 
VOID * OcFlexArrayAddItem (IN OUT OC_FLEX_ARRAY *FlexArray)
 
VOID * OcFlexArrayInsertItem (IN OUT OC_FLEX_ARRAY *FlexArray, IN CONST UINTN InsertIndex)
 
VOID * OcFlexArrayItemAt (IN CONST OC_FLEX_ARRAY *FlexArray, IN CONST UINTN Index)
 
VOID OcFlexArrayFree (IN OC_FLEX_ARRAY **FlexArray)
 
VOID OcFlexArrayDiscardItem (IN OUT OC_FLEX_ARRAY *FlexArray, IN CONST BOOLEAN FreeItem)
 
VOID OcFlexArrayFreeContainer (IN OC_FLEX_ARRAY **FlexArray, IN VOID **Items, IN UINTN *Count)
 

Detailed Description

Auto-resizing array.

Copyright (c) 2021, Mike Beaton. All rights reserved.
SPDX-License-Identifier: BSD-3-Clause

Definition in file FlexArray.c.

Macro Definition Documentation

◆ INITIAL_NUM_ITEMS

#define INITIAL_NUM_ITEMS   (8)

Definition at line 15 of file FlexArray.c.

Function Documentation

◆ InternalFlexArrayAddItem()

STATIC VOID * InternalFlexArrayAddItem ( IN OUT OC_FLEX_ARRAY * FlexArray)

Add an item in a flex array.

Parameters
[in,out]FlexArrayA pointer to the flex array.
Returns
The added item.

Definition at line 86 of file FlexArray.c.

◆ InternalFlexArrayItemAt()

STATIC VOID * InternalFlexArrayItemAt ( IN CONST OC_FLEX_ARRAY * FlexArray,
IN CONST UINTN Index )

Retrieve the Index-th item in a flex array.

Parameters
[in]FlexArrayA pointer to the flex array.
[in]IndexThe Index-th item to be retrieved in FlexArray.
Returns
The Index-th item in FlexArray.

Definition at line 61 of file FlexArray.c.

◆ OcFlexArrayAddItem()

VOID * OcFlexArrayAddItem ( IN OUT OC_FLEX_ARRAY * FlexArray)

Add new item to flex array, resizing if necessary. New item memory is zeroed.

Parameters
[in,out]FlexArrayFlex array to modify.
Return values
Non-NULLAddress of item created.
NULLOut of memory, in which case FlexArray->Items will be set to NULL, but FlexArray itself will still be allocated.

Definition at line 136 of file FlexArray.c.

◆ OcFlexArrayDiscardItem()

VOID OcFlexArrayDiscardItem ( IN OUT OC_FLEX_ARRAY * FlexArray,
IN CONST BOOLEAN FreeItem )

Discard last item on flex array, optionally calling item free method.

Parameters
[in,out]FlexArrayFlex array to modify.
[in]FreeItemWhether to call item free method.

Definition at line 238 of file FlexArray.c.

◆ OcFlexArrayFree()

VOID OcFlexArrayFree ( IN OC_FLEX_ARRAY ** FlexArray)

Definition at line 211 of file FlexArray.c.

◆ OcFlexArrayFreeContainer()

VOID OcFlexArrayFreeContainer ( IN OC_FLEX_ARRAY ** FlexArray,
IN VOID ** Items,
IN UINTN * Count )

Definition at line 257 of file FlexArray.c.

◆ OcFlexArrayFreePointerItem()

VOID OcFlexArrayFreePointerItem ( IN VOID * Item)

Utility method to free memory pointed to by flex array item when the item is a single pointer, or when the only allocated memory is pointed to by a pointer which is the first element.

Parameters
[in]ItemFlex array item to free.

Definition at line 18 of file FlexArray.c.

◆ OcFlexArrayInit()

OC_FLEX_ARRAY * OcFlexArrayInit ( IN CONST UINTN ItemSize,
IN CONST OC_FLEX_ARRAY_FREE_ITEM FreeItem OPTIONAL )

Initialize flex array.

Parameters
[in]ItemSizeSize of each item in the array.
[in]FreeItemMethod to free one item, called once per item by OcFlexArrayFree; may be NULL if there is nothing pointed to by pool items which needs freeing.
Return values
Non-NULLFlex array was created.
NULLOut of memory.

Definition at line 31 of file FlexArray.c.

◆ OcFlexArrayInsertItem()

VOID * OcFlexArrayInsertItem ( IN OUT OC_FLEX_ARRAY * FlexArray,
IN CONST UINTN InsertIndex )

Insert new item at position in flex array, resizing array if necessary. New item memory is zeroed.

Parameters
[in,out]FlexArrayFlex array to modify.
[in]InsertIndexIndex at which to insert; must be less than or equal to current item count.
Return values
Non-NULLAddress of item created.
NULLOut of memory, in which case FlexArray->Items will be set to NULL, but FlexArray itself will still be allocated.

Definition at line 156 of file FlexArray.c.

◆ OcFlexArrayItemAt()

VOID * OcFlexArrayItemAt ( IN CONST OC_FLEX_ARRAY * FlexArray,
IN CONST UINTN Index )

Return item at index in array.

Parameters
[in,out]FlexArrayFlex array to access.
[in,out]IndexIndex of item to return.
Return values
Non-NULLItem.
NULLOut-of-range item requested. This also ASSERTs.

Definition at line 189 of file FlexArray.c.