]> git.proxmox.com Git - mirror_edk2.git/blame - Tools/Source/GenBuild/org/tianocore/build/toolchain/ToolChainKey.java
New tool.
[mirror_edk2.git] / Tools / Source / GenBuild / org / tianocore / build / toolchain / ToolChainKey.java
CommitLineData
a29c47e0 1/*++\r
2\r
3Copyright (c) 2006, Intel Corporation\r
4All rights reserved. This program and the accompanying materials\r
5are licensed and made available under the terms and conditions of the BSD License\r
6which accompanies this distribution. The full text of the license may be found at\r
7http://opensource.org/licenses/bsd-license.php\r
8\r
9THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
10WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
11\r
12Module Name:\r
13 ToolChainKey.java\r
14\r
15Abstract:\r
16\r
17--*/\r
18\r
19package org.tianocore.build.toolchain;\r
20\r
21import java.io.Serializable;\r
22import java.util.AbstractMap;\r
23import java.util.HashMap;\r
24import java.util.Map;\r
25import java.util.TreeMap;\r
26\r
136adffc 27import org.tianocore.exception.EdkException;\r
a29c47e0 28\r
29public class ToolChainKey implements java.io.Serializable, Comparable<ToolChainKey> {\r
30\r
31 private String delimiter = "_";\r
32\r
33 public final static int keyLength = 5;\r
34\r
35 private String[] keySet = null;\r
36\r
37 private String keyString = null;\r
38\r
39 private int hashValue = 0;\r
40\r
41 public ToolChainKey(String keyString, String delimiter) throws Exception {\r
42 setKey(keyString, delimiter);\r
43 }\r
44\r
45 public ToolChainKey(String keyString) throws EdkException {\r
46 setKey(keyString);\r
47 }\r
48\r
49 public ToolChainKey(String[] keySet) throws EdkException {\r
50 setKey(keySet);\r
51 }\r
52\r
53 public int hashCode() {\r
54 if (hashValue != 0) {\r
55 return hashValue;\r
56 }\r
57\r
58 for (int i = 0; i < keySet.length; ++i) {\r
59 char[] keyStringValue = new char[keySet[i].length()];\r
60 this.keySet[i].getChars(0, keyStringValue.length, keyStringValue, 0);\r
61\r
62 for (int j = 0; j < keyStringValue.length; ++j) {\r
63 hashValue = keyStringValue[j] + hashValue * 31;\r
64 }\r
65 }\r
66\r
67 return hashValue;\r
68 }\r
69\r
70 public int compareTo(ToolChainKey dstKey) {\r
71 String[] dstKeySet = dstKey.getKeySet();\r
72 int result = 0;\r
73 for (int i = 0; i < this.keyLength; ++i) {\r
74 result = this.keySet[i].compareToIgnoreCase(dstKeySet[i]);\r
75 if (result != 0) {\r
76 break;\r
77 }\r
78 }\r
79\r
80 return result;\r
81 }\r
82\r
83 public boolean equals(Object o) {\r
84 ToolChainKey dstKey = (ToolChainKey)o;\r
85 String[] dstKeySet = dstKey.getKeySet();\r
86\r
87 if (this == dstKey) {\r
88 return true;\r
89 }\r
90\r
91 if (dstKeySet.length != this.keyLength) {\r
92 return false;\r
93 }\r
94\r
95 for (int i = 0; i < this.keyLength; ++i) {\r
96 if (!this.keySet[i].equalsIgnoreCase(dstKeySet[i])) {\r
97 return false;\r
98 }\r
99 }\r
100\r
101 return true;\r
102 }\r
103\r
104 public void setKey(String[] keySet) throws EdkException {\r
105 if (keySet.length != this.keyLength) {\r
106 throw new EdkException("Invalid ToolChain key");\r
107 }\r
108\r
109 this.keySet = new String[this.keyLength];\r
110 System.arraycopy(keySet, 0, this.keySet, 0, this.keyLength);\r
111 for (int i = 0; i < this.keyLength; ++i) {\r
112 if (this.keySet[i] == null || this.keySet[i].length() == 0) {\r
113 this.keySet[i] = "*";\r
114 }\r
115 }\r
116 this.keyString = null;\r
117 this.hashValue = 0;\r
118 }\r
119\r
120 public void setKey(String keySetString, int index) throws EdkException {\r
121 if (index >= this.keyLength) {\r
122 throw new EdkException("Invalid ToolChain key index");\r
123 }\r
124\r
125 if (keySetString == null || keySetString.length() == 0) {\r
126 keySetString = "*";\r
127 }\r
128 this.keySet[index] = keySetString;\r
129 this.keyString = null;\r
130 this.hashValue = 0;\r
131 }\r
132\r
133 public void setKey(String keyString) throws EdkException {\r
134 this.keySet = keyString.split(this.delimiter);\r
135\r
136 if (this.keySet.length != this.keyLength) {\r
137 throw new EdkException("Invalid ToolChain key");\r
138 }\r
139\r
140 this.keyString = keyString;\r
141 this.hashValue = 0;\r
142 }\r
143\r
144 public void setKey(String keyString, String delimiter) throws Exception {\r
145 this.keySet = keyString.split(delimiter);\r
146\r
147 if (this.keySet.length != this.keyLength) {\r
148 throw new Exception("Invalid ToolChain key");\r
149 }\r
150\r
151 this.keyString = keyString;\r
152 this.delimiter = delimiter;\r
153 this.hashValue = 0;\r
154 }\r
155\r
156 public String[] getKeySet() {\r
157 return keySet;\r
158 }\r
159\r
160 public String toString() {\r
161 if (this.keyString == null) {\r
162 StringBuffer keyStringBuf = new StringBuffer(64);\r
163 int i = 0;\r
164\r
165 keyStringBuf.append(this.keySet[i++]);\r
166 for (; i < this.keyLength; ++i) {\r
167 keyStringBuf.append(this.delimiter);\r
168 keyStringBuf.append(this.keySet[i]);\r
169 }\r
170\r
171 this.keyString = keyStringBuf.toString();\r
172 }\r
173\r
174 return this.keyString;\r
175 }\r
176}\r
177\r