summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/annotate.cc28
-rw-r--r--src/annotate.h1
2 files changed, 29 insertions, 0 deletions
diff --git a/src/annotate.cc b/src/annotate.cc
index cd1733ca..1e243beb 100644
--- a/src/annotate.cc
+++ b/src/annotate.cc
@@ -38,6 +38,34 @@
namespace ledger {
+bool annotation_t::operator<(const annotation_t& rhs) const
+{
+ if (! price && rhs.price) return true;
+ if (price && ! rhs.price) return false;
+ if (! date && rhs.date) return true;
+ if (date && ! rhs.date) return false;
+ if (! tag && rhs.tag) return true;
+ if (tag && ! rhs.tag) return false;
+
+ if (price) {
+ if (price->commodity().symbol() < rhs.price->commodity().symbol())
+ return true;
+ if (price->commodity().symbol() > rhs.price->commodity().symbol())
+ return false;
+ if (*price < *rhs.price) return true;
+ if (*price > *rhs.price) return false;
+ }
+ if (date) {
+ if (*date < *rhs.date) return true;
+ if (*date > *rhs.date) return false;
+ }
+ if (tag) {
+ if (*tag < *rhs.tag) return true;
+ if (*tag > *rhs.tag) return false;
+ }
+ return false;
+}
+
void annotation_t::parse(std::istream& in)
{
do {
diff --git a/src/annotate.h b/src/annotate.h
index 3c6db8e8..29294e88 100644
--- a/src/annotate.h
+++ b/src/annotate.h
@@ -79,6 +79,7 @@ struct annotation_t : public supports_flags<>,
return price || date || tag;
}
+ bool operator<(const annotation_t& rhs) const;
bool operator==(const annotation_t& rhs) const {
return (price == rhs.price &&
date == rhs.date &&