forked from OSchip/llvm-project
				
			
		
			
				
	
	
		
			63 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
			
		
		
	
	
			63 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
 | 
						|
class LookupDictionary(dict):
 | 
						|
    """
 | 
						|
    a dictionary which can lookup value by key, or keys by value
 | 
						|
    """
 | 
						|
 | 
						|
    def __init__(self, items=[]):
 | 
						|
        """items can be a list of pair_lists or a dictionary"""
 | 
						|
        dict.__init__(self, items)
 | 
						|
 | 
						|
    def get_keys_for_value(self, value, fail_value=None):
 | 
						|
        """find the key(s) as a list given a value"""
 | 
						|
        list_result = [item[0] for item in self.items() if item[1] == value]
 | 
						|
        if len(list_result) > 0:
 | 
						|
            return list_result
 | 
						|
        return fail_value
 | 
						|
 | 
						|
    def get_first_key_for_value(self, value, fail_value=None):
 | 
						|
        """return the first key of this dictionary given the value"""
 | 
						|
        list_result = [item[0] for item in self.items() if item[1] == value]
 | 
						|
        if len(list_result) > 0:
 | 
						|
            return list_result[0]
 | 
						|
        return fail_value
 | 
						|
 | 
						|
    def get_value(self, key, fail_value=None):
 | 
						|
        """find the value given a key"""
 | 
						|
        if key in self:
 | 
						|
            return self[key]
 | 
						|
        return fail_value
 | 
						|
 | 
						|
 | 
						|
class Enum(LookupDictionary):
 | 
						|
 | 
						|
    def __init__(self, initial_value=0, items=[]):
 | 
						|
        """items can be a list of pair_lists or a dictionary"""
 | 
						|
        LookupDictionary.__init__(self, items)
 | 
						|
        self.value = initial_value
 | 
						|
 | 
						|
    def set_value(self, v):
 | 
						|
        v_typename = typeof(v).__name__
 | 
						|
        if v_typename == 'str':
 | 
						|
            if str in self:
 | 
						|
                v = self[v]
 | 
						|
            else:
 | 
						|
                v = 0
 | 
						|
        else:
 | 
						|
            self.value = v
 | 
						|
 | 
						|
    def get_enum_value(self):
 | 
						|
        return self.value
 | 
						|
 | 
						|
    def get_enum_name(self):
 | 
						|
        return self.__str__()
 | 
						|
 | 
						|
    def __str__(self):
 | 
						|
        s = self.get_first_key_for_value(self.value, None)
 | 
						|
        if s is None:
 | 
						|
            s = "%#8.8x" % self.value
 | 
						|
        return s
 | 
						|
 | 
						|
    def __repr__(self):
 | 
						|
        return self.__str__()
 |