]> git.proxmox.com Git - mirror_edk2.git/blame - Tools/Source/FrameworkWizard/src/org/tianocore/frameworkwizard/common/Sort.java
Fix track EDKT106 & EDKT112: map LibPcdSetPtr function for PatchPcdSetPtr macro funct...
[mirror_edk2.git] / Tools / Source / FrameworkWizard / src / org / tianocore / frameworkwizard / common / Sort.java
CommitLineData
2003a22e 1/** @file\r
2 \r
3 The file is used to provide all kinds of sorting method \r
4 \r
5 Copyright (c) 2006, Intel Corporation\r
6 All rights reserved. This program and the accompanying materials\r
7 are licensed and made available under the terms and conditions of the BSD License\r
8 which accompanies this distribution. The full text of the license may be found at\r
9 http://opensource.org/licenses/bsd-license.php\r
10 \r
11 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
12 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
13 \r
14 **/\r
15\r
16package org.tianocore.frameworkwizard.common;\r
17\r
18import java.util.Vector;\r
19\r
20import org.tianocore.frameworkwizard.module.Identifications.ModuleIdentification;\r
21import org.tianocore.frameworkwizard.module.Identifications.PcdCoded.PcdIdentification;\r
22import org.tianocore.frameworkwizard.module.Identifications.PcdCoded.PcdVector;\r
23import org.tianocore.frameworkwizard.packaging.PackageIdentification;\r
24import org.tianocore.frameworkwizard.platform.PlatformIdentification;\r
25\r
26public class Sort {\r
27\r
28 /**\r
29 Sort all elements in the vector as the specific sort type\r
30 \r
31 @param v The vector need to be sorted\r
32 @param mode Sort type DataType.Sort_Type_Ascendin and DataType.Sort_Type_Descending\r
33\r
34 **/\r
35 public static void sortVectorString(Vector<String> v, int mode) {\r
36 if (v != null) {\r
37 for (int indexI = 0; indexI < v.size(); indexI++) {\r
38 for (int indexJ = indexI + 1; indexJ < v.size(); indexJ++) {\r
39 if ((v.get(indexJ).compareTo(v.get(indexI)) < 0 && mode == DataType.SORT_TYPE_ASCENDING)\r
40 || (v.get(indexI).compareTo(v.get(indexJ)) < 0 && mode == DataType.SORT_TYPE_DESCENDING)) {\r
41 String temp = v.get(indexI);\r
42 v.setElementAt(v.get(indexJ), indexI);\r
43 v.setElementAt(temp, indexJ);\r
44 }\r
45 }\r
46 }\r
47 }\r
48 }\r
49\r
50 /**\r
51 Sort all elements of vector and return sorted sequence\r
52 \r
53 @param v The vector need to be sorted\r
54 @param mode Sort type DataType.Sort_Type_Ascendin and DataType.Sort_Type_Descending\r
55 @return Vector<Integer> The sorted sequence\r
56 \r
57 **/\r
58 public static Vector<Integer> getVectorSortSequence(Vector<String> v, int mode) {\r
59 Vector<Integer> vSequence = new Vector<Integer>();\r
60 //\r
61 // Init sequence\r
62 //\r
63 if (v != null) {\r
64 for (int index = 0; index < v.size(); index++) {\r
65 vSequence.addElement(index);\r
66 }\r
67 }\r
68\r
69 //\r
70 // sort and get new sequence\r
71 //\r
72 for (int indexI = 0; indexI < v.size(); indexI++) {\r
73 for (int indexJ = indexI + 1; indexJ < v.size(); indexJ++) {\r
74 if ((v.get(indexJ).compareTo(v.get(indexI)) < 0 && mode == DataType.SORT_TYPE_ASCENDING)\r
75 || (v.get(indexI).compareTo(v.get(indexJ)) < 0 && mode == DataType.SORT_TYPE_DESCENDING)) {\r
76 //\r
77 // Swap strings\r
78 //\r
79 String tempStr = v.get(indexI);\r
80 v.setElementAt(v.get(indexJ), indexI);\r
81 v.setElementAt(tempStr, indexJ);\r
82\r
83 //\r
84 // Swap sequences\r
85 //\r
86 int tempInt = vSequence.get(indexI);\r
87 vSequence.setElementAt(vSequence.get(indexJ), indexI);\r
88 vSequence.setElementAt(tempInt, indexJ);\r
89 }\r
90 }\r
91 }\r
92\r
93 return vSequence;\r
94 }\r
95\r
96 /**\r
97 Sort all elements of vector as input sequence\r
98 \r
99 @param v The vector need to be sorted\r
100 @param vSequence The sort sequence should be followed\r
101 \r
102 **/\r
103 public static void sortVectorString(Vector<String> v, Vector<Integer> vSequence) {\r
104 if (v != null && vSequence != null && v.size() == vSequence.size()) {\r
105 Vector<String> tempV = new Vector<String>();\r
106 for (int index = 0; index < v.size(); index++) {\r
107 tempV.addElement(v.get(index));\r
108 }\r
109 for (int index = 0; index < v.size(); index++) {\r
110 v.setElementAt(tempV.get(vSequence.get(index)), index);\r
111 }\r
112 }\r
113 }\r
114\r
115 /**\r
116 Sort all modules\r
117 \r
118 @param v\r
119 @param mode\r
120 \r
121 **/\r
122 public static void sortModules(Vector<ModuleIdentification> v, int mode) {\r
123 if (v != null) {\r
124 //\r
125 // sort by name\r
126 //\r
127 for (int indexI = 0; indexI < v.size(); indexI++) {\r
128 for (int indexJ = indexI + 1; indexJ < v.size(); indexJ++) {\r
129 if ((v.get(indexJ).getName().compareTo(v.get(indexI).getName()) < 0 && mode == DataType.SORT_TYPE_ASCENDING)\r
130 || (v.get(indexI).getName().compareTo(v.get(indexJ).getName()) < 0 && mode == DataType.SORT_TYPE_DESCENDING)) {\r
131 ModuleIdentification temp = v.get(indexI);\r
132 v.setElementAt(v.get(indexJ), indexI);\r
133 v.setElementAt(temp, indexJ);\r
134 }\r
135 }\r
136 }\r
137 }\r
138 }\r
139\r
140 /**\r
141 Sort all packages\r
142 \r
143 @param v\r
144 @param mode\r
145 \r
146 **/\r
147 public static void sortPackages(Vector<PackageIdentification> v, int mode) {\r
148 if (v != null) {\r
149 //\r
150 // sort by name\r
151 //\r
152 for (int indexI = 0; indexI < v.size(); indexI++) {\r
153 for (int indexJ = indexI + 1; indexJ < v.size(); indexJ++) {\r
154 if ((v.get(indexJ).getName().compareTo(v.get(indexI).getName()) < 0 && mode == DataType.SORT_TYPE_ASCENDING)\r
155 || (v.get(indexI).getName().compareTo(v.get(indexJ).getName()) < 0 && mode == DataType.SORT_TYPE_DESCENDING)) {\r
156 PackageIdentification temp = v.get(indexI);\r
157 v.setElementAt(v.get(indexJ), indexI);\r
158 v.setElementAt(temp, indexJ);\r
159 }\r
160 }\r
161 }\r
162 }\r
163 }\r
164\r
165 /**\r
166 Sort all platforms\r
167 \r
168 @param v\r
169 @param mode\r
170 \r
171 **/\r
172 public static void sortPlatforms(Vector<PlatformIdentification> v, int mode) {\r
173 if (v != null) {\r
174 //\r
175 // sort by name\r
176 //\r
177 for (int indexI = 0; indexI < v.size(); indexI++) {\r
178 for (int indexJ = indexI + 1; indexJ < v.size(); indexJ++) {\r
179 if ((v.get(indexJ).getName().compareTo(v.get(indexI).getName()) < 0 && mode == DataType.SORT_TYPE_ASCENDING)\r
180 || (v.get(indexI).getName().compareTo(v.get(indexJ).getName()) < 0 && mode == DataType.SORT_TYPE_DESCENDING)) {\r
181 PlatformIdentification temp = v.get(indexI);\r
182 v.setElementAt(v.get(indexJ), indexI);\r
183 v.setElementAt(temp, indexJ);\r
184 }\r
185 }\r
186 }\r
187 }\r
188 }\r
189\r
190 /**\r
191 Sort all pcd entries\r
192 \r
193 @param v\r
194 @param mode\r
195 \r
196 **/\r
197 public static void sortPcds(PcdVector v, int mode) {\r
198 if (v != null) {\r
199 //\r
200 // sort by name\r
201 //\r
202 for (int indexI = 0; indexI < v.size(); indexI++) {\r
203 for (int indexJ = indexI + 1; indexJ < v.size(); indexJ++) {\r
204 if ((v.getPcd(indexJ).getName().compareTo(v.getPcd(indexI).getName()) < 0 && mode == DataType.SORT_TYPE_ASCENDING)\r
205 || (v.getPcd(indexI).getName().compareTo(v.getPcd(indexJ).getName()) < 0 && mode == DataType.SORT_TYPE_DESCENDING)) {\r
206 PcdIdentification temp = v.getPcd(indexI);\r
207 v.setPcd(v.getPcd(indexJ), indexI);\r
208 v.setPcd(temp, indexJ);\r
209 }\r
210 }\r
211 }\r
212 }\r
213 }\r
214\r
215 /**\r
216 Sort all objects of a vector based on the object's "toString"\r
217 \r
218 @param v\r
219 @param mode\r
220 \r
221 **/\r
222 public static void sortObjectVector(Vector<Object> v, int mode) {\r
223 if (v != null) {\r
224 //\r
225 // sort by name\r
226 //\r
227 for (int indexI = 0; indexI < v.size(); indexI++) {\r
228 for (int indexJ = indexI + 1; indexJ < v.size(); indexJ++) {\r
229 if ((v.get(indexJ).toString().compareTo(v.get(indexI).toString()) < 0 && mode == DataType.SORT_TYPE_ASCENDING)\r
230 || (v.get(indexI).toString().compareTo(v.get(indexJ).toString()) < 0 && mode == DataType.SORT_TYPE_DESCENDING)) {\r
231 Object temp = v.get(indexI);\r
232 v.setElementAt(v.get(indexJ), indexI);\r
233 v.setElementAt(temp, indexJ);\r
234 }\r
235 }\r
236 }\r
237 }\r
238 }\r
239}\r