]> git.proxmox.com Git - mirror_edk2.git/blobdiff - Tools/Source/GenBuild/org/tianocore/build/pcd/entity/Token.java
1) correct the assert condition for LibPcdSetPtr and LibPcdSetExPtr
[mirror_edk2.git] / Tools / Source / GenBuild / org / tianocore / build / pcd / entity / Token.java
index f5765e1d408fa1e9b7ef2ffc8452235bed26f34d..edcbd80aa2aeed8597163a22faf41f6a94e15e74 100644 (file)
@@ -22,7 +22,6 @@ import java.util.List;
 import java.util.Map;\r
 import java.util.UUID;\r
 \r
-import org.tianocore.build.pcd.action.ActionMessage;\r
 import org.tianocore.build.pcd.exception.EntityException;\r
 \r
 /** This class is to descript a PCD token object. The information of a token mainly \r
@@ -65,11 +64,16 @@ public class Token {
 \r
     ///\r
     /// tokenNumber is allocated by platform. tokenNumber indicate an index for this token in\r
-    /// platform token space.\r
-    /// tokenNumber is defined in SPD, FPD.\r
+    /// platform token space. For Dynamic, dynamicEx type, this number will be re-adjust by\r
+    /// PCD run-time database autogen tools.\r
     ///\r
     public int              tokenNumber;\r
 \r
+    ///\r
+    /// This token number is retrieved from FPD file for DynamicEx type. \r
+    /// \r
+    public int              dynamicExTokenNumber;\r
+\r
     ///\r
     /// All supported PCD type, this value can be retrieved from SPD\r
     /// Currently, only record all PCD type for this token in FPD file.\r
@@ -159,6 +163,17 @@ public class Token {
         return false;\r
     }\r
 \r
+    public boolean isDynamicEx() {\r
+        \r
+        for (int i = 0; i < supportedPcdType.size(); i++) {\r
+            if (supportedPcdType.get(i) == PCD_TYPE.DYNAMIC_EX) {\r
+                return true;\r
+            }\r
+        }\r
+        \r
+        return false;\r
+    }\r
+\r
     /**\r
       Use "TokencName + "-" + SpaceTokenName" as primary key when adding token into database\r
       \r
@@ -189,6 +204,20 @@ public class Token {
         }\r
         return false;\r
     }\r
+    \r
+    public boolean isHiiEnable() {\r
+        if (getDefaultSku().type == DynamicTokenValue.VALUE_TYPE.HII_TYPE) {\r
+            return true;\r
+        }\r
+        return false;\r
+    }\r
+\r
+    public boolean isVpdEnable() {\r
+        if (getDefaultSku().type == DynamicTokenValue.VALUE_TYPE.VPD_TYPE) {\r
+            return true;\r
+        }\r
+        return false;\r
+    }\r
 \r
     /**\r
        Get the token primary key in token database.\r
@@ -466,6 +495,7 @@ public class Token {
 \r
       @return string of datum type.\r
     **/\r
