DynamicTablesPkg: Add code for finding duplicate values in arrays

Added generic function for detecting duplicate values in an array.

Also defined a function prototype to test if two objects are equal.
The prototype is used as an argument to the 'FindDuplicateValues'
function.

Signed-off-by: Krzysztof Koch <krzysztof.koch@arm.com>
Reviewed-by: Alexei Fedorov <Alexei.Fedorov@arm.com>
Reviewed-by: Sami Mujawar <sami.mujawar@arm.com>
This commit is contained in:
Krzysztof Koch
2019-04-09 10:41:40 +01:00
committed by Sami Mujawar
parent 75bf10a689
commit c1b53091f6
2 changed files with 112 additions and 0 deletions

View File

@@ -4,6 +4,9 @@
SPDX-License-Identifier: BSD-2-Clause-Patent
@par Glossary:
- PFN - Pointer to a Function
**/
#ifndef TABLE_HELPER_LIB_H_
@@ -59,4 +62,49 @@ AddAcpiHeader (
IN CONST UINT32 Length
);
/**
Function prototype for testing if two arbitrary objects are equal.
@param [in] Object1 Pointer to the first object to compare.
@param [in] Object2 Pointer to the second object to compare.
@param [in] Index1 Index of Object1. This value is optional and
can be ignored by the specified implementation.
@param [in] Index2 Index of Object2. This value is optional and
can be ignored by the specified implementation.
@retval TRUE Object1 and Object2 are equal.
@retval FALSE Object1 and Object2 are NOT equal.
**/
typedef
BOOLEAN
(EFIAPI *PFN_IS_EQUAL)(
IN CONST VOID * Object1,
IN CONST VOID * Object2,
IN UINTN Index1 OPTIONAL,
IN UINTN Index2 OPTIONAL
);
/**
Test and report if a duplicate entry exists in the given array of comparable
elements.
@param [in] Array Array of elements to test for duplicates.
@param [in] Count Number of elements in Array.
@param [in] ElementSize Size of an element in bytes
@param [in] EqualTestFunction The function to call to check if any two
elements are equal.
@retval TRUE A duplicate element was found or one of
the input arguments is invalid.
@retval FALSE Every element in Array is unique.
**/
BOOLEAN
EFIAPI
FindDuplicateValue (
IN CONST VOID * Array,
IN CONST UINTN Count,
IN CONST UINTN ElementSize,
IN PFN_IS_EQUAL EqualTestFunction
);
#endif // TABLE_HELPER_LIB_H_