impl MoneroUtils::reconcile(vector, vector)

This commit is contained in:
woodser
2019-06-22 13:28:35 -04:00
parent 9948e5c034
commit 462fc83760
2 changed files with 17 additions and 3 deletions
+3 -3
View File
@@ -92,7 +92,7 @@ namespace monero {
// merge coinbase tx
if (coinbaseTx == boost::none) coinbaseTx = otherBlock->coinbaseTx;
else if (otherBlock->coinbaseTx != boost::none) (**coinbaseTx).merge(*coinbaseTx, *otherBlock->coinbaseTx);
else if (otherBlock->coinbaseTx != boost::none) coinbaseTx.get()->merge(*coinbaseTx, *otherBlock->coinbaseTx);
// merge non-coinbase txs
if (txs.empty()) txs = otherBlock->txs;
@@ -111,13 +111,13 @@ namespace monero {
}
if (!txs.empty()) {
for (const shared_ptr<MoneroTx>& tx : txs) {
tx->block = static_pointer_cast<MoneroBlock>(self);
tx->block = self;
}
}
// merge other fields
hex = MoneroUtils::reconcile(hex, otherBlock->hex);
//txIds = MoneroUtils::reconcile(txIds, otherBlock->txIds); // TODO: implement
txIds = MoneroUtils::reconcile(txIds, otherBlock->txIds);
}
// ------------------------------- MONERO TX --------------------------------
+14
View File
@@ -173,6 +173,20 @@ namespace MoneroUtils
return reconcile(val1, val2, boost::none, boost::none, boost::none);
}
template <class T>
vector<T> reconcile(const vector<T>& v1, const vector<T>& v2) {
// check for equality
if (v1 == v2) return v1;
// resolve one vector empty
if (v1.empty()) return v2;
if (v2.empty()) return v1;
// otherwise cannot reconcile
throw runtime_error("Cannot reconcile vectors");
}
// template <class T>
// boost::optional<T> reconcile(const boost::optional<T>& val1, const boost::optional<T>& val2) {
// return reconcile(val1, val2, boost::none, boost::none, boost::none);