From 79b74a03e018ecbf03d8d50e6f20301e249c1ba5 Mon Sep 17 00:00:00 2001 From: lgao4 Date: Tue, 11 Oct 2011 02:49:48 +0000 Subject: Sync BaseTools Branch (version r2362) to EDKII main trunk. Signed-off-by: lgao4 Reviewed-by: jsu1 Reviewed-by: ydliu git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@12525 6f19259b-4bc3-4df7-8a09-765794883524 --- BaseTools/Source/Python/AutoGen/UniClassObject.py | 44 ++++++++++++++--------- 1 file changed, 28 insertions(+), 16 deletions(-) (limited to 'BaseTools/Source/Python/AutoGen/UniClassObject.py') diff --git a/BaseTools/Source/Python/AutoGen/UniClassObject.py b/BaseTools/Source/Python/AutoGen/UniClassObject.py index 1825c81d91..54751bab4e 100644 --- a/BaseTools/Source/Python/AutoGen/UniClassObject.py +++ b/BaseTools/Source/Python/AutoGen/UniClassObject.py @@ -193,6 +193,8 @@ class UniFileClassObject(object): self.Token = 2 self.LanguageDef = [] #[ [u'LanguageIdentifier', u'PrintableName'], ... ] self.OrderedStringList = {} #{ u'LanguageIdentifier' : [StringDefClassObject] } + self.OrderedStringDict = {} #{ u'LanguageIdentifier' : {StringName:(IndexInList)} } + self.OrderedStringListByToken = {} #{ u'LanguageIdentifier' : {Token: StringDefClassObject} } self.IsCompatibleMode = IsCompatibleMode self.IncludePathList = IncludePathList if len(self.FileList) > 0: @@ -246,14 +248,13 @@ class UniFileClassObject(object): else: OtherLang = FirstLangName self.OrderedStringList[LangName].append (StringDefClassObject(Item.StringName, '', Item.Referenced, Item.Token, OtherLang)) - + self.OrderedStringDict[LangName][Item.StringName] = len(self.OrderedStringList[LangName]) - 1 return True # # Get String name and value # def GetStringObject(self, Item): - Name = '' Language = '' Value = '' @@ -476,20 +477,22 @@ class UniFileClassObject(object): if Language not in self.OrderedStringList: self.OrderedStringList[Language] = [] + self.OrderedStringDict[Language] = {} IsAdded = True - for Item in self.OrderedStringList[Language]: - if Name == Item.StringName: - IsAdded = False - if Value != None: - Item.UpdateValue(Value) - Item.UseOtherLangDef = '' - break + if Name in self.OrderedStringDict[Language]: + IsAdded = False + if Value != None: + ItemIndexInList = self.OrderedStringDict[Language][Name] + Item = self.OrderedStringList[Language][ItemIndexInList] + Item.UpdateValue(Value) + Item.UseOtherLangDef = '' if IsAdded: Token = len(self.OrderedStringList[Language]) if Index == -1: self.OrderedStringList[Language].append(StringDefClassObject(Name, Value, Referenced, Token, UseOtherLangDef)) + self.OrderedStringDict[Language][Name] = Token for LangName in self.LanguageDef: # # New STRING token will be added into all language string lists. @@ -501,8 +504,10 @@ class UniFileClassObject(object): else: OtherLangDef = Language self.OrderedStringList[LangName[0]].append(StringDefClassObject(Name, '', Referenced, Token, OtherLangDef)) + self.OrderedStringDict[LangName[0]][Name] = len(self.OrderedStringList[LangName[0]]) - 1 else: self.OrderedStringList[Language].insert(Index, StringDefClassObject(Name, Value, Referenced, Token, UseOtherLangDef)) + self.OrderedStringDict[Language][Name] = Index # # Set the string as referenced @@ -513,17 +518,18 @@ class UniFileClassObject(object): # So, only update the status of string stoken in first language string list. # Lang = self.LanguageDef[0][0] - for Item in self.OrderedStringList[Lang]: - if Name == Item.StringName: - Item.Referenced = True - break + if Name in self.OrderedStringDict[Lang]: + ItemIndexInList = self.OrderedStringDict[Lang][Name] + Item = self.OrderedStringList[Lang][ItemIndexInList] + Item.Referenced = True + # # Search the string in language definition by Name # def FindStringValue(self, Name, Lang): - for Item in self.OrderedStringList[Lang]: - if Item.StringName == Name: - return Item + if Name in self.OrderedStringDict[Lang]: + ItemIndexInList = self.OrderedStringDict[Lang][Name] + return self.OrderedStringList[Lang][ItemIndexInList] return None @@ -546,6 +552,10 @@ class UniFileClassObject(object): # FirstLangName = self.LanguageDef[0][0] + # Convert the OrderedStringList to be OrderedStringListByToken in order to faciliate future search by token + for LangNameItem in self.LanguageDef: + self.OrderedStringListByToken[LangNameItem[0]] = {} + # # Use small token for all referred string stoken. # @@ -558,6 +568,7 @@ class UniFileClassObject(object): OtherLangItem = self.OrderedStringList[LangName][Index] OtherLangItem.Referenced = True OtherLangItem.Token = RefToken + self.OrderedStringListByToken[LangName][OtherLangItem.Token] = OtherLangItem RefToken = RefToken + 1 # @@ -571,6 +582,7 @@ class UniFileClassObject(object): LangName = LangNameItem[0] OtherLangItem = self.OrderedStringList[LangName][Index] OtherLangItem.Token = RefToken + UnRefToken + self.OrderedStringListByToken[LangName][OtherLangItem.Token] = OtherLangItem UnRefToken = UnRefToken + 1 # -- cgit v1.2.3