]> git.proxmox.com Git - mirror_edk2.git/blame - Tools/Source/GenBuild/org/tianocore/build/toolchain/ToolChainKey.java
Added copyright&license header.
[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
a29c47e0 12--*/\r
13\r
14package org.tianocore.build.toolchain;\r
15\r
136adffc 16import org.tianocore.exception.EdkException;\r
a29c47e0 17\r
18public class ToolChainKey implements java.io.Serializable, Comparable<ToolChainKey> {\r
a84091c4 19 static final long serialVersionUID = -8034897190740066933L;\r
a29c47e0 20 private String delimiter = "_";\r
21\r
22 public final static int keyLength = 5;\r
23\r
24 private String[] keySet = null;\r
25\r
26 private String keyString = null;\r
27\r
28 private int hashValue = 0;\r
29\r
30 public ToolChainKey(String keyString, String delimiter) throws Exception {\r
31 setKey(keyString, delimiter);\r
32 }\r
33\r
34 public ToolChainKey(String keyString) throws EdkException {\r
35 setKey(keyString);\r
36 }\r
37\r
38 public ToolChainKey(String[] keySet) throws EdkException {\r
39 setKey(keySet);\r
40 }\r
41\r
42 public int hashCode() {\r
43 if (hashValue != 0) {\r
44 return hashValue;\r
45 }\r
46\r
47 for (int i = 0; i < keySet.length; ++i) {\r
48 char[] keyStringValue = new char[keySet[i].length()];\r
49 this.keySet[i].getChars(0, keyStringValue.length, keyStringValue, 0);\r
50\r
51 for (int j = 0; j < keyStringValue.length; ++j) {\r
52 hashValue = keyStringValue[j] + hashValue * 31;\r
53 }\r
54 }\r
55\r
56 return hashValue;\r
57 }\r
58\r
59 public int compareTo(ToolChainKey dstKey) {\r
60 String[] dstKeySet = dstKey.getKeySet();\r
61 int result = 0;\r
62 for (int i = 0; i < this.keyLength; ++i) {\r
63 result = this.keySet[i].compareToIgnoreCase(dstKeySet[i]);\r
64 if (result != 0) {\r
65 break;\r
66 }\r
67 }\r
68\r
69 return result;\r
70 }\r
71\r
72 public boolean equals(Object o) {\r
73 ToolChainKey dstKey = (ToolChainKey)o;\r
74 String[] dstKeySet = dstKey.getKeySet();\r
75\r
76 if (this == dstKey) {\r
77 return true;\r
78 }\r
79\r
80 if (dstKeySet.length != this.keyLength) {\r
81 return false;\r
82 }\r
83\r
84 for (int i = 0; i < this.keyLength; ++i) {\r
85 if (!this.keySet[i].equalsIgnoreCase(dstKeySet[i])) {\r
86 return false;\r
87 }\r
88 }\r
89\r
90 return true;\r
91 }\r
92\r
93 public void setKey(String[] keySet) throws EdkException {\r
94 if (keySet.length != this.keyLength) {\r
95 throw new EdkException("Invalid ToolChain key");\r
96 }\r
97\r
98 this.keySet = new String[this.keyLength];\r
99 System.arraycopy(keySet, 0, this.keySet, 0, this.keyLength);\r
100 for (int i = 0; i < this.keyLength; ++i) {\r
101 if (this.keySet[i] == null || this.keySet[i].length() == 0) {\r
102 this.keySet[i] = "*";\r
103 }\r
104 }\r
105 this.keyString = null;\r
106 this.hashValue = 0;\r
107 }\r
108\r
109 public void setKey(String keySetString, int index) throws EdkException {\r
110 if (index >= this.keyLength) {\r
111 throw new EdkException("Invalid ToolChain key index");\r
112 }\r
113\r
114 if (keySetString == null || keySetString.length() == 0) {\r
115 keySetString = "*";\r
116 }\r
117 this.keySet[index] = keySetString;\r
118 this.keyString = null;\r
119 this.hashValue = 0;\r
120 }\r
121\r
122 public void setKey(String keyString) throws EdkException {\r
123 this.keySet = keyString.split(this.delimiter);\r
124\r
125 if (this.keySet.length != this.keyLength) {\r
126 throw new EdkException("Invalid ToolChain key");\r
127 }\r
128\r
129 this.keyString = keyString;\r
130 this.hashValue = 0;\r
131 }\r
132\r
133 public void setKey(String keyString, String delimiter) throws Exception {\r
134 this.keySet = keyString.split(delimiter);\r
135\r
136 if (this.keySet.length != this.keyLength) {\r
137 throw new Exception("Invalid ToolChain key");\r
138 }\r
139\r
140 this.keyString = keyString;\r
141 this.delimiter = delimiter;\r
142 this.hashValue = 0;\r
143 }\r
144\r
145 public String[] getKeySet() {\r
146 return keySet;\r
147 }\r
148\r
149 public String toString() {\r
150 if (this.keyString == null) {\r
151 StringBuffer keyStringBuf = new StringBuffer(64);\r
152 int i = 0;\r
153\r
154 keyStringBuf.append(this.keySet[i++]);\r
155 for (; i < this.keyLength; ++i) {\r
156 keyStringBuf.append(this.delimiter);\r
157 keyStringBuf.append(this.keySet[i]);\r
158 }\r
159\r
160 this.keyString = keyStringBuf.toString();\r
161 }\r
162\r
163 return this.keyString;\r
164 }\r
165}\r
166\r