core: Address topo sort style suggestions

This commit is contained in:
Andras Slemmer 2016-09-08 10:17:00 +01:00
parent 8e6198cf91
commit fcd477e332

View File

@ -34,8 +34,7 @@ class ResolveTransactionsProtocol(private val txHashes: Set<SecureHash>,
private fun dependencyIDs(wtx: WireTransaction) = wtx.inputs.map { it.txhash }.toSet() private fun dependencyIDs(wtx: WireTransaction) = wtx.inputs.map { it.txhash }.toSet()
private fun topologicalSort(transactions: Collection<SignedTransaction>): List<SignedTransaction> { private fun topologicalSort(transactions: Collection<SignedTransaction>): List<SignedTransaction> {
// Construct txhash -> dependent-txs map
// Construct txhash -> dependent-txhashes map
val forwardGraph = HashMap<SecureHash, HashSet<SignedTransaction>>() val forwardGraph = HashMap<SecureHash, HashSet<SignedTransaction>>()
transactions.forEach { tx -> transactions.forEach { tx ->
tx.tx.inputs.forEach { input -> tx.tx.inputs.forEach { input ->
@ -48,22 +47,21 @@ class ResolveTransactionsProtocol(private val txHashes: Set<SecureHash>,
val result = ArrayList<SignedTransaction>(transactions.size) val result = ArrayList<SignedTransaction>(transactions.size)
fun visit(transaction: SignedTransaction) { fun visit(transaction: SignedTransaction) {
if (transaction.id in visited) { if (transaction.id !in visited) {
return visited.add(transaction.id)
forwardGraph[transaction.id]?.forEach {
visit(it)
}
result.add(transaction)
} }
visited.add(transaction.id)
forwardGraph[transaction.id]?.forEach {
visit(it)
}
result.add(transaction)
} }
transactions.forEach { transactions.forEach {
visit(it) visit(it)
} }
require(result.size == transactions.size)
result.reverse() result.reverse()
require(result.size == transactions.size)
return result return result
} }