started implementation of MoneroUtils::reconcile(val1, val2)

This commit is contained in:
woodser
2019-06-11 14:34:19 -04:00
parent 1179991636
commit 0f2bd4b164
2 changed files with 23 additions and 0 deletions
+3
View File
@@ -100,11 +100,14 @@ namespace monero {
void MoneroBlockHeader::merge(const MoneroBlockHeader& header) {
cout << "MoneroBlockHeader::merge()" << endl;
if (this == &header) return;
id = MoneroUtils::reconcile(id, header.id);
throw runtime_error("Not implemented");
}
void MoneroBlock::merge(const MoneroBlock& block) {
cout << "MoneroBlock::merge()" << endl;
MoneroBlockHeader::merge(block);
throw runtime_error("Not implemented");
}
+20
View File
@@ -94,5 +94,25 @@ namespace MoneroUtils
CHECK_AND_ASSERT_MES(r, std::string(), "Failed to serialize rct signatures base");
return ss.str();
}
template <class T> boost::optional<T> reconcile(const boost::optional<T>& val1, const boost::optional<T>& val2, boost::optional<bool> resolveDefined, boost::optional<bool> resolveTrue, boost::optional<bool> resolveMax) {
cout << "reconcile(" << val1 << ", " << val2 << ")" << endl;
// check for equality
if (val1 == val2) return val1;
// resolve one value none
if (val1 == boost::none || val2 == boost::none) {
if (resolveDefined == false) return boost::none; // TODO: boost::optional equality comparitor wokrs like this?
else return val1 == boost::none ? val2 : val1;
}
// throw runtime_error("Cannot reconcile values " + val1 + " and " + val2 + " with config: [" + resolveDefined + ", " + resolveTrue + ", " + resolveMax + "]", val1, val2);
throw runtime_error("Cannot reconcile values");
}
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);
}
}
#endif /* MoneroUtils_h */