]> git.proxmox.com Git - mirror_edk2.git/blame_incremental - MdeModulePkg/Library/BaseSortLib/BaseSortLib.c
UefiCpuPkg: Move AsmRelocateApLoopStart from Mpfuncs.nasm to AmdSev.nasm
[mirror_edk2.git] / MdeModulePkg / Library / BaseSortLib / BaseSortLib.c
... / ...
CommitLineData
1/** @file\r
2 Library used for sorting routines.\r
3\r
4 Copyright (c) 2009 - 2021, Intel Corporation. All rights reserved. <BR>\r
5 SPDX-License-Identifier: BSD-2-Clause-Patent\r
6\r
7**/\r
8#include <Uefi.h>\r
9\r
10#include <Library/BaseLib.h>\r
11#include <Library/BaseMemoryLib.h>\r
12#include <Library/DebugLib.h>\r
13#include <Library/MemoryAllocationLib.h>\r
14#include <Library/SortLib.h>\r
15\r
16/**\r
17 Function to perform a Quick Sort alogrithm on a buffer of comparable elements.\r
18\r
19 Each element must be equal sized.\r
20\r
21 if BufferToSort is NULL, then ASSERT.\r
22 if CompareFunction is NULL, then ASSERT.\r
23\r
24 if Count is < 2 then perform no action.\r
25 if Size is < 1 then perform no action.\r
26\r
27 @param[in, out] BufferToSort on call a Buffer of (possibly sorted) elements\r
28 on return a buffer of sorted elements\r
29 @param[in] Count the number of elements in the buffer to sort\r
30 @param[in] ElementSize Size of an element in bytes\r
31 @param[in] CompareFunction The function to call to perform the comparison\r
32 of any 2 elements\r
33**/\r
34VOID\r
35EFIAPI\r
36PerformQuickSort (\r
37 IN OUT VOID *BufferToSort,\r
38 IN CONST UINTN Count,\r
39 IN CONST UINTN ElementSize,\r
40 IN SORT_COMPARE CompareFunction\r
41 )\r
42{\r
43 VOID *Buffer;\r
44\r
45 ASSERT (BufferToSort != NULL);\r
46 ASSERT (CompareFunction != NULL);\r
47\r
48 Buffer = AllocateZeroPool (ElementSize);\r
49 ASSERT (Buffer != NULL);\r
50\r
51 QuickSort (\r
52 BufferToSort,\r
53 Count,\r
54 ElementSize,\r
55 CompareFunction,\r
56 Buffer\r
57 );\r
58\r
59 FreePool (Buffer);\r
60 return;\r
61}\r
62\r
63/**\r
64 Not supported in Base version.\r
65\r
66 @param[in] Buffer1 Ignored.\r
67 @param[in] Buffer2 Ignored.\r
68\r
69 ASSERT and return 0.\r
70**/\r
71INTN\r
72EFIAPI\r
73DevicePathCompare (\r
74 IN CONST VOID *Buffer1,\r
75 IN CONST VOID *Buffer2\r
76 )\r
77{\r
78 ASSERT (FALSE);\r
79 return 0;\r
80}\r
81\r
82/**\r
83 Not supported in Base version.\r
84\r
85 @param[in] Buffer1 Ignored.\r
86 @param[in] Buffer2 Ignored.\r
87\r
88 ASSERT and return 0.\r
89**/\r
90INTN\r
91EFIAPI\r
92StringNoCaseCompare (\r
93 IN CONST VOID *Buffer1,\r
94 IN CONST VOID *Buffer2\r
95 )\r
96{\r
97 ASSERT (FALSE);\r
98 return 0;\r
99}\r
100\r
101/**\r
102 Not supported in Base version.\r
103\r
104 @param[in] Buffer1 Ignored.\r
105 @param[in] Buffer2 Ignored.\r
106\r
107 ASSERT and return 0.\r
108**/\r
109INTN\r
110EFIAPI\r
111StringCompare (\r
112 IN CONST VOID *Buffer1,\r
113 IN CONST VOID *Buffer2\r
114 )\r
115{\r
116 ASSERT (FALSE);\r
117 return 0;\r
118}\r