def php_line_number_from_repo(func, pc): unit = func['m_unit'] repo_id = unit['m_repoId'] sn = int(unit['m_sn']) conn = repo.get(repo_id) if conn is None: return None # Query for the line table. c = conn.cursor() table = repo.table('UnitLineTable') c.execute('SELECT data FROM %s WHERE unitSn == ?;' % table, (sn,)) row = c.fetchone() if row is None: return None buf = row[0] # Unpack the line table structure. line_table = [] decoder = repo.Decoder(buf) size = decoder.decode() for i in xrange(size): line_table.append({ 'm_pastOffset': decoder.decode(), 'm_val': decoder.decode(), }) if not decoder.finished(): # Something went wrong. return None # Find the upper bound for our PC. Note that this relies on the Python # dict comparison operator comparing componentwise lexicographically based # on the alphabetical ordering of keys. key = {'m_pastOffset': int(pc), 'm_val': -1} i = bisect.bisect_right(line_table, key) if i == len(line_table): return None return line_table[i]['m_val']
def php_line_number_from_repo(func, pc): unit = func['m_unit'] repo_id = unit['m_repoId'] sn = int(unit['m_sn']) conn = repo.get(repo_id) if conn is None: return None # Query for the line table. c = conn.cursor() table = repo.table('UnitLineTable') c.execute('SELECT data FROM %s WHERE unitSn == ?;' % table, (sn, )) row = c.fetchone() if row is None: return None buf = row[0] # Unpack the line table structure. line_table = [] decoder = repo.Decoder(buf) size = decoder.decode() for i in xrange(size): line_table.append({ 'm_pastOffset': decoder.decode(), 'm_val': decoder.decode(), }) if not decoder.finished(): # Something went wrong. return None # Find the upper bound for our PC. Note that this relies on the Python # dict comparison operator comparing componentwise lexicographically based # on the alphabetical ordering of keys. key = {'m_pastOffset': int(pc), 'm_val': -1} i = bisect.bisect_right(line_table, key) if i == len(line_table): return None return line_table[i]['m_val']