+ PEI_PCD_DATABASE *PeiPcdDb;\r
+ UINTN Size;\r
+ UINTN MaxSize;\r
+\r
+ //\r
+ // If DebugAssertEnabled is TRUE, we still need to provide the GET size\r
+ // function as GetWorker and SetWoker need this function to do ASSERT.\r
+ //\r
+ if ((!FeaturePcdGet(PcdPeiPcdDatabaseGetSizeEnabled)) &&\r
+ (!DebugAssertEnabled ())) {\r
+ return 0;\r
+ }\r
+\r
+ PeiPcdDb = GetPcdDatabase ();\r
+ //\r
+ // TokenNumber Zero is reserved as PCD_INVALID_TOKEN_NUMBER.\r
+ // We have to decrement TokenNumber by 1 to make it usable\r
+ // as the array index.\r
+ //\r
+ TokenNumber--;\r
+\r
+ // EBC compiler is very choosy. It may report warning about comparison\r
+ // between UINTN and 0 . So we add 1 in each size of the \r
+ // comparison.\r
+ ASSERT (TokenNumber + 1 < PEI_LOCAL_TOKEN_NUMBER + 1);\r
+\r
+ Size = (PeiPcdDb->Init.LocalTokenNumberTable[TokenNumber] & PCD_DATUM_TYPE_ALL_SET) >> PCD_DATUM_TYPE_SHIFT;\r
+\r
+ if (Size == 0) {\r
+ //\r
+ // For pointer type, we need to scan the SIZE_TABLE to get the current size.\r
+ //\r
+ return GetPtrTypeSize (TokenNumber, &MaxSize, PeiPcdDb);\r
+ } else {\r
+ return Size;\r
+ }\r