GP-3015: Add scanSymbolsByName, javadocs, checks, refactor assembler

This commit is contained in:
Dan 2023-01-13 13:25:33 -05:00 committed by ghidra1
parent 98ab3aec4c
commit bc43f20c3c
17 changed files with 801 additions and 466 deletions

View file

@ -380,6 +380,11 @@ public class DBTraceProgramViewSymbolTable implements SymbolTable {
}));
}
@Override
public SymbolIterator scanSymbolsByName(String startName) {
return new SymbolIteratorAdapter(symbolManager.allSymbols().scanByName(startName));
}
@Override
public int getNumSymbols() {
return symbolManager.allSymbols().size(true);

View file

@ -88,6 +88,10 @@ public abstract class AbstractDBTraceSymbolSingleTypeView<T extends AbstractDBTr
return Collections2.filter(view, s -> predicate.test(s.name));
}
public Iterator<? extends T> scanByName(String startName) {
return symbolsByName.tail(startName, true).values().iterator();
}
public T getByKey(long key) {
return store.getObjectAt(key);
}

View file

@ -15,13 +15,14 @@
*/
package ghidra.trace.database.symbol;
import java.util.Arrays;
import java.util.Collection;
import java.util.*;
import java.util.stream.Collectors;
import com.google.common.collect.Collections2;
import generic.CatenatedCollection;
import ghidra.trace.model.symbol.*;
import ghidra.util.MergeSortingIterator;
public class DBTraceSymbolMultipleTypesView<T extends AbstractDBTraceSymbol>
implements TraceSymbolView<T> {
@ -73,4 +74,11 @@ public class DBTraceSymbolMultipleTypesView<T extends AbstractDBTraceSymbol>
return new CatenatedCollection<>(
Collections2.transform(parts, p -> p.getWithMatchingName(glob, caseSensitive)));
}
@Override
public Iterator<? extends T> scanByName(String startName) {
List<Iterator<? extends T>> iterators =
parts.stream().map(p -> p.scanByName(startName)).collect(Collectors.toList());
return new MergeSortingIterator<>(iterators, Comparator.comparing(s -> s.getName()));
}
}

View file

@ -16,6 +16,7 @@
package ghidra.trace.model.symbol;
import java.util.Collection;
import java.util.Iterator;
public interface TraceSymbolView<T extends TraceSymbol> {
@ -55,4 +56,6 @@ public interface TraceSymbolView<T extends TraceSymbol> {
* @return the collection of matching symbols
*/
Collection<? extends T> getWithMatchingName(String glob, boolean caseSensitive);
Iterator<? extends T> scanByName(String startName);
}