summaryrefslogtreecommitdiff
path: root/src/annotate.cc
diff options
context:
space:
mode:
authorJohn Wiegley <johnw@newartisans.com>2012-03-05 17:47:12 -0600
committerJohn Wiegley <johnw@newartisans.com>2012-03-05 17:47:12 -0600
commite5885cc8a8a1d6cd2a65d04c56ba86d65317f4a1 (patch)
tree86d65169e1540cc0d57aabf061bf9e179097c04b /src/annotate.cc
parentf9de33d21cd62d953147d62e01958557562a1311 (diff)
downloadfork-ledger-e5885cc8a8a1d6cd2a65d04c56ba86d65317f4a1.tar.gz
fork-ledger-e5885cc8a8a1d6cd2a65d04c56ba86d65317f4a1.tar.bz2
fork-ledger-e5885cc8a8a1d6cd2a65d04c56ba86d65317f4a1.zip
Added annotation_t::operator<()
Diffstat (limited to 'src/annotate.cc')
-rw-r--r--src/annotate.cc28
1 files changed, 28 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 {