- public void genCode () \r
- throws EntityException {\r
-\r
- final String newLine = "\r\n";\r
- final String declNewLine = ";\r\n";\r
- final String tab = "\t";\r
- final String commaNewLine = ", \r\n";\r
-\r
- int i;\r
- ArrayList<String> decla;\r
- ArrayList<String> inst;\r
-\r
- String macroStr = "";\r
- String initDeclStr = "";\r
- String initInstStr = "";\r
- String uninitDeclStr = "";\r
-\r
- List<Token> initTokens = new ArrayList<Token> ();\r
- List<Token> uninitTokens = new ArrayList<Token> ();\r
- \r
- HashMap <String, ArrayList<String>> initCode = new HashMap<String, ArrayList<String>> ();\r
- HashMap <String, ArrayList<String>> uninitCode = new HashMap<String, ArrayList<String>> ();\r
-\r
- getTwoGroupsOfTokens (alTokens, initTokens, uninitTokens);\r
-\r
- //\r
- // Generate Structure Declaration for PcdTokens without Default Value\r
- // PEI_PCD_DATABASE_INIT\r
- //\r
- java.util.Comparator<Token> comparator = new AlignmentSizeComp();\r
- java.util.Collections.sort(initTokens, comparator);\r
- initCode = processTokens(initTokens);\r
-\r
- //\r
- // Generate Structure Declaration for PcdTokens without Default Value\r
- // PEI_PCD_DATABASE_UNINIT\r
- //\r
- java.util.Collections.sort(uninitTokens, comparator);\r
- uninitCode = processTokens(uninitTokens);\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
-\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
- //\r
- // Generate Structure Declaration for PcdTokens with Default Value\r
- // for example PEI_PCD_DATABASE_INIT\r
- //\r
- initDeclStr += "typedef struct {" + newLine;\r
- {\r
- initDeclStr += tab + exMapTable.getTypeDeclaration();\r
- initDeclStr += tab + guidTable.getTypeDeclaration();\r
- initDeclStr += tab + localTokenNumberTable.getTypeDeclaration();\r
- initDeclStr += tab + stringTable.getTypeDeclaration();\r
- initDeclStr += tab + sizeTable.getTypeDeclaration();\r
- initDeclStr += tab + skuIdTable.getTypeDeclaration();\r
- if (phase.equalsIgnoreCase("PEI")) {\r
- initDeclStr += tab + "SKU_ID SystemSkuId;" + newLine;\r
- }\r
-\r
- decla = initCode.get(new String("Declaration"));\r
- for (i = 0; i < decla.size(); i++) {\r
- initDeclStr += tab + decla.get(i) + declNewLine;\r
- }\r
-\r
- //\r
- // Generate Structure Declaration for PcdToken with SkuEnabled\r
- //\r
- decla = initCode.get("DeclarationForSku");\r
-\r
- for (i = 0; i < decla.size(); i++) {\r
- initDeclStr += tab + decla.get(i) + declNewLine;\r
- }\r
- }\r
- initDeclStr += String.format("} %s_PCD_DATABASE_INIT;\r\n\r\n", phase);\r
-\r
- //\r
- // Generate MACRO for structure intialization of PCDTokens with Default Value\r
- // The sequence must match the sequence of declaration of the memembers in the structure\r
- String tmp = String.format("%s_PCD_DATABASE_INIT g%sPcdDbInit = { ", phase.toUpperCase(), phase.toUpperCase());\r
- initInstStr += tmp + newLine;\r
- initInstStr += tab + genInstantiationStr(exMapTable.getInstantiation()) + commaNewLine;\r
- initInstStr += tab + genInstantiationStr(guidTable.getInstantiation()) + commaNewLine;\r
- initInstStr += tab + genInstantiationStr(localTokenNumberTable.getInstantiation()) + commaNewLine; \r
- initInstStr += tab + genInstantiationStr(stringTable.getInstantiation()) + commaNewLine;\r
- initInstStr += tab + genInstantiationStr(sizeTable.getInstantiation()) + commaNewLine;\r
- initInstStr += tab + genInstantiationStr(skuIdTable.getInstantiation()) + commaNewLine;\r
- //\r
- // For SystemSkuId\r
- //\r
- if (phase.equalsIgnoreCase("PEI")) {\r
- initInstStr += tab + "0" + tab + "/* SystemSkuId */" + commaNewLine;\r
- }\r
-\r
- inst = initCode.get("Instantiation");\r
- for (i = 0; i < inst.size(); i++) {\r
- initInstStr += tab + inst.get(i) + commaNewLine;\r
- }\r
-\r
- inst = initCode.get("InstantiationForSku");\r
- for (i = 0; i < inst.size(); i++) {\r
- initInstStr += tab + inst.get(i);\r
- if (i != inst.size() - 1) {\r
- initInstStr += commaNewLine;\r
- }\r
- }\r
-\r
- initInstStr += "};";\r
-\r
- uninitDeclStr += "typedef struct {" + newLine;\r
- {\r
- decla = uninitCode.get("Declaration");\r
- if (decla.size() == 0) {\r
- uninitDeclStr += "UINT8 dummy /* The UINT struct is empty */" + declNewLine;\r
- } else {\r
- \r
- for (i = 0; i < decla.size(); i++) {\r
- uninitDeclStr += tab + decla.get(i) + declNewLine;\r
- }\r
- \r
- decla = uninitCode.get("DeclarationForSku");\r
- \r
- for (i = 0; i < decla.size(); i++) {\r
- uninitDeclStr += tab + decla.get(i) + declNewLine;\r
- }\r
- }\r
- }\r
- uninitDeclStr += String.format("} %s_PCD_DATABASE_UNINIT;\r\n\r\n", phase);\r
-\r
- cString = initInstStr + newLine;\r
- hString = macroStr + newLine \r
- + initDeclStr + newLine\r
- + uninitDeclStr + newLine\r
- + newLine;\r
- \r
- hString += String.format("#define PCD_%s_SERVICE_DRIVER_VERSION %d", phase, version);\r
-\r
- }\r
-\r