mirror of
https://github.com/corda/corda.git
synced 2025-05-04 17:53:05 +00:00
core: Address topo sort style suggestions
This commit is contained in:
parent
8e6198cf91
commit
fcd477e332
@ -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
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user