]> git.proxmox.com Git - mirror_edk2.git/blobdiff - BaseTools/Source/Python/Workspace/BuildClassObject.py
BaseTools: move PCD size calculation functions to PcdClassObject
[mirror_edk2.git] / BaseTools / Source / Python / Workspace / BuildClassObject.py
index 8b3e2ec299736aeadc3fa8914b7b9779017bd68e..209315d901b2cc192cd86ea4889b7e11ca207419 100644 (file)
@@ -72,6 +72,37 @@ class PcdClassObject(object):
         self.PcdValueFromComm = ""\r
         self.DefinitionPosition = ("","")\r
 \r
+    ## Get the maximum number of bytes\r
+    def GetPcdMaxSize(self):\r
+        if self.DatumType in TAB_PCD_NUMERIC_TYPES:\r
+            return MAX_SIZE_TYPE[self.DatumType]\r
+\r
+        MaxSize = int(self.MaxDatumSize,10) if self.MaxDatumSize else 0\r
+        if self.PcdValueFromComm:\r
+            if self.PcdValueFromComm.startswith("{") and self.PcdValueFromComm.endswith("}"):\r
+                return max([len(self.PcdValueFromComm.split(",")),MaxSize])\r
+            elif self.PcdValueFromComm.startswith("\"") or self.PcdValueFromComm.startswith("\'"):\r
+                return max([len(self.PcdValueFromComm)-2+1,MaxSize])\r
+            elif self.PcdValueFromComm.startswith("L\""):\r
+                return max([2*(len(self.PcdValueFromComm)-3+1),MaxSize])\r
+            else:\r
+                return max([len(self.PcdValueFromComm),MaxSize])\r
+        return MaxSize\r
+\r
+    ## Get the number of bytes\r
+    def GetPcdSize(self):\r
+        if self.DatumType in TAB_PCD_NUMERIC_TYPES:\r
+            return MAX_SIZE_TYPE[self.DatumType]\r
+        if not self.DefaultValue:\r
+            return 1\r
+        elif self.DefaultValue[0] == 'L':\r
+            return (len(self.DefaultValue) - 2) * 2\r
+        elif self.DefaultValue[0] == '{':\r
+            return len(self.DefaultValue.split(','))\r
+        else:\r
+            return len(self.DefaultValue) - 1\r
+\r
+\r
     ## Convert the class to a string\r
     #\r
     #  Convert each member of the class to string\r
@@ -114,11 +145,16 @@ class PcdClassObject(object):
 \r
 class StructurePcd(PcdClassObject):\r
     def __init__(self, StructuredPcdIncludeFile=None, Packages=None, Name=None, Guid=None, Type=None, DatumType=None, Value=None, Token=None, MaxDatumSize=None, SkuInfoList=None, IsOverrided=False, GuidValue=None, validateranges=None, validlists=None, expressions=None,default_store = TAB_DEFAULT_STORES_DEFAULT):\r
-        if SkuInfoList is None: SkuInfoList={}\r
-        if validateranges is None: validateranges=[]\r
-        if validlists is None: validlists=[]\r
-        if expressions is None : expressions=[]\r
-        if Packages is None : Packages = []\r
+        if SkuInfoList is None:\r
+            SkuInfoList = {}\r
+        if validateranges is None:\r
+            validateranges = []\r
+        if validlists is None:\r
+            validlists = []\r
+        if expressions is None:\r
+            expressions = []\r
+        if Packages is None:\r
+            Packages = []\r
         super(StructurePcd, self).__init__(Name, Guid, Type, DatumType, Value, Token, MaxDatumSize, SkuInfoList, IsOverrided, GuidValue, validateranges, validlists, expressions)\r
         self.StructuredPcdIncludeFile = [] if StructuredPcdIncludeFile is None else StructuredPcdIncludeFile\r
         self.PackageDecs = Packages\r
@@ -131,7 +167,7 @@ class StructurePcd(PcdClassObject):
         self.PcdDefineLineNo = 0\r
         self.PkgPath = ""\r
         self.DefaultValueFromDec = ""\r
-        self.ValueChain = dict()\r
+        self.ValueChain = set()\r
         self.PcdFieldValueFromComm = collections.OrderedDict()\r
     def __repr__(self):\r
         return self.TypeName\r