summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn Wiegley <johnw@newartisans.com>2012-02-27 11:52:27 -0600
committerJohn Wiegley <johnw@newartisans.com>2012-02-27 11:52:27 -0600
commit3ed09fc85b60e354906f881db1e2bbfa47331273 (patch)
tree2ee4890dbeea8133bb644a9735173baadba08f5a
parent5532a1a8b756f0f7499570afccb1d4fc3e9bc76d (diff)
downloadfork-ledger-3ed09fc85b60e354906f881db1e2bbfa47331273.tar.gz
fork-ledger-3ed09fc85b60e354906f881db1e2bbfa47331273.tar.bz2
fork-ledger-3ed09fc85b60e354906f881db1e2bbfa47331273.zip
Optimizations
-rw-r--r--src/journal.cc110
-rw-r--r--src/xact.cc7
2 files changed, 62 insertions, 55 deletions
diff --git a/src/journal.cc b/src/journal.cc
index 355f3ee6..4900a7f3 100644
--- a/src/journal.cc
+++ b/src/journal.cc
@@ -136,21 +136,23 @@ account_t * journal_t::register_account(const string& name, post_t * post,
}
}
- if (! result->has_flags(ACCOUNT_KNOWN)) {
- if (! post) {
- if (force_checking)
- fixed_accounts = true;
- result->add_flags(ACCOUNT_KNOWN);
- }
- else if (! fixed_accounts && post->_state != item_t::UNCLEARED) {
- result->add_flags(ACCOUNT_KNOWN);
- }
- else if (checking_style == CHECK_WARNING) {
- warning_(_("%1Unknown account '%2'") << location
- << result->fullname());
- }
- else if (checking_style == CHECK_ERROR) {
- throw_(parse_error, _("Unknown account '%1'") << result->fullname());
+ if (checking_style == CHECK_WARNING || checking_style == CHECK_ERROR) {
+ if (! result->has_flags(ACCOUNT_KNOWN)) {
+ if (! post) {
+ if (force_checking)
+ fixed_accounts = true;
+ result->add_flags(ACCOUNT_KNOWN);
+ }
+ else if (! fixed_accounts && post->_state != item_t::UNCLEARED) {
+ result->add_flags(ACCOUNT_KNOWN);
+ }
+ else if (checking_style == CHECK_WARNING) {
+ warning_(_("%1Unknown account '%2'") << location
+ << result->fullname());
+ }
+ else if (checking_style == CHECK_ERROR) {
+ throw_(parse_error, _("Unknown account '%1'") << result->fullname());
+ }
}
}
@@ -197,24 +199,26 @@ void journal_t::register_commodity(commodity_t& comm,
variant<int, xact_t *, post_t *> context,
const string& location)
{
- if (! comm.has_flags(COMMODITY_KNOWN)) {
- if (context.which() == 0) {
- if (force_checking)
- fixed_commodities = true;
- comm.add_flags(COMMODITY_KNOWN);
- }
- else if (! fixed_commodities &&
- ((context.which() == 1 &&
- boost::get<xact_t *>(context)->_state != item_t::UNCLEARED) ||
- (context.which() == 2 &&
- boost::get<post_t *>(context)->_state != item_t::UNCLEARED))) {
- comm.add_flags(COMMODITY_KNOWN);
- }
- else if (checking_style == CHECK_WARNING) {
- warning_(_("%1Unknown commodity '%2'") << location << comm);
- }
- else if (checking_style == CHECK_ERROR) {
- throw_(parse_error, _("Unknown commodity '%1'") << comm);
+ if (checking_style == CHECK_WARNING || checking_style == CHECK_ERROR) {
+ if (! comm.has_flags(COMMODITY_KNOWN)) {
+ if (context.which() == 0) {
+ if (force_checking)
+ fixed_commodities = true;
+ comm.add_flags(COMMODITY_KNOWN);
+ }
+ else if (! fixed_commodities &&
+ ((context.which() == 1 &&
+ boost::get<xact_t *>(context)->_state != item_t::UNCLEARED) ||
+ (context.which() == 2 &&
+ boost::get<post_t *>(context)->_state != item_t::UNCLEARED))) {
+ comm.add_flags(COMMODITY_KNOWN);
+ }
+ else if (checking_style == CHECK_WARNING) {
+ warning_(_("%1Unknown commodity '%2'") << location << comm);
+ }
+ else if (checking_style == CHECK_ERROR) {
+ throw_(parse_error, _("Unknown commodity '%1'") << comm);
+ }
}
}
}
@@ -254,26 +258,28 @@ void journal_t::register_metadata(const string& key, const value_t& value,
variant<int, xact_t *, post_t *> context,
const string& location)
{
- std::set<string>::iterator i = known_tags.find(key);
+ if (checking_style == CHECK_WARNING || checking_style == CHECK_ERROR) {
+ std::set<string>::iterator i = known_tags.find(key);
- if (i == known_tags.end()) {
- if (context.which() == 0) {
- if (force_checking)
- fixed_metadata = true;
- known_tags.insert(key);
- }
- else if (! fixed_metadata &&
- ((context.which() == 1 &&
- boost::get<xact_t *>(context)->_state != item_t::UNCLEARED) ||
- (context.which() == 2 &&
- boost::get<post_t *>(context)->_state != item_t::UNCLEARED))) {
- known_tags.insert(key);
- }
- else if (checking_style == CHECK_WARNING) {
- warning_(_("%1Unknown metadata tag '%2'") << location << key);
- }
- else if (checking_style == CHECK_ERROR) {
- throw_(parse_error, _("Unknown metadata tag '%1'") << key);
+ if (i == known_tags.end()) {
+ if (context.which() == 0) {
+ if (force_checking)
+ fixed_metadata = true;
+ known_tags.insert(key);
+ }
+ else if (! fixed_metadata &&
+ ((context.which() == 1 &&
+ boost::get<xact_t *>(context)->_state != item_t::UNCLEARED) ||
+ (context.which() == 2 &&
+ boost::get<post_t *>(context)->_state != item_t::UNCLEARED))) {
+ known_tags.insert(key);
+ }
+ else if (checking_style == CHECK_WARNING) {
+ warning_(_("%1Unknown metadata tag '%2'") << location << key);
+ }
+ else if (checking_style == CHECK_ERROR) {
+ throw_(parse_error, _("Unknown metadata tag '%1'") << key);
+ }
}
}
diff --git a/src/xact.cc b/src/xact.cc
index ae571b62..b581db95 100644
--- a/src/xact.cc
+++ b/src/xact.cc
@@ -565,7 +565,6 @@ bool xact_t::valid() const
}
namespace {
-
bool post_pred(expr_t::ptr_op_t op, post_t& post)
{
switch (op->kind) {
@@ -582,6 +581,9 @@ namespace {
else
break;
+ case expr_t::op_t::O_EQ:
+ return post_pred(op->left(), post) == post_pred(op->right(), post);
+
case expr_t::op_t::O_NOT:
return ! post_pred(op->left(), post);
@@ -604,8 +606,7 @@ namespace {
throw_(calc_error, _("Unhandled operator"));
return false;
}
-
-} // unnamed namespace
+}
void auto_xact_t::extend_xact(xact_base_t& xact)
{