+\r
     public static String getAutogendatumTypeString(DATUM_TYPE datumType) {\r
         switch (datumType) {\r
         case UINT8:\r
@@ -540,6 +570,33 @@ public class Token {
 \r
         return null;\r
     }\r
+    \r
+    public int getSkuIdCount () {\r
+        return this.skuData.size();\r
+    }\r
+    \r
+\r
+    /**\r
+       Get default value for a token, For HII type, HiiDefaultValue of default\r
+       SKU 0 will be returned; For Default type, the defaultvalue of default SKU\r
+       0 will be returned.\r
+       \r
+       @return String\r
+     */\r
+    public String getDynamicDefaultValue() {\r
+        DynamicTokenValue dynamicData = getDefaultSku();\r
+        if (hasDefaultValue()) {\r
+            switch (dynamicData.type) {\r
+            case HII_TYPE:\r
+                return dynamicData.hiiDefaultValue;\r
+            case DEFAULT_TYPE:\r
+                return dynamicData.value;\r
+            }\r
+        }\r
+\r
+        return null;\r
+    }\r
+\r
     //\r
     // BugBug: We need change this algorithm accordingly when schema is updated\r
     //          to support no default value.\r
@@ -549,13 +606,17 @@ public class Token {
         boolean           isInteger     = true;\r
         DynamicTokenValue dynamicValue  = null;\r
 \r
+        if (isSkuEnable()) {\r
+            return true;\r
+        }\r
+        \r
         if (this.isDynamicPCD) {\r
             dynamicValue = getDefaultSku();\r
             switch (dynamicValue.type) {\r
             case HII_TYPE:\r
-                return !isValidNullValue(dynamicValue.hiiDefaultValue);\r
+                return true;\r
             case VPD_TYPE:\r
-                return false;\r
+                return true;\r
             case DEFAULT_TYPE:\r
                 return !isValidNullValue(dynamicValue.value);\r
             }\r
@@ -566,14 +627,25 @@ public class Token {
 \r
     public boolean isValidNullValue(String judgedValue) {\r
         int         intValue;\r
+        String      subStr;\r
         BigInteger  bigIntValue;\r
 \r
         switch (datumType) {\r
         case UINT8:\r
         case UINT16:\r
         case UINT32:\r
-            intValue = Integer.decode(judgedValue);\r
-            if (intValue == 0) {\r
+            if (judgedValue.length() > 2) {\r
+                if ((judgedValue.charAt(0) == '0')        && \r
+                    ((judgedValue.charAt(1) == 'x') || (judgedValue.charAt(1) == 'X'))){\r
+                    subStr      = judgedValue.substring(2, judgedValue.length());\r
+                    bigIntValue = new BigInteger(subStr, 16);\r
+                } else {\r
+                    bigIntValue = new BigInteger(judgedValue);\r
+                }\r
+            } else {\r
+                bigIntValue = new BigInteger(judgedValue);\r
+            }\r
+            if (bigIntValue.bitCount() == 0) {\r
                 return true;\r
             }\r
             break;\r
@@ -616,18 +688,58 @@ public class Token {
         return false;\r
     }\r
 \r
-    public boolean isStringType () {\r
-        String str = getDefaultSku().value;\r
+    /**\r
+       Judege whether current value is UNICODE string type.\r
+       @return boolean\r
+     */\r
+    public boolean isUnicodeStringType () {\r
+        String str = getDynamicDefaultValue();\r
 \r
-        //\r
-        // BUGBUG: need scott confirmation.\r
-        // \r
-        if (datumType == Token.DATUM_TYPE.POINTER) {\r
+        if (str == null) {\r
+            return false;\r
+        }\r
+\r
+        if (datumType == Token.DATUM_TYPE.POINTER &&\r
+            str.startsWith("L\"") && \r
+            str.endsWith("\"")) {\r
             return true;\r
         }\r
 \r
         return false;\r
     }\r
+    \r
+    public boolean isASCIIStringType () {\r
+        String str = getDynamicDefaultValue();\r
+\r
+        if (str == null) {\r
+            return false;\r
+        }\r
+\r
+        if (datumType == Token.DATUM_TYPE.POINTER &&\r
+            str.startsWith("\"") && \r
+            str.endsWith("\"")) {\r
+            return true;\r
+        }\r
+\r
+        return false;\r
+    }\r
+\r
+    public boolean isByteStreamType () {\r
+        String str = getDynamicDefaultValue();\r
+\r
+        if (str == null) {\r
+            return false;\r
+        }\r
+\r
+        if (datumType == Token.DATUM_TYPE.POINTER &&\r
+            str.startsWith("{") && \r
+            str.endsWith("}")) {\r
+            return true;\r
+        }\r
+\r
+        return false;\r
+        \r
+    }\r
 \r
     public String getStringTypeString () {                       \r
         return getDefaultSku().value.substring(2, getDefaultSku().value.length() - 1);\r