public override SourceAddress Lookup(TargetAddress address)
{
if (address.IsNull || (address < start) || (address >= end))
return null;
if (Addresses.Length < 1)
return null;
TargetAddress next_address = end;
TargetAddress next_not_hidden = end;
for (int i = Addresses.Length-1; i >= 0; i--) {
LineEntry entry = (LineEntry) Addresses [i];
int range = (int) (next_not_hidden - address);
next_address = entry.Address;
if (!entry.IsHidden)
next_not_hidden = entry.Address;
if (next_address > address)
continue;
int offset = (int) (address - next_address);
return create_address (entry, offset, range);
}
if (Addresses.Length < 1)
return null;
return create_address (Addresses [0], (int) (address - start),
(int) (Addresses [0].Address - address));
}