diff options
author | randomdan <randomdan@localhost> | 2011-09-01 23:19:14 +0000 |
---|---|---|
committer | randomdan <randomdan@localhost> | 2011-09-01 23:19:14 +0000 |
commit | b8a866d742648e13d706c4979380d75a13761a1d (patch) | |
tree | 136d4d10259705948cd4c021e19206932aa8df9f | |
parent | Add more precompiled headers (diff) | |
download | project2-b8a866d742648e13d706c4979380d75a13761a1d.tar.bz2 project2-b8a866d742648e13d706c4979380d75a13761a1d.tar.xz project2-b8a866d742648e13d706c4979380d75a13761a1d.zip |
Allow low preference caches to refill higher ones
-rw-r--r-- | project2/common/cache.cpp | 2 | ||||
-rw-r--r-- | project2/common/rowProcessor.cpp | 23 | ||||
-rw-r--r-- | project2/common/rowProcessor.h | 4 |
3 files changed, 17 insertions, 12 deletions
diff --git a/project2/common/cache.cpp b/project2/common/cache.cpp index 1c078fb..7ad4053 100644 --- a/project2/common/cache.cpp +++ b/project2/common/cache.cpp @@ -17,7 +17,7 @@ bool Cache::checkAndExecute(const Glib::ustring & n, const Glib::ustring & f, co RowSetCPtr cached = getCachedRowSet(n, f, rp); if (cached) { try { - Logger()->messagef(LOG_ERR, "Executing from cache"); + Logger()->messagef(LOG_DEBUG, "Executing from cache '%s'", name.c_str()); cached->execute(f, rp); return true; } diff --git a/project2/common/rowProcessor.cpp b/project2/common/rowProcessor.cpp index 8161aaf..71fdd76 100644 --- a/project2/common/rowProcessor.cpp +++ b/project2/common/rowProcessor.cpp @@ -28,30 +28,33 @@ RowProcessor::execute() const ScopeObject _ihp(boost::bind(&IHaveParameters::pop, this)); BOOST_FOREACH(const CachePtr & c, caches) { if (c->checkAndExecute(source->name, filter, this)) { + BOOST_FOREACH(const TargetCaches::value_type & c, tc) { + c->get<1>()->close(source->name, filter, this); + } + tc.clear(); return; } - } - BOOST_FOREACH(const CachePtr & c, caches) { PresenterPtr p = c->openFor(source->name, filter, this); if (p) { - tc.insert(p); + tc.insert(TargetCachePtr(new TargetCache(p, c))); } } + Logger()->messagef(LOG_DEBUG, "Executing from source '%s'", source->name.c_str()); source->execute(filter, this); - tc.clear(); - BOOST_FOREACH(const CachePtr & c, caches) { - c->close(source->name, filter, this); + BOOST_FOREACH(const TargetCaches::value_type & c, tc) { + c->get<1>()->close(source->name, filter, this); } + tc.clear(); } void RowProcessor::rowReadyInternal(const RowState * rs) const { BOOST_FOREACH(const TargetCaches::value_type & c, tc) { - c->pushSub(filter.empty() ? "row" : filter); - rs->foreachColumn(boost::bind(&Presenter::addField, c, _2, _3)); - rs->foreachAttr(boost::bind(&Presenter::addAttr, c, _1, _2)); - c->popSub(); + c->get<0>()->pushSub(filter.empty() ? "row" : filter); + rs->foreachColumn(boost::bind(&Presenter::addField, c->get<0>(), _2, _3)); + rs->foreachAttr(boost::bind(&Presenter::addAttr, c->get<0>(), _1, _2)); + c->get<0>()->popSub(); } rowReady(rs); } diff --git a/project2/common/rowProcessor.h b/project2/common/rowProcessor.h index c25dc73..3f39d19 100644 --- a/project2/common/rowProcessor.h +++ b/project2/common/rowProcessor.h @@ -29,7 +29,9 @@ class RowProcessor : public IHaveParameters { virtual void rowReady(const RowState *) const = 0; typedef ANONORDEREDSTORAGEOF(Cache) Caches; Caches caches; - typedef std::set<PresenterPtr> TargetCaches; + typedef boost::tuple<PresenterPtr, CachePtr> TargetCache; + typedef boost::shared_ptr<TargetCache> TargetCachePtr; + typedef std::set<TargetCachePtr> TargetCaches; mutable TargetCaches tc; }; |