Commit | Line | Data |
---|---|---|
86530b38 AT |
1 | |
2 | class Pfe_SymbolTbl: | |
3 | def __init__ (self): | |
4 | self.id_pa = {} | |
5 | self.id_ra = {} | |
6 | self.id_va = {} | |
7 | self.pa_id = [] | |
8 | self.ra_id = [] | |
9 | self.va_id = [] | |
10 | ||
11 | ||
12 | def load(self,filename): | |
13 | file = open(filename) | |
14 | ||
15 | for line in file: | |
16 | id,va,ra,pa = line.split() | |
17 | ||
18 | if not (ra in 'Xx'): | |
19 | ra = eval('0x'+ra) | |
20 | self.id_ra[id] = ra | |
21 | self.ra_id.append((ra,id)) | |
22 | ||
23 | va = eval('0x'+va) | |
24 | self.id_va[id] = va | |
25 | self.va_id.append((va,id)) | |
26 | ||
27 | pa = eval('0x'+pa) | |
28 | self.id_pa[id] = pa | |
29 | self.pa_id.append((pa,id)) | |
30 | ||
31 | file.close() | |
32 | ||
33 | self.pa_id.sort() | |
34 | self.ra_id.sort() | |
35 | self.va_id.sort() | |
36 | ||
37 | ||
38 | def id2pa(self,id): | |
39 | if self.id_pa.has_key(id): | |
40 | return self.id_pa[id] | |
41 | else: | |
42 | return None | |
43 | ||
44 | def id2ra(self,id): | |
45 | if self.id_ra.has_key(id): | |
46 | return self.id_ra[id] | |
47 | else: | |
48 | return None | |
49 | ||
50 | def id2va(self,id): | |
51 | if self.id_va.has_key(id): | |
52 | return self.id_va[id] | |
53 | else: | |
54 | return None | |
55 | ||
56 | ||
57 | def pa2id(self,pa): | |
58 | ea_id = self.__find__(self.pa_id,pa) | |
59 | if ea_id: | |
60 | return ea_id[1] | |
61 | return None | |
62 | ||
63 | def ra2id(self,ra): | |
64 | ea_id = self.__find__(self.ra_id,ra) | |
65 | if ea_id: | |
66 | return ea_id[1] | |
67 | return None | |
68 | ||
69 | def va2id(self,va): | |
70 | ea_id = self.__find__(self.va_id,va) | |
71 | if ea_id: | |
72 | return ea_id[1] | |
73 | return None | |
74 | ||
75 | ||
76 | def pa2id_ofs(self,pa): | |
77 | ea_id = self.__find__(self.pa_id,pa) | |
78 | if ea_id: | |
79 | ea,id = ea_id | |
80 | return (id,pa - ea) | |
81 | return None | |
82 | ||
83 | def ra2id_ofs(self,ra): | |
84 | ea_id = self.__find__(self.ra_id,ra) | |
85 | if ea_id: | |
86 | ea,id = ea_id | |
87 | return (id,ra - ea) | |
88 | return None | |
89 | ||
90 | def va2id_ofs(self,va): | |
91 | ea_id = self.__find__(self.va_id,va) | |
92 | if ea_id: | |
93 | ea,id = ea_id | |
94 | return (id,va - ea) | |
95 | return None | |
96 | ||
97 | def __find__(self,list,ea): | |
98 | l = 0 | |
99 | u = len(list) | |
100 | m = u >> 1 | |
101 | while l != m: | |
102 | if ea < list[m][0]: | |
103 | u = m | |
104 | else: | |
105 | l = m | |
106 | m = l + ((u - l) >> 1) | |
107 | return list[m] | |
108 | ||
109 | ||
110 |