]> git.proxmox.com Git - mirror_edk2.git/blobdiff - Tools/Java/Source/GenBuild/org/tianocore/build/pcd/action/PcdDatabase.java
Retiring the ANT/JAVA build and removing the older EDK II packages that required...
[mirror_edk2.git] / Tools / Java / Source / GenBuild / org / tianocore / build / pcd / action / PcdDatabase.java
diff --git a/Tools/Java/Source/GenBuild/org/tianocore/build/pcd/action/PcdDatabase.java b/Tools/Java/Source/GenBuild/org/tianocore/build/pcd/action/PcdDatabase.java
deleted file mode 100644 (file)
index d848d1f..0000000
+++ /dev/null
@@ -1,1740 +0,0 @@
-/** @file\r
-  PcdDatabase class.\r
-\r
-Copyright (c) 2006, Intel Corporation\r
-All rights reserved. This program and the accompanying materials\r
-are licensed and made available under the terms and conditions of the BSD License\r
-which accompanies this distribution.  The full text of the license may be found at\r
-http://opensource.org/licenses/bsd-license.php\r
-\r
-THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
-WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
-\r
-**/\r
-package org.tianocore.build.pcd.action;\r
-\r
-import java.util.ArrayList;\r
-import java.util.Comparator;\r
-import java.util.HashMap;\r
-import java.util.List;\r
-import java.util.Map;\r
-import java.util.UUID;\r
-import org.tianocore.pcd.entity.DynamicTokenValue;\r
-import org.tianocore.pcd.entity.Token;\r
-import org.tianocore.pcd.exception.EntityException;\r
-\r
-/**\r
-    CStructTypeDeclaration\r
-\r
-    This class is used to store the declaration string, such as\r
-    "UINT32 PcdPlatformFlashBaseAddress", of\r
-    each memember in the C structure, which is a standard C language\r
-    feature used to implement a simple and efficient database for\r
-    dynamic(ex) type PCD entry.\r
-**/\r
-class CStructTypeDeclaration {\r
-    String key;\r
-    int alignmentSize;\r
-    String cCode;\r
-    boolean initTable;\r
-\r
-    public CStructTypeDeclaration (String key, int alignmentSize, String cCode, boolean initTable) {\r
-        this.key = key;\r
-        this.alignmentSize = alignmentSize;\r
-        this.cCode = cCode;\r
-        this.initTable = initTable;\r
-    }\r
-}\r
-\r
-/**\r
-    StringTable\r
-\r
-    This class is used to store the String in a PCD database.\r
-\r
-**/\r
-class StringTable {\r
-    class UnicodeString {\r
-        //\r
-        // In Schema, we define VariableName in DynamicPcdBuildDefinitions in FPD\r
-        // file to be HexWordArrayType. For example, Unicode String L"Setup" is \r
-        // <VariableName>0x0053 0x0065 0x0074 0x0075 0x0070</VariableName>. \r
-        // We use raw to differentiate if the String is in form of L"Setup" (raw is false) or\r
-        // in form of {0x0053, 0x0065, 0x0074, 0x0075, 0x0070}\r
-        //\r
-        // This str is the string that can be pasted directly into the C structure. \r
-        // For example, this str can be two forms:\r
-        //      \r
-        //      L"Setup",\r
-        //      {0x0053, 0065, 0x0074, 0x0075, 0x0070, 0x0000}, //This is another form of L"Setup"\r
-        //\r
-        public String      str;\r
-        //\r
-        // This len includes the NULL character at the end of the String.\r
-        //\r
-        public int         len;\r
-        \r
-        public UnicodeString (String str, int len) {\r
-            this.str = str;\r
-            this.len = len;\r
-        }\r
-    }\r
-    \r
-    private ArrayList<UnicodeString>   al;\r
-    private ArrayList<String>   alComments;\r
-    private String              phase;\r
-    int                         stringTableCharNum;\r
-\r
-    public StringTable (String phase) {\r
-        this.phase = phase;\r
-        al = new ArrayList<UnicodeString>();\r
-        alComments = new ArrayList<String>();\r
-        stringTableCharNum = 0;\r
-    }\r
-\r
-    public String getSizeMacro () {\r
-        return String.format(PcdDatabase.StringTableSizeMacro, phase, getSize());\r
-    }\r
-\r
-    private int getSize () {\r
-        //\r
-        // We have at least one Unicode Character in the table.\r
-        //\r
-        return stringTableCharNum == 0 ? 1 : stringTableCharNum;\r
-    }\r
-\r
-    public String getExistanceMacro () {\r
-        return String.format(PcdDatabase.StringTableExistenceMacro, phase, (al.size() == 0)? "TRUE":"FALSE");\r
-    }\r
-\r
-    public void genCode (ArrayList<CStructTypeDeclaration> declaList, HashMap<String, String> instTable) {\r
-        final String stringTable = "StringTable";\r
-        final String tab         = "\t";\r
-        final String newLine     = "\r\n";\r
-        final String commaNewLine = ",\r\n";\r
-\r
-        CStructTypeDeclaration decl;\r
-\r
-        String cDeclCode = "";\r
-        String cInstCode = "";\r
-\r
-        //\r
-        // If we have a empty StringTable\r
-        //\r
-        if (al.size() == 0) {\r
-            cDeclCode += String.format("%-20s%s[1]; /* StringTable is empty */", "UINT16", stringTable) + newLine;\r
-            decl = new CStructTypeDeclaration (\r
-                                                stringTable,\r
-                                                2,\r
-                                                cDeclCode,\r
-                                                true\r
-                                        );\r
-            declaList.add(decl);\r
-\r
-            cInstCode = String.format("/* %s */", stringTable) + newLine + tab + "{ 0 }";\r
-            instTable.put(stringTable, cInstCode);\r
-        } else {\r
-\r
-            //\r
-            // If there is any String in the StringTable\r
-            //\r
-            for (int i = 0; i < al.size(); i++) {\r
-                UnicodeString uStr = al.get(i);\r
-                String stringTableName;\r
-\r
-                if (i == 0) {\r
-                    //\r
-                    // StringTable is a well-known name in the PCD DXE driver\r
-                    //\r
-                    stringTableName = stringTable;\r
-\r
-                } else {\r
-                    stringTableName = String.format("%s_%d", stringTable, i);\r
-                    cDeclCode += tab;\r
-                }\r
-                cDeclCode += String.format("%-20s%s[%d]; /* %s */", "UINT16",\r
-                                           stringTableName, uStr.len,\r
-                                           alComments.get(i))\r
-                             + newLine;\r
-\r
-                if (i == 0) {\r
-                    cInstCode = "/* StringTable */" + newLine;\r
-                }\r
-\r
-                cInstCode += tab + String.format("%s /* %s */", uStr.str, alComments.get(i));\r
-                if (i != al.size() - 1) {\r
-                    cInstCode += commaNewLine;\r
-                }\r
-            }\r
-\r
-            decl = new CStructTypeDeclaration (\r
-                    stringTable,\r
-                    2,\r
-                    cDeclCode,\r
-                    true\r
-            );\r
-            declaList.add(decl);\r
-\r
-            instTable.put(stringTable, cInstCode);\r
-        }\r
-    }\r
-    \r
-    public int add (List inputStr, Token token) {\r
-        String str;\r
-        \r
-        str = "{";\r
-        \r
-        for (int i = 0; i < inputStr.size(); i++) {\r
-            str += " " + inputStr.get(i) + ",";\r
-        }\r
-        \r
-        str +=  " 0x0000";\r
-            \r
-        str += "}";\r
-        //\r
-        // This is a raw Unicode String\r
-        //\r
-        return addToTable (str, inputStr.size() + 1, token);\r
-    }\r
-\r
-    public int add (String inputStr, Token token) {\r
-\r
-        int len;\r
-        String str = inputStr;\r
-\r
-        //\r
-        // The input can be two types:\r
-        // "L\"Bootmode\"" or "Bootmode".\r
-        // We drop the L\" and \" for the first type.\r
-        if (str.startsWith("L\"") && str.endsWith("\"")) {\r
-            //\r
-            // Substract the character of "L", """, """.\r
-            // and add in the NULL character. So it is 2.\r
-            //\r
-            len = str.length() - 2;\r
-        } else {\r
-            //\r
-            // Include the NULL character.\r
-            //\r
-            len = str.length() + 1;\r
-            str = "L\"" + str + "\"";\r
-        }\r
-        \r
-        //\r
-        // After processing, this is L"A String Sample" type of string.\r
-        //\r
-        return addToTable (str, len, token);\r
-    }\r
-    \r
-    private int addToTable (String inputStr, int len, Token token) {\r
-        int i;\r
-        int pos;\r
-\r
-        //\r
-        // Check if StringTable has this String already.\r
-        // If so, return the current pos.\r
-        //\r
-        for (i = 0, pos = 0; i < al.size(); i++) {\r
-            UnicodeString s = al.get(i);;\r
-\r
-            if (inputStr.equals(s.str)) {\r
-                return pos;\r
-            }\r
-            pos += s.len;\r
-        }\r
-\r
-        i = stringTableCharNum;\r
-        //\r
-        // Include the NULL character at the end of String\r
-        //\r
-        stringTableCharNum += len;\r
-        al.add(new UnicodeString(inputStr, len));\r
-        alComments.add(token.getPrimaryKeyString());\r
-\r
-        return i;\r
-    }\r
-}\r
-\r
-/**\r
-    SizeTable\r
-\r
-    This class is used to store the Size information for\r
-    POINTER TYPE PCD entry in a PCD database.\r
-\r
-**/\r
-class SizeTable {\r
-    private ArrayList<ArrayList<Integer>>  al;\r
-    private ArrayList<String>   alComments;\r
-    private int                 len;\r
-    private String              phase;\r
-\r
-    public SizeTable (String phase) {\r
-        al = new ArrayList<ArrayList<Integer>>();\r
-        alComments = new ArrayList<String>();\r
-        len = 0;\r
-        this.phase = phase;\r
-    }\r
-\r
-    public String getSizeMacro () {\r
-        return String.format(PcdDatabase.SizeTableSizeMacro, phase, getSize());\r
-    }\r
-\r
-    private int getSize() {\r
-        return len == 0 ? 1 : len;\r
-    }\r
-\r
-    public void genCode (ArrayList<CStructTypeDeclaration> declaList, HashMap<String, String> instTable, String phase) {\r
-        final String name = "SizeTable";\r
-\r
-        CStructTypeDeclaration decl;\r
-        String cCode;\r
-\r
-        cCode = String.format(PcdDatabase.SizeTableDeclaration, phase);\r
-        decl = new CStructTypeDeclaration (\r
-                                            name,\r
-                                            2,\r
-                                            cCode,\r
-                                            true\r
-                                           );\r
-        declaList.add(decl);\r
-\r
-\r
-        cCode = PcdDatabase.genInstantiationStr(getInstantiation());\r
-        instTable.put(name, cCode);\r
-    }\r
-\r
-    private ArrayList<String> getInstantiation () {\r
-        final String comma   = ",";\r
-        ArrayList<String> Output = new ArrayList<String>();\r
-\r
-        Output.add("/* SizeTable */");\r
-        Output.add("{");\r
-        if (al.size() == 0) {\r
-            Output.add("\t0");\r
-        } else {\r
-            for (int index = 0; index < al.size(); index++) {\r
-                ArrayList<Integer> ial = al.get(index);\r
-\r
-                String str = "\t";\r
-\r
-                for (int index2 = 0; index2 < ial.size(); index2++) {\r
-                    str += " " + ial.get(index2).toString();\r
-                    if (index2 != ial.size() - 1) {\r
-                        str += comma;\r
-                    }\r
-                }\r
-\r
-                str += " /* " + alComments.get(index) + " */";\r
-\r
-                if (index != (al.size() - 1)) {\r
-                    str += comma;\r
-                }\r
-\r
-                Output.add(str);\r
-\r
-            }\r
-        }\r
-        Output.add("}");\r
-\r
-        return Output;\r
-    }\r
-\r
-    public void add (Token token) {\r
-\r
-        //\r
-        // We only have size information for POINTER type PCD entry.\r
-        //\r
-        if (token.datumType != Token.DATUM_TYPE.POINTER) {\r
-            return;\r
-        }\r
-\r
-        ArrayList<Integer> ial = token.getPointerTypeSize();\r
-\r
-        len+= ial.size();\r
-\r
-        al.add(ial);\r
-        alComments.add(token.getPrimaryKeyString());\r
-\r
-        return;\r
-    }\r
-\r
-}\r
-\r
-/**\r
-    GuidTable\r
-\r
-    This class is used to store the GUIDs in a PCD database.\r
-**/\r
-class GuidTable {\r
-    private ArrayList<UUID> al;\r
-    private ArrayList<String> alComments;\r
-    private String          phase;\r
-    private int             len;\r
-    private int             bodyLineNum;\r
-\r
-    public GuidTable (String phase) {\r
-        this.phase = phase;\r
-        al = new ArrayList<UUID>();\r
-        alComments = new ArrayList<String>();\r
-        len = 0;\r
-        bodyLineNum = 0;\r
-    }\r
-\r
-    public String getSizeMacro () {\r
-        return String.format(PcdDatabase.GuidTableSizeMacro, phase, getSize());\r
-    }\r
-\r
-    private int getSize () {\r
-        return (al.size() == 0)? 1 : al.size();\r
-    }\r
-\r
-    public String getExistanceMacro () {\r
-        return String.format(PcdDatabase.GuidTableExistenceMacro, phase, (al.size() == 0)? "TRUE":"FALSE");\r
-    }\r
-\r
-    public void genCode (ArrayList<CStructTypeDeclaration> declaList, HashMap<String, String> instTable, String phase) {\r
-        final String name = "GuidTable";\r
-\r
-        CStructTypeDeclaration decl;\r
-        String cCode = "";\r
-\r
-        cCode += String.format(PcdDatabase.GuidTableDeclaration, phase);\r
-        decl = new CStructTypeDeclaration (\r
-                                            name,\r
-                                            4,\r
-                                            cCode,\r
-                                            true\r
-                                           );\r
-        declaList.add(decl);\r
-\r
-\r
-        cCode = PcdDatabase.genInstantiationStr(getInstantiation());\r
-        instTable.put(name, cCode);\r
-    }\r
-\r
-    private String getUuidCString (UUID uuid) {\r
-        String[]  guidStrArray;\r
-\r
-        guidStrArray =(uuid.toString()).split("-");\r
-\r
-        return String.format("{0x%s, 0x%s, 0x%s, {0x%s, 0x%s, 0x%s, 0x%s, 0x%s, 0x%s, 0x%s, 0x%s}}",\r
-                                         guidStrArray[0],\r
-                                         guidStrArray[1],\r
-                                         guidStrArray[2],\r
-                                        (guidStrArray[3].substring(0, 2)),\r
-                                        (guidStrArray[3].substring(2, 4)),\r
-                                        (guidStrArray[4].substring(0, 2)),\r
-                                        (guidStrArray[4].substring(2, 4)),\r
-                                        (guidStrArray[4].substring(4, 6)),\r
-                                        (guidStrArray[4].substring(6, 8)),\r
-                                        (guidStrArray[4].substring(8, 10)),\r
-                                        (guidStrArray[4].substring(10, 12))\r
-                                        );\r
-    }\r
-\r
-    private ArrayList<String> getInstantiation () {\r
-        ArrayList<String> Output = new ArrayList<String>();\r
-\r
-        Output.add("/* GuidTable */");\r
-        Output.add("{");\r
-\r
-        if (al.size() == 0) {\r
-            Output.add("\t" + getUuidCString(new UUID(0, 0)));\r
-        }\r
-\r
-        for (int i = 0; i < al.size(); i++) {\r
-            String str = "\t" + getUuidCString(al.get(i));\r
-\r
-            str += "/* " + alComments.get(i) +  " */";\r
-            if (i != (al.size() - 1)) {\r
-                str += ",";\r
-            }\r
-            Output.add(str);\r
-            bodyLineNum++;\r
-\r
-        }\r
-        Output.add("}");\r
-\r
-        return Output;\r
-    }\r
-\r
-    public int add (UUID uuid, String name) {\r
-        //\r
-        // Check if GuidTable has this entry already.\r
-        // If so, return the GuidTable index.\r
-        //\r
-        for (int i = 0; i < al.size(); i++) {\r
-            if (al.get(i).compareTo(uuid) == 0) {\r
-                return i;\r
-            }\r
-        }\r
-\r
-        len++;\r
-        al.add(uuid);\r
-        alComments.add(name);\r
-\r
-        //\r
-        // Return the previous Table Index\r
-        //\r
-        return len - 1;\r
-    }\r
-\r
-}\r
-\r
-/**\r
-    SkuIdTable\r
-\r
-    This class is used to store the SKU IDs in a PCD database.\r
-\r
-**/\r
-class SkuIdTable {\r
-    private ArrayList<Integer[]> al;\r
-    private ArrayList<String>    alComment;\r
-    private String               phase;\r
-    private int                  len;\r
-\r
-    public SkuIdTable (String phase) {\r
-        this.phase = phase;\r
-        al = new ArrayList<Integer[]>();\r
-        alComment = new ArrayList<String>();\r
-        len = 0;\r
-    }\r
-\r
-    public String getSizeMacro () {\r
-        return String.format(PcdDatabase.SkuIdTableSizeMacro, phase, getSize());\r
-    }\r
-\r
-    private int getSize () {\r
-        return (len == 0)? 1 : len;\r
-    }\r
-\r
-    public String getExistanceMacro () {\r
-        return String.format(PcdDatabase.SkuTableExistenceMacro, phase, (al.size() == 0)? "TRUE":"FALSE");\r
-    }\r
-\r
-    public void genCode (ArrayList<CStructTypeDeclaration> declaList, HashMap<String, String> instTable, String phase) {\r
-        final String name = "SkuIdTable";\r
-\r
-        CStructTypeDeclaration decl;\r
-        String cCode = "";\r
-\r
-        cCode += String.format(PcdDatabase.SkuIdTableDeclaration, phase);\r
-        decl = new CStructTypeDeclaration (\r
-                                            name,\r
-                                            1,\r
-                                            cCode,\r
-                                            true\r
-                                           );\r
-        declaList.add(decl);\r
-\r
-\r
-        cCode = PcdDatabase.genInstantiationStr(getInstantiation());\r
-        instTable.put(name, cCode);\r
-\r
-        //\r
-        // SystemSkuId is in PEI phase PCD Database\r
-        //\r
-        if (phase.equalsIgnoreCase("PEI")) {\r
-            decl = new CStructTypeDeclaration (\r
-                                                "SystemSkuId",\r
-                                                1,\r
-                                                String.format("%-20sSystemSkuId;\r\n", "SKU_ID"),\r
-                                                true\r
-                                              );\r
-            declaList.add(decl);\r
-\r
-            instTable.put("SystemSkuId", "0");\r
-        }\r
-\r
-    }\r
-\r
-    private ArrayList<String> getInstantiation () {\r
-        ArrayList<String> Output = new ArrayList<String> ();\r
-\r
-        Output.add("/* SkuIdTable */");\r
-        Output.add("{");\r
-\r
-        if (al.size() == 0) {\r
-            Output.add("\t0");\r
-        }\r
-\r
-        for (int index = 0; index < al.size(); index++) {\r
-            String str;\r
-\r
-            str = "/* " + alComment.get(index) + "*/ ";\r
-            str += "/* MaxSku */ ";\r
-\r
-\r
-            Integer[] ia = al.get(index);\r
-\r
-            str += "\t" + ia[0].toString() + ", ";\r
-            for (int index2 = 1; index2 < ia.length; index2++) {\r
-               str += ia[index2].toString();\r
-               if (!((index2 == ia.length - 1) && (index == al.size() - 1))) {\r
-                   str += ", ";\r
-               }\r
-            }\r
-\r
-            Output.add(str);\r
-\r
-        }\r
-\r
-        Output.add("}");\r
-\r
-        return Output;\r
-    }\r
-\r
-    public int add (Token token) {\r
-\r
-        int index;\r
-        int pos;\r
-\r
-        //\r
-        // Check if this SKU_ID Array is already in the table\r
-        //\r
-        pos = 0;\r
-        for (Object o: al) {\r
-            Integer [] s = (Integer[]) o;\r
-            boolean different = false;\r
-            if (s[0] == token.getSkuIdCount()) {\r
-                for (index = 1; index < s.length; index++) {\r
-                    if (s[index] != token.skuData.get(index-1).id) {\r
-                        different = true;\r
-                        break;\r
-                    }\r
-                }\r
-            } else {\r
-                different = true;\r
-            }\r
-            if (different) {\r
-                pos += s[0] + 1;\r
-            } else {\r
-                return pos;\r
-            }\r
-        }\r
-\r
-        Integer [] skuIds = new Integer[token.skuData.size() + 1];\r
-        skuIds[0] = new Integer(token.skuData.size());\r
-        for (index = 1; index < skuIds.length; index++) {\r
-            skuIds[index] = new Integer(token.skuData.get(index - 1).id);\r
-        }\r
-\r
-        index = len;\r
-\r
-        len += skuIds.length;\r
-        al.add(skuIds);\r
-        alComment.add(token.getPrimaryKeyString());\r
-\r
-        return index;\r
-    }\r
-\r
-}\r
-\r
-class LocalTokenNumberTable {\r
-    private ArrayList<String>    al;\r
-    private ArrayList<String>    alComment;\r
-    private String               phase;\r
-    private int                  len;\r
-\r
-    public LocalTokenNumberTable (String phase) {\r
-        this.phase = phase;\r
-        al = new ArrayList<String>();\r
-        alComment = new ArrayList<String>();\r
-\r
-        len = 0;\r
-    }\r
-\r
-    public String getSizeMacro () {\r
-       return String.format(PcdDatabase.LocalTokenNumberTableSizeMacro, phase, getSize())\r
-                       + String.format(PcdDatabase.LocalTokenNumberSizeMacro, phase, al.size());\r
-    }\r
-\r
-    public int getSize () {\r
-        return (al.size() == 0)? 1 : al.size();\r
-    }\r
-\r
-    public String getExistanceMacro () {\r
-        return String.format(PcdDatabase.DatabaseExistenceMacro, phase, (al.size() == 0)? "TRUE":"FALSE");\r
-    }\r
-\r
-    public void genCode (ArrayList<CStructTypeDeclaration> declaList, HashMap<String, String> instTable, String phase) {\r
-        final String name = "LocalTokenNumberTable";\r
-\r
-        CStructTypeDeclaration decl;\r
-        String cCode = "";\r
-\r
-        cCode += String.format(PcdDatabase.LocalTokenNumberTableDeclaration, phase);\r
-        decl = new CStructTypeDeclaration (\r
-                                            name,\r
-                                            4,\r
-                                            cCode,\r
-                                            true\r
-                                           );\r
-        declaList.add(decl);\r
-\r
-        cCode = PcdDatabase.genInstantiationStr(getInstantiation());\r
-        instTable.put(name, cCode);\r
-    }\r
-\r
-    private ArrayList<String> getInstantiation () {\r
-        ArrayList<String> output = new ArrayList<String>();\r
-\r
-        output.add("/* LocalTokenNumberTable */");\r
-        output.add("{");\r
-\r
-        if (al.size() == 0) {\r
-            output.add("\t0");\r
-        }\r
-\r
-        for (int index = 0; index < al.size(); index++) {\r
-            String str;\r
-\r
-            str = "\t" + (String)al.get(index);\r
-\r
-            str += " /* " + alComment.get(index) + " */ ";\r
-\r
-\r
-            if (index != (al.size() - 1)) {\r
-                str += ",";\r
-            }\r
-\r
-            output.add(str);\r
-\r
-        }\r
-\r
-        output.add("}");\r
-\r
-        return output;\r
-    }\r
-\r
-    public int add (Token token) {\r
-        int index = len;\r
-        String str;\r
-\r
-        len++;\r
-\r
-        str =  String.format(PcdDatabase.offsetOfStrTemplate, phase, token.hasDefaultValue() ? "Init" : "Uninit", token.getPrimaryKeyString());\r
-\r
-        if (token.isUnicodeStringType()) {\r
-            str += " | PCD_TYPE_STRING";\r
-        }\r
-\r
-        if (token.isSkuEnable()) {\r
-            str += " | PCD_TYPE_SKU_ENABLED";\r
-        }\r
-\r
-        if (token.getDefaultSku().type == DynamicTokenValue.VALUE_TYPE.HII_TYPE) {\r
-            str += " | PCD_TYPE_HII";\r
-        }\r
-\r
-        if (token.getDefaultSku().type == DynamicTokenValue.VALUE_TYPE.VPD_TYPE) {\r
-            str += " | PCD_TYPE_VPD";\r
-        }\r
-\r
-        switch (token.datumType) {\r
-        case UINT8:\r
-        case BOOLEAN:\r
-            str += " | PCD_DATUM_TYPE_UINT8";\r
-            break;\r
-        case UINT16:\r
-            str += " | PCD_DATUM_TYPE_UINT16";\r
-            break;\r
-        case UINT32:\r
-            str += " | PCD_DATUM_TYPE_UINT32";\r
-            break;\r
-        case UINT64:\r
-            str += " | PCD_DATUM_TYPE_UINT64";\r
-            break;\r
-        case POINTER:\r
-            str += " | PCD_DATUM_TYPE_POINTER";\r
-            break;\r
-        }\r
-\r
-        al.add(str);\r
-        alComment.add(token.getPrimaryKeyString());\r
-\r
-        return index;\r
-    }\r
-}\r
-\r
-/**\r
-    ExMapTable\r
-\r
-    This class is used to store the table of mapping information\r
-    between DynamicEX ID pair(Guid, TokenNumber) and\r
-    the local token number assigned by PcdDatabase class.\r
-**/\r
-class ExMapTable {\r
-\r
-    /**\r
-        ExTriplet\r
-\r
-        This class is used to store the mapping information\r
-        between DynamicEX ID pair(Guid, TokenNumber) and\r
-        the local token number assigned by PcdDatabase class.\r
-    **/\r
-    class ExTriplet {\r
-        public Integer guidTableIdx;\r
-        public Long exTokenNumber;\r
-        public Long localTokenIdx;\r
-\r
-        public ExTriplet (int guidTableIdx, long exTokenNumber, long localTokenIdx) {\r
-            this.guidTableIdx = new Integer(guidTableIdx);\r
-            this.exTokenNumber = new Long(exTokenNumber);\r
-            this.localTokenIdx = new Long(localTokenIdx);\r
-        }\r
-    }\r
-\r
-    private ArrayList<ExTriplet> al;\r
-    private Map<ExTriplet, String> alComment;\r
-    private String               phase;\r
-    private int                  len;\r
-    private int                   bodyLineNum;\r
-\r
-    public ExMapTable (String phase) {\r
-        this.phase = phase;\r
-        al = new ArrayList<ExTriplet>();\r
-        alComment = new HashMap<ExTriplet, String>();\r
-        bodyLineNum = 0;\r
-        len = 0;\r
-    }\r
-\r
-    public String getSizeMacro () {\r
-        return String.format(PcdDatabase.ExMapTableSizeMacro, phase, getTableLen())\r
-             + String.format(PcdDatabase.ExTokenNumber, phase, al.size());\r
-    }\r
-\r
-    public String getExistanceMacro () {\r
-        return String.format(PcdDatabase.ExMapTableExistenceMacro, phase, (al.size() == 0)? "TRUE":"FALSE");\r
-    }\r
-\r
-    public void genCode (ArrayList<CStructTypeDeclaration> declaList, HashMap<String, String> instTable, String phase) {\r
-        final String exMapTableName = "ExMapTable";\r
-\r
-        sortTable();\r
-\r
-        CStructTypeDeclaration decl;\r
-        String cCode = "";\r
-\r
-        cCode += String.format(PcdDatabase.ExMapTableDeclaration, phase);\r
-        decl = new CStructTypeDeclaration (\r
-                                            exMapTableName,\r
-                                            4,\r
-                                            cCode,\r
-                                            true\r
-                                           );\r
-        declaList.add(decl);\r
-\r
-\r
-        cCode = PcdDatabase.genInstantiationStr(getInstantiation());\r
-        instTable.put(exMapTableName, cCode);\r
-    }\r
-\r
-    private ArrayList<String> getInstantiation () {\r
-        ArrayList<String> Output = new ArrayList<String>();\r
-\r
-        Output.add("/* ExMapTable */");\r
-        Output.add("{");\r
-        if (al.size() == 0) {\r
-            Output.add("\t{0, 0, 0}");\r
-        }\r
-\r
-        int index;\r
-        for (index = 0; index < al.size(); index++) {\r
-            String str;\r
-\r
-            ExTriplet e = (ExTriplet)al.get(index);\r
-\r
-            str = "\t" + "{ " + String.format("0x%08X", e.exTokenNumber) + ", ";\r
-            str += e.localTokenIdx.toString() + ", ";\r
-            str += e.guidTableIdx.toString();\r
-\r
-            str += "}" + " /* " + alComment.get(e) + " */" ;\r
-\r
-            if (index != al.size() - 1) {\r
-                str += ",";\r
-            }\r
-\r
-            Output.add(str);\r
-            bodyLineNum++;\r
-\r
-        }\r
-\r
-        Output.add("}");\r
-\r
-        return Output;\r
-    }\r
-\r
-    public int add (int localTokenIdx, long exTokenNum, int guidTableIdx, String name) {\r
-        int index = len;\r
-\r
-        len++;\r
-        ExTriplet et = new ExTriplet(guidTableIdx, exTokenNum, localTokenIdx);\r
-\r
-        al.add(et);\r
-        alComment.put(et, name);\r
-\r
-        return index;\r
-    }\r
-\r
-    private int getTableLen () {\r
-        return al.size() == 0 ? 1 : al.size();\r
-    }\r
-\r
-    //\r
-    // To simplify the algorithm for GetNextToken and GetNextTokenSpace in\r
-    // PCD PEIM/Driver, we need to sort the ExMapTable according to the\r
-    // following order:\r
-    // 1) ExGuid\r
-    // 2) ExTokenNumber\r
-    //\r
-    class ExTripletComp implements Comparator<ExTriplet> {\r
-        public int compare (ExTriplet a, ExTriplet b) {\r
-            if (a.guidTableIdx == b.guidTableIdx ) {\r
-                //\r
-                // exTokenNumber is long, we can't use simple substraction.\r
-                //\r
-                if (a.exTokenNumber > b.exTokenNumber) {\r
-                    return 1;\r
-                } else if (a.exTokenNumber == b.exTokenNumber) {\r
-                    return 0;\r
-                } else {\r
-                    return -1;\r
-                }\r
-            }\r
-\r
-            return a.guidTableIdx - b.guidTableIdx;\r
-        }\r
-    }\r
-\r
-    private void sortTable () {\r
-        java.util.Comparator<ExTriplet> comparator = new ExTripletComp();\r
-        java.util.Collections.sort(al, comparator);\r
-    }\r
-}\r
-\r
-/**\r
-    PcdDatabase\r
-\r
-    This class is used to generate C code for Autogen.h and Autogen.c of\r
-    a PCD service DXE driver and PCD service PEIM.\r
-**/\r
-public class PcdDatabase {\r
-\r
-    private final static int    SkuHeadAlignmentSize             = 4;\r
-    private final String        newLine                         = "\r\n";\r
-    private final String        commaNewLine                    = ",\r\n";\r
-    private final String        tab                             = "\t";\r
-    public final static String ExMapTableDeclaration            = "DYNAMICEX_MAPPING   ExMapTable[%s_EXMAPPING_TABLE_SIZE];\r\n";\r
-    public final static String GuidTableDeclaration             = "EFI_GUID            GuidTable[%s_GUID_TABLE_SIZE];\r\n";\r
-    public final static String LocalTokenNumberTableDeclaration = "UINT32              LocalTokenNumberTable[%s_LOCAL_TOKEN_NUMBER_TABLE_SIZE];\r\n";\r
-    public final static String StringTableDeclaration           = "UINT16              StringTable[%s_STRING_TABLE_SIZE];\r\n";\r
-    public final static String SizeTableDeclaration             = "SIZE_INFO           SizeTable[%s_SIZE_TABLE_SIZE];\r\n";\r
-    public final static String SkuIdTableDeclaration            = "UINT8               SkuIdTable[%s_SKUID_TABLE_SIZE];\r\n";\r
-\r
-\r
-    public final static String ExMapTableSizeMacro              = "#define %s_EXMAPPING_TABLE_SIZE  %d\r\n";\r
-    public final static String ExTokenNumber                    = "#define %s_EX_TOKEN_NUMBER       %d\r\n";\r
-    public final static String GuidTableSizeMacro               = "#define %s_GUID_TABLE_SIZE         %d\r\n";\r
-    public final static String LocalTokenNumberTableSizeMacro   = "#define %s_LOCAL_TOKEN_NUMBER_TABLE_SIZE            %d\r\n";\r
-    public final static String LocalTokenNumberSizeMacro               = "#define %s_LOCAL_TOKEN_NUMBER            %d\r\n";\r
-    public final static String SizeTableSizeMacro               = "#define %s_SIZE_TABLE_SIZE            %d\r\n";\r
-    public final static String StringTableSizeMacro             = "#define %s_STRING_TABLE_SIZE       %d\r\n";\r
-    public final static String SkuIdTableSizeMacro              = "#define %s_SKUID_TABLE_SIZE        %d\r\n";\r
-\r
-\r
-    public final static String ExMapTableExistenceMacro         = "#define %s_EXMAP_TABLE_EMPTY    %s\r\n";\r
-    public final static String GuidTableExistenceMacro          = "#define %s_GUID_TABLE_EMPTY     %s\r\n";\r
-    public final static String DatabaseExistenceMacro           = "#define %s_DATABASE_EMPTY       %s\r\n";\r
-    public final static String StringTableExistenceMacro        = "#define %s_STRING_TABLE_EMPTY   %s\r\n";\r
-    public final static String SkuTableExistenceMacro           = "#define %s_SKUID_TABLE_EMPTY    %s\r\n";\r
-\r
-    public final static String offsetOfSkuHeadStrTemplate       = "offsetof(%s_PCD_DATABASE, %s.%s_SkuDataTable)";\r
-    public final static String offsetOfVariableEnabledDefault   = "offsetof(%s_PCD_DATABASE, %s.%s_VariableDefault_%d)";\r
-    public final static String offsetOfStrTemplate              = "offsetof(%s_PCD_DATABASE, %s.%s)";\r
-\r
-    private final static String  skuDataTableTemplate           = "SkuDataTable";\r
-\r
-\r
-    private StringTable stringTable;\r
-    private GuidTable   guidTable;\r
-    private LocalTokenNumberTable localTokenNumberTable;\r
-    private SkuIdTable  skuIdTable;\r
-    private SizeTable   sizeTable;\r
-    private ExMapTable  exMapTable;\r
-\r
-    private ArrayList<Token> alTokens;\r
-    private String phase;\r
-    private int assignedTokenNumber;\r
-\r
-    //\r
-    // Use two class global variable to store\r
-    // temperary\r
-    //\r
-    private String      privateGlobalName;\r
-    private String      privateGlobalCCode;\r
-    //\r
-    // After Major changes done to the PCD\r
-    // database generation class PcdDatabase\r
-    // Please increment the version and please\r
-    // also update the version number in PCD\r
-    // service PEIM and DXE driver accordingly.\r
-    //\r
-    private final int version = 2;\r
-\r
-    private String hString;\r
-    private String cString;\r
-\r
-    /**\r
-        Constructor for PcdDatabase class.\r
-\r
-        <p>We have two PCD dynamic(ex) database for the Framework implementation. One\r
-        for PEI phase and the other for DXE phase.  </p>\r
-\r
-        @param alTokens A ArrayList of Dynamic(EX) PCD entry.\r
-        @param exePhase The phase to generate PCD database for: valid input\r
-                        is "PEI" or "DXE".\r
-        @param startLen The starting Local Token Number for the PCD database. For\r
-                        PEI phase, the starting Local Token Number starts from 0.\r
-                        For DXE phase, the starting Local Token Number starts\r
-                        from the total number of PCD entry of PEI phase.\r
-        @return void\r
-    **/\r
-    public PcdDatabase (ArrayList<Token> alTokens, String exePhase, int startLen) {\r
-       phase = exePhase;\r
-\r
-       stringTable = new StringTable(phase);\r
-       guidTable = new GuidTable(phase);\r
-       localTokenNumberTable = new LocalTokenNumberTable(phase);\r
-       skuIdTable = new SkuIdTable(phase);\r
-       sizeTable = new SizeTable(phase);\r
-       exMapTable = new ExMapTable(phase);\r
-\r
-       //\r
-       // Local token number 0 is reserved for INVALID_TOKEN_NUMBER.\r
-       // So we will increment 1 for the startLen passed from the\r
-       // constructor.\r
-       //\r
-       assignedTokenNumber = startLen + 1;\r
-       this.alTokens = alTokens;\r
-    }\r
-\r
-    private void getNonExAndExTokens (ArrayList<Token> alTokens, List<Token> nexTokens, List<Token> exTokens) {\r
-        for (int i = 0; i < alTokens.size(); i++) {\r
-            Token t = (Token)alTokens.get(i);\r
-            if (t.isDynamicEx()) {\r
-                exTokens.add(t);\r
-            } else {\r
-                nexTokens.add(t);\r
-            }\r
-        }\r
-\r
-        return;\r
-    }\r
-\r
-    private int getDataTypeAlignmentSize (Token token) {\r
-        switch (token.datumType) {\r
-        case UINT8:\r
-            return 1;\r
-        case UINT16:\r
-            return 2;\r
-        case UINT32:\r
-            return 4;\r
-        case UINT64:\r
-            return 8;\r
-        case POINTER:\r
-            return 1;\r
-        case BOOLEAN:\r
-            return 1;\r
-        default:\r
-            return 1;\r
-        }\r
-    }\r
-\r
-    private int getHiiPtrTypeAlignmentSize(Token token) {\r
-        switch (token.datumType) {\r
-        case UINT8:\r
-            return 1;\r
-        case UINT16:\r
-            return 2;\r
-        case UINT32:\r
-            return 4;\r
-        case UINT64:\r
-            return 8;\r
-        case POINTER:\r
-            if (token.isHiiEnable()) {\r
-                if (token.isHiiDefaultValueUnicodeStringType()) {\r
-                    return 2;\r
-                }\r
-            }\r
-            return 1;\r
-        case BOOLEAN:\r
-            return 1;\r
-        default:\r
-            return 1;\r
-        }\r
-    }\r
-\r
-    private int getAlignmentSize (Token token) {\r
-        if (token.getDefaultSku().type == DynamicTokenValue.VALUE_TYPE.HII_TYPE) {\r
-            return 2;\r
-        }\r
-\r
-        if (token.getDefaultSku().type == DynamicTokenValue.VALUE_TYPE.VPD_TYPE) {\r
-            return 4;\r
-        }\r
-\r
-        if (token.isUnicodeStringType()) {\r
-            return 2;\r
-        }\r
-\r
-        return getDataTypeAlignmentSize(token);\r
-     }\r
-\r
-    public String getCString () {\r
-        return cString;\r
-    }\r
-\r
-    public String getHString () {\r
-        return hString;\r
-    }\r
-\r
-    private void genCodeWorker(Token t,\r
-            ArrayList<CStructTypeDeclaration> declaList,\r
-            HashMap<String, String> instTable, String phase)\r
-            throws EntityException {\r
-\r
-        CStructTypeDeclaration decl;\r
-\r
-        //\r
-        // Insert SKU_HEAD if isSkuEnable is true\r
-        //\r
-        if (t.isSkuEnable()) {\r
-            int tableIdx;\r
-            tableIdx = skuIdTable.add(t);\r
-            decl = new CStructTypeDeclaration(t.getPrimaryKeyString(),\r
-                    SkuHeadAlignmentSize, getSkuEnabledTypeDeclaration(t), true);\r
-            declaList.add(decl);\r
-            instTable.put(t.getPrimaryKeyString(),\r
-                    getSkuEnabledTypeInstantiaion(t, tableIdx));\r
-        }\r
-\r
-        //\r
-        // Insert PCD_ENTRY declaration and instantiation\r
-        //\r
-        getCDeclarationString(t);\r
-\r
-        decl = new CStructTypeDeclaration(privateGlobalName,\r
-                getAlignmentSize(t), privateGlobalCCode, t.hasDefaultValue());\r
-        declaList.add(decl);\r
-\r
-        if (t.hasDefaultValue()) {\r
-            instTable.put(privateGlobalName,\r
-                          getTypeInstantiation(t, declaList, instTable, phase)\r
-                          );\r
-        }\r
-\r
-    }\r
-\r
-    private void ProcessTokens (List<Token> tokens,\r
-                                   ArrayList<CStructTypeDeclaration> cStructDeclList,\r
-                                   HashMap<String, String> cStructInstTable,\r
-                                   String phase\r
-                                   )\r
-    throws EntityException {\r
-\r
-        for (int idx = 0; idx < tokens.size(); idx++) {\r
-            Token t = tokens.get(idx);\r
-\r
-            genCodeWorker (t, cStructDeclList, cStructInstTable, phase);\r
-\r
-            sizeTable.add(t);\r
-            localTokenNumberTable.add(t);\r
-            t.tokenNumber = assignedTokenNumber++;\r
-\r
-            //\r
-            // Add a mapping if this dynamic PCD entry is a EX type\r
-            //\r
-            if (t.isDynamicEx()) {\r
-                exMapTable.add((int)t.tokenNumber,\r
-                                t.dynamicExTokenNumber,\r
-                                guidTable.add(translateSchemaStringToUUID(t.tokenSpaceName), t.getPrimaryKeyString()),\r
-                                t.getPrimaryKeyString()\r
-                                );\r
-            }\r
-        }\r
-\r
-    }\r
-\r
-    public void genCode () throws EntityException {\r
-\r
-        ArrayList<CStructTypeDeclaration> cStructDeclList = new ArrayList<CStructTypeDeclaration>();\r
-        HashMap<String, String> cStructInstTable = new HashMap<String, String>();\r
-\r
-        List<Token> nexTokens = new ArrayList<Token> ();\r
-        List<Token> exTokens = new ArrayList<Token> ();\r
-\r
-        getNonExAndExTokens (alTokens, nexTokens, exTokens);\r
-\r
-        //\r
-        // We have to process Non-Ex type PCD entry first. The reason is\r
-        // that our optimization assumes that the Token Number of Non-Ex\r
-        // PCD entry start from 1 (for PEI phase) and grows continously upwards.\r
-        //\r
-        // EX type token number starts from the last Non-EX PCD entry and\r
-        // grows continously upwards.\r
-        //\r
-        ProcessTokens (nexTokens, cStructDeclList, cStructInstTable, phase);\r
-        ProcessTokens (exTokens, cStructDeclList, cStructInstTable, phase);\r
-\r
-        stringTable.genCode(cStructDeclList, cStructInstTable);\r
-        skuIdTable.genCode(cStructDeclList, cStructInstTable, phase);\r
-        exMapTable.genCode(cStructDeclList, cStructInstTable, phase);\r
-        localTokenNumberTable.genCode(cStructDeclList, cStructInstTable, phase);\r
-        sizeTable.genCode(cStructDeclList, cStructInstTable, phase);\r
-        guidTable.genCode(cStructDeclList, cStructInstTable, phase);\r
-\r
-        hString = genCMacroCode ();\r
-\r
-        HashMap <String, String> result;\r
-\r
-        result = genCStructCode(cStructDeclList,\r
-                cStructInstTable,\r
-                phase\r
-                );\r
-\r
-        hString += result.get("initDeclStr");\r
-        hString += result.get("uninitDeclStr");\r
-\r
-        hString += String.format("#define PCD_%s_SERVICE_DRIVER_AUTOGEN_VERSION         %d", phase, version);\r
-\r
-        cString = newLine + newLine + result.get("initInstStr");\r
-\r
-    }\r
-\r
-    private String genCMacroCode () {\r
-        String macroStr   = "";\r
-\r
-        //\r
-        // Generate size info Macro for all Tables\r
-        //\r
-        macroStr += guidTable.getSizeMacro();\r
-        macroStr += stringTable.getSizeMacro();\r
-        macroStr += skuIdTable.getSizeMacro();\r
-        macroStr += localTokenNumberTable.getSizeMacro();\r
-        macroStr += exMapTable.getSizeMacro();\r
-        macroStr += sizeTable.getSizeMacro();\r
-\r
-        //\r
-        // Generate existance info Macro for all Tables\r
-        //\r
-        macroStr += guidTable.getExistanceMacro();\r
-        macroStr += stringTable.getExistanceMacro();\r
-        macroStr += skuIdTable.getExistanceMacro();\r
-        macroStr += localTokenNumberTable.getExistanceMacro();\r
-        macroStr += exMapTable.getExistanceMacro();\r
-\r
-        macroStr += newLine;\r
-\r
-        return macroStr;\r
-    }\r
-\r
-    private HashMap <String, String> genCStructCode(\r
-                                            ArrayList<CStructTypeDeclaration> declaList,\r
-                                            HashMap<String, String> instTable,\r
-                                            String phase\r
-                                            ) {\r
-\r
-        int i;\r
-        HashMap <String, String> result = new HashMap<String, String>();\r
-        HashMap <Integer, ArrayList<String>>    alignmentInitDecl = new HashMap<Integer, ArrayList<String>>();\r
-        HashMap <Integer, ArrayList<String>>    alignmentUninitDecl = new HashMap<Integer, ArrayList<String>>();\r
-        HashMap <Integer, ArrayList<String>>    alignmentInitInst = new HashMap<Integer, ArrayList<String>>();\r
-\r
-        //\r
-        // Initialize the storage for each alignment\r
-        //\r
-        for (i = 8; i > 0; i>>=1) {\r
-            alignmentInitDecl.put(new Integer(i), new ArrayList<String>());\r
-            alignmentInitInst.put(new Integer(i), new ArrayList<String>());\r
-            alignmentUninitDecl.put(new Integer(i), new ArrayList<String>());\r
-        }\r
-\r
-        String initDeclStr   = "typedef struct {" + newLine;\r
-        String initInstStr   = String.format("%s_PCD_DATABASE_INIT g%sPcdDbInit = { ", phase.toUpperCase(), phase.toUpperCase()) + newLine;\r
-        String uninitDeclStr = "typedef struct {" + newLine;\r
-\r
-        //\r
-        // Sort all C declaration and instantiation base on Alignment Size\r
-        //\r
-        for (Object d : declaList) {\r
-            CStructTypeDeclaration decl = (CStructTypeDeclaration) d;\r
-\r
-            if (decl.initTable) {\r
-                alignmentInitDecl.get(new Integer(decl.alignmentSize)).add(decl.cCode);\r
-                alignmentInitInst.get(new Integer(decl.alignmentSize)).add(instTable.get(decl.key));\r
-            } else {\r
-                alignmentUninitDecl.get(new Integer(decl.alignmentSize)).add(decl.cCode);\r
-            }\r
-        }\r
-\r
-        //\r
-        // Generate code for every alignment size\r
-        //\r
-        boolean uinitDatabaseEmpty = true;\r
-        for (int align = 8; align > 0; align >>= 1) {\r
-            ArrayList<String> declaListBasedOnAlignment = alignmentInitDecl.get(new Integer(align));\r
-            ArrayList<String> instListBasedOnAlignment = alignmentInitInst.get(new Integer(align));\r
-            for (i = 0; i < declaListBasedOnAlignment.size(); i++) {\r
-                initDeclStr += tab + declaListBasedOnAlignment.get(i);\r
-                initInstStr += tab + instListBasedOnAlignment.get(i);\r
-\r
-                //\r
-                // We made a assumption that both PEI_PCD_DATABASE and DXE_PCD_DATABASE\r
-                // has a least one data memember with alignment size of 1. So we can\r
-                // remove the last "," in the C structure instantiation string. Luckily,\r
-                // this is true as both data structure has SKUID_TABLE anyway.\r
-                //\r
-                if ((align == 1) && (i == declaListBasedOnAlignment.size() - 1)) {\r
-                    initInstStr += newLine;\r
-                } else {\r
-                    initInstStr += commaNewLine;\r
-                }\r
-            }\r
-\r
-            declaListBasedOnAlignment = alignmentUninitDecl.get(new Integer(align));\r
-\r
-            if (declaListBasedOnAlignment.size() != 0) {\r
-                uinitDatabaseEmpty = false;\r
-            }\r
-\r
-            for (Object d : declaListBasedOnAlignment) {\r
-                String s = (String)d;\r
-                uninitDeclStr += tab + s;\r
-            }\r
-        }\r
-\r
-        if (uinitDatabaseEmpty) {\r
-            uninitDeclStr += tab + String.format("%-20sdummy; /* PCD_DATABASE_UNINIT is emptry */\r\n", "UINT8");\r
-        }\r
-\r
-        initDeclStr += String.format("} %s_PCD_DATABASE_INIT;", phase) + newLine + newLine;\r
-        initInstStr += "};" + newLine;\r
-        uninitDeclStr += String.format("} %s_PCD_DATABASE_UNINIT;", phase) + newLine + newLine;\r
-\r
-        result.put("initDeclStr", initDeclStr);\r
-        result.put("initInstStr", initInstStr);\r
-        result.put("uninitDeclStr", uninitDeclStr);\r
-\r
-        return result;\r
-    }\r
-\r
-    public static String genInstantiationStr (ArrayList<String> alStr) {\r
-        String str = "";\r
-        for (int i = 0; i< alStr.size(); i++) {\r
-            if (i != 0) {\r
-                str += "\t";\r
-            }\r
-            str += alStr.get(i);\r
-            if (i != alStr.size() - 1) {\r
-                str += "\r\n";\r
-            }\r
-        }\r
-\r
-        return str;\r
-    }\r
-\r
-    private String getSkuEnabledTypeDeclaration (Token token) {\r
-        return String.format("%-20s%s;\r\n", "SKU_HEAD", token.getPrimaryKeyString());\r
-    }\r
-\r
-    private String getSkuEnabledTypeInstantiaion (Token token, int SkuTableIdx) {\r
-\r
-        String offsetof = String.format(PcdDatabase.offsetOfSkuHeadStrTemplate, phase, token.hasDefaultValue()? "Init" : "Uninit", token.getPrimaryKeyString());\r
-        return String.format("{ %s, %d } /* SKU_ENABLED: %s */", offsetof, SkuTableIdx, token.getPrimaryKeyString());\r
-    }\r
-\r
-    private String getDataTypeInstantiationForVariableDefault (Token token, String cName, int skuId) {\r
-        return String.format("%s /* %s */", token.skuData.get(skuId).value.hiiDefaultValue, cName);\r
-    }\r
-\r
-    private String getCType (Token t)\r
-        throws EntityException {\r
-\r
-        if (t.isHiiEnable()) {\r
-            return "VARIABLE_HEAD";\r
-        }\r
-\r
-        if (t.isVpdEnable()) {\r
-            return "VPD_HEAD";\r
-        }\r
-\r
-        if (t.isUnicodeStringType()) {\r
-            return "STRING_HEAD";\r
-        }\r
-\r
-        switch (t.datumType) {\r
-        case UINT64:\r
-            return "UINT64";\r
-        case UINT32:\r
-            return "UINT32";\r
-        case UINT16:\r
-            return "UINT16";\r
-        case UINT8:\r
-            return "UINT8";\r
-        case BOOLEAN:\r
-            return "BOOLEAN";\r
-        case POINTER:\r
-            return "UINT8";\r
-        default:\r
-            throw new EntityException("Unknown DatumType in getDataTypeCDeclaration");\r
-        }\r
-    }\r
-\r
-    //\r
-    // privateGlobalName and privateGlobalCCode is used to pass output to caller of getCDeclarationString\r
-    //\r
-    private void getCDeclarationString(Token t)\r
-        throws EntityException {\r
-\r
-        if (t.isSkuEnable()) {\r
-            privateGlobalName = String.format("%s_%s", t.getPrimaryKeyString(), skuDataTableTemplate);\r
-        } else {\r
-            privateGlobalName = t.getPrimaryKeyString();\r
-        }\r
-\r
-        String type = getCType(t);\r
-        if ((t.datumType == Token.DATUM_TYPE.POINTER) && (!t.isHiiEnable()) && (!t.isUnicodeStringType())) {\r
-            int bufferSize;\r
-            if (t.isASCIIStringType()) {\r
-                //\r
-                // Build tool will add a NULL string at the end of the ASCII string\r
-                //\r
-                bufferSize = t.datumSize + 1;\r
-            } else {\r
-                bufferSize = t.datumSize;\r
-            }\r
-            privateGlobalCCode = String.format("%-20s%s[%d][%d];\r\n", type, privateGlobalName, t.getSkuIdCount(), bufferSize);\r
-        } else {\r
-            privateGlobalCCode = String.format("%-20s%s[%d];\r\n", type, privateGlobalName, t.getSkuIdCount());\r
-        }\r
-    }\r
-\r
-    private String getDataTypeDeclarationForVariableDefault (Token token, String cName, int skuId)\r
-        throws EntityException {\r
-\r
-        String typeStr;\r
-\r
-        if (token.datumType == Token.DATUM_TYPE.UINT8) {\r
-            typeStr = "UINT8";\r
-        } else if (token.datumType == Token.DATUM_TYPE.UINT16) {\r
-            typeStr = "UINT16";\r
-        } else if (token.datumType == Token.DATUM_TYPE.UINT32) {\r
-            typeStr = "UINT32";\r
-        } else if (token.datumType == Token.DATUM_TYPE.UINT64) {\r
-            typeStr = "UINT64";\r
-        } else if (token.datumType == Token.DATUM_TYPE.BOOLEAN) {\r
-            typeStr = "BOOLEAN";\r
-        } else if (token.datumType == Token.DATUM_TYPE.POINTER) {\r
-            int size;\r
-            if (token.isHiiDefaultValueUnicodeStringType()) {\r
-                typeStr = "UINT16";\r
-                //\r
-                // Include the NULL charactor\r
-                //\r
-                size = token.datumSize / 2 + 1;\r
-            } else {\r
-                typeStr = "UINT8";\r
-                if (token.isHiiDefaultValueASCIIStringType()) {\r
-                    //\r
-                    // Include the NULL charactor\r
-                    //\r
-                    size = token.datumSize + 1;\r
-                } else {\r
-                    size = token.datumSize;\r
-                }\r
-            }\r
-            return String.format("%-20s%s[%d];\r\n", typeStr, cName, size);\r
-        } else {\r
-            throw new EntityException("Unknown DATUM_TYPE type in when generating code for VARIABLE_ENABLED PCD entry");\r
-        }\r
-\r
-        return String.format("%-20s%s;\r\n", typeStr, cName);\r
-    }\r
-\r
-    private String getTypeInstantiation (Token t, ArrayList<CStructTypeDeclaration> declaList, HashMap<String, String> instTable, String phase) throws EntityException {\r
-\r
-        int     i;\r
-\r
-        String s;\r
-        s = String.format("/* %s */", t.getPrimaryKeyString()) + newLine;\r
-        s += tab + "{" + newLine;\r
-\r
-        for (i = 0; i < t.skuData.size(); i++) {\r
-            if (t.isUnicodeStringType()) {\r
-                s += tab + tab + String.format(" %d ", stringTable.add(t.skuData.get(i).value.value, t));\r
-            } else if (t.isHiiEnable()) {\r
-                /* VPD_HEAD definition\r
-                   typedef struct {\r
-                      UINT16  GuidTableIndex;   // Offset in Guid Table in units of GUID.\r
-                      UINT16  StringIndex;      // Offset in String Table in units of UINT16.\r
-                      UINT16  Offset;           // Offset in Variable\r
-                      UINT16  DefaultValueOffset; // Offset of the Default Value\r
-                    } VARIABLE_HEAD  ;\r
-                 */\r
-                String variableDefaultName = String.format("%s_VariableDefault_%d", t.getPrimaryKeyString(), i);\r
-\r
-                s += tab + tab + String.format("{ %d, %d, %s, %s }", guidTable.add(t.skuData.get(i).value.variableGuid, t.getPrimaryKeyString()),\r
-                                                          stringTable.add(t.skuData.get(i).value.getStringOfVariableName(), t),\r
-                                                          t.skuData.get(i).value.variableOffset,\r
-                                                          String.format("offsetof(%s_PCD_DATABASE, Init.%s)", phase, variableDefaultName)\r
-                                                          );\r
-                //\r
-                // We need to support the default value, so we add the declaration and\r
-                // the instantiation for the default value.\r
-                //\r
-                CStructTypeDeclaration decl = new CStructTypeDeclaration (variableDefaultName,\r
-                                                        getHiiPtrTypeAlignmentSize(t),\r
-                                                        getDataTypeDeclarationForVariableDefault(t, variableDefaultName, i),\r
-                                                        true\r
-                                                        );\r
-                declaList.add(decl);\r
-                instTable.put(variableDefaultName, getDataTypeInstantiationForVariableDefault (t, variableDefaultName, i));\r
-            } else if (t.isVpdEnable()) {\r
-                    /* typedef  struct {\r
-                        UINT32  Offset;\r
-                      } VPD_HEAD;\r
-                    */\r
-                s += tab + tab + String.format("{ %s }", t.skuData.get(i).value.vpdOffset);\r
-            } else {\r
-                if (t.isByteStreamType()) {\r
-                    //\r
-                    // Byte stream type input has their own "{" "}", so we won't help to insert.\r
-                    //\r
-                    s += tab + tab + String.format(" %s ", t.skuData.get(i).value.value);\r
-                } else {\r
-                    s += tab + tab + String.format("{ %s }", t.skuData.get(i).value.value);\r
-                }\r
-            }\r
-\r
-            if (i != t.skuData.size() - 1) {\r
-                s += commaNewLine;\r
-            } else {\r
-                s += newLine;\r
-            }\r
-\r
-        }\r
-\r
-        s += tab + "}";\r
-\r
-        return s;\r
-    }\r
-\r
-    public static String getPcdDatabaseCommonDefinitions () {\r
-\r
-               String retStr;\r
-\r
-               retStr  = "//\r\n";\r
-               retStr += "// The following definition will be generated by build tool\r\n";\r
-               retStr += "//\r\n";\r
-               retStr += "\r\n";\r
-               retStr += "//\r\n";\r
-               retStr += "// Common definitions\r\n";\r
-               retStr += "//\r\n";\r
-               retStr += "typedef UINT8 SKU_ID;\r\n";\r
-               retStr += "\r\n";\r
-               retStr += "#define PCD_TYPE_SHIFT        28\r\n";\r
-               retStr += "\r\n";\r
-               retStr += "#define PCD_TYPE_DATA         (0x0 << PCD_TYPE_SHIFT)\r\n";\r
-               retStr += "#define PCD_TYPE_HII             (0x8 << PCD_TYPE_SHIFT)\r\n";\r
-               retStr += "#define PCD_TYPE_VPD             (0x4 << PCD_TYPE_SHIFT)\r\n";\r
-               retStr += "#define PCD_TYPE_SKU_ENABLED         (0x2 << PCD_TYPE_SHIFT)\r\n";\r
-               retStr += "#define PCD_TYPE_STRING       (0x1 << PCD_TYPE_SHIFT)\r\n";\r
-               retStr += "\r\n";\r
-               retStr += "#define PCD_TYPE_ALL_SET      (PCD_TYPE_DATA | PCD_TYPE_HII | PCD_TYPE_VPD | PCD_TYPE_SKU_ENABLED | PCD_TYPE_STRING)\r\n";\r
-               retStr += "\r\n";\r
-               retStr += "#define PCD_DATUM_TYPE_SHIFT  24\r\n";\r
-               retStr += "\r\n";\r
-               retStr += "#define PCD_DATUM_TYPE_POINTER        (0x0 << PCD_DATUM_TYPE_SHIFT)\r\n";\r
-               retStr += "#define PCD_DATUM_TYPE_UINT8          (0x1 << PCD_DATUM_TYPE_SHIFT)\r\n";\r
-               retStr += "#define PCD_DATUM_TYPE_UINT16            (0x2 << PCD_DATUM_TYPE_SHIFT)\r\n";\r
-               retStr += "#define PCD_DATUM_TYPE_UINT32            (0x4 << PCD_DATUM_TYPE_SHIFT)\r\n";\r
-               retStr += "#define PCD_DATUM_TYPE_UINT64                (0x8 << PCD_DATUM_TYPE_SHIFT)\r\n";\r
-               retStr += "\r\n";\r
-               retStr += "#define PCD_DATUM_TYPE_ALL_SET    (PCD_DATUM_TYPE_POINTER | \\\r\n";\r
-               retStr += "                                    PCD_DATUM_TYPE_UINT8  | \\\r\n";\r
-               retStr += "                                    PCD_DATUM_TYPE_UINT16 | \\\r\n";\r
-               retStr += "                                    PCD_DATUM_TYPE_UINT32 | \\\r\n";\r
-               retStr += "                                    PCD_DATUM_TYPE_UINT64)\r\n";\r
-               retStr += "\r\n";\r
-               retStr += "\r\n";\r
-               retStr += "#define PCD_DATABASE_OFFSET_MASK (~(PCD_TYPE_ALL_SET | PCD_DATUM_TYPE_ALL_SET))\r\n";\r
-               retStr += "\r\n";\r
-               retStr += "typedef struct  {\r\n";\r
-               retStr += "  UINT32                ExTokenNumber;\r\n";\r
-               retStr += "  UINT16                LocalTokenNumber;   // PCD Number of this particular platform build\r\n";\r
-               retStr += "  UINT16                ExGuidIndex;        // Index of GuidTable\r\n";\r
-               retStr += "} DYNAMICEX_MAPPING;\r\n";\r
-               retStr += "\r\n";\r
-               retStr += "\r\n";\r
-               retStr += "typedef struct {\r\n";\r
-               retStr += "  UINT32  SkuDataStartOffset; //We have to use offsetof MACRO as we don't know padding done by compiler\r\n";\r
-               retStr += "  UINT32  SkuIdTableOffset;   //Offset from the PCD_DB\r\n";\r
-               retStr += "} SKU_HEAD;\r\n";\r
-               retStr += "\r\n";\r
-               retStr += "\r\n";\r
-               retStr += "typedef struct {\r\n";\r
-               retStr += "  UINT16  GuidTableIndex;     // Offset in Guid Table in units of GUID.\r\n";\r
-               retStr += "  UINT16  StringIndex;        // Offset in String Table in units of UINT16.\r\n";\r
-               retStr += "  UINT16  Offset;             // Offset in Variable\r\n";\r
-               retStr += "  UINT16  DefaultValueOffset; // Offset of the Default Value\r\n";\r
-               retStr += "} VARIABLE_HEAD  ;\r\n";\r
-               retStr += "\r\n";\r
-               retStr += "\r\n";\r
-               retStr += "typedef  struct {\r\n";\r
-               retStr += "  UINT32  Offset;\r\n";\r
-               retStr += "} VPD_HEAD;\r\n";\r
-               retStr += "\r\n";\r
-               retStr += "typedef UINT16 STRING_HEAD;\r\n";\r
-               retStr += "\r\n";\r
-               retStr += "typedef UINT16 SIZE_INFO;\r\n";\r
-               retStr += "\r\n";\r
-               retStr += "#define offsetof(s,m)                 (UINT32) (UINTN) &(((s *)0)->m)\r\n";\r
-               retStr += "\r\n";\r
-               retStr += "\r\n";\r
-               retStr += "\r\n";\r
-               \r
-               return retStr;\r
-    }\r
-\r
-    public static String getPcdDxeDatabaseDefinitions ()\r
-        throws EntityException {\r
-\r
-        String retStr = "";\r
-               \r
-               retStr += "\r\n";\r
-               retStr += "typedef struct {\r\n";\r
-               retStr += "  DXE_PCD_DATABASE_INIT Init;\r\n";\r
-               retStr += "  DXE_PCD_DATABASE_UNINIT Uninit;\r\n";\r
-               retStr += "} DXE_PCD_DATABASE;\r\n";\r
-               retStr += "\r\n";\r
-               retStr += "\r\n";\r
-               retStr += "typedef struct {\r\n";\r
-               retStr += "  PEI_PCD_DATABASE PeiDb;\r\n";\r
-               retStr += "  DXE_PCD_DATABASE DxeDb;\r\n";\r
-               retStr += "} PCD_DATABASE;\r\n";\r
-               retStr += "\r\n";\r
-               retStr += "#define DXE_NEX_TOKEN_NUMBER (DXE_LOCAL_TOKEN_NUMBER - DXE_EX_TOKEN_NUMBER)\r\n";\r
-               retStr += "\r\n";\r
-               retStr += "#define PCD_TOTAL_TOKEN_NUMBER (PEI_LOCAL_TOKEN_NUMBER + DXE_LOCAL_TOKEN_NUMBER)\r\n";\r
-               retStr += "\r\n";\r
-               retStr += "\r\n";\r
-\r
-        return retStr;\r
-    }\r
-\r
-    public static String getPcdPeiDatabaseDefinitions ()\r
-        throws EntityException {\r
-\r
-               String retStr = "";\r
-               \r
-               retStr += "\r\n";\r
-               retStr += "typedef struct {\r\n";\r
-               retStr += "  PEI_PCD_DATABASE_INIT Init;\r\n";\r
-               retStr += "  PEI_PCD_DATABASE_UNINIT Uninit;\r\n";\r
-               retStr += "} PEI_PCD_DATABASE;\r\n";\r
-               retStr += "\r\n";\r
-               retStr += "#define PEI_NEX_TOKEN_NUMBER (PEI_LOCAL_TOKEN_NUMBER - PEI_EX_TOKEN_NUMBER)\r\n";\r
-               retStr += "\r\n";\r
-\r
-        return retStr;\r
-    }\r
-\r
-    /**\r
-       Translate the schema string to UUID instance.\r
-\r
-       In schema, the string of UUID is defined as following two types string:\r
-        1) GuidArrayType: pattern = 0x[a-fA-F0-9]{1,8},( )*0x[a-fA-F0-9]{1,4},(\r
-        )*0x[a-fA-F0-9]{1,4}(,( )*\{)?(,?( )*0x[a-fA-F0-9]{1,2}){8}( )*(\})?\r
-\r
-        2) GuidNamingConvention: pattern =\r
-        [a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}\r
-\r
-       This function will convert string and create uuid instance.\r
-\r
-       @param uuidString    UUID string in XML file\r
-\r
-       @return UUID         UUID instance\r
-    **/\r
-    private UUID translateSchemaStringToUUID(String uuidString)\r
-        throws EntityException {\r
-        String      temp;\r
-        String[]    splitStringArray;\r
-        int         index;\r
-        int         chIndex;\r
-        int         chLen;\r
-\r
-        if (uuidString == null) {\r
-            return null;\r
-        }\r
-\r
-        if (uuidString.length() == 0) {\r
-            return null;\r
-        }\r
-\r
-        if (uuidString.equals("0") ||\r
-            uuidString.equalsIgnoreCase("0x0")) {\r
-            return new UUID(0, 0);\r
-        }\r
-\r
-        uuidString = uuidString.replaceAll("\\{", "");\r
-        uuidString = uuidString.replaceAll("\\}", "");\r
-\r
-        //\r
-        // If the UUID schema string is GuidArrayType type then need translate\r
-        // to GuidNamingConvention type at first.\r
-        //\r
-        if ((uuidString.charAt(0) == '0') && ((uuidString.charAt(1) == 'x') || (uuidString.charAt(1) == 'X'))) {\r
-            splitStringArray = uuidString.split("," );\r
-            if (splitStringArray.length != 11) {\r
-                throw new EntityException ("[FPD file error] Wrong format for GUID string: " + uuidString);\r
-            }\r
-\r
-            //\r
-            // Remove blank space from these string and remove header string "0x"\r
-            //\r
-            for (index = 0; index < 11; index ++) {\r
-                splitStringArray[index] = splitStringArray[index].trim();\r
-                splitStringArray[index] = splitStringArray[index].substring(2, splitStringArray[index].length());\r
-            }\r
-\r
-            //\r
-            // Add heading '0' to normalize the string length\r
-            //\r
-            for (index = 3; index < 11; index ++) {\r
-                chLen = splitStringArray[index].length();\r
-                for (chIndex = 0; chIndex < 2 - chLen; chIndex ++) {\r
-                    splitStringArray[index] = "0" + splitStringArray[index];\r
-                }\r
-            }\r
-\r
-            //\r
-            // construct the final GuidNamingConvention string\r
-            //\r
-            temp = String.format("%s-%s-%s-%s%s-%s%s%s%s%s%s",\r
-                                 splitStringArray[0],\r
-                                 splitStringArray[1],\r
-                                 splitStringArray[2],\r
-                                 splitStringArray[3],\r
-                                 splitStringArray[4],\r
-                                 splitStringArray[5],\r
-                                 splitStringArray[6],\r
-                                 splitStringArray[7],\r
-                                 splitStringArray[8],\r
-                                 splitStringArray[9],\r
-                                 splitStringArray[10]);\r
-            uuidString = temp;\r
-        }\r
-\r
-        return UUID.fromString(uuidString);\r
-    }\r
-}\r