X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FTextCache.C;h=5e11893eb98bda06fb8fd3a4e246c432b2a27139;hb=2b300d130c21037e9ae9cb547024be53111d2014;hp=0b5be6340e0e35874ddbbe265039683c9d90230a;hpb=77e706c44175f3cf71473a42d5db890c77b3b7b3;p=lyx.git diff --git a/src/TextCache.C b/src/TextCache.C index 0b5be6340e..5e11893eb9 100644 --- a/src/TextCache.C +++ b/src/TextCache.C @@ -27,29 +27,31 @@ using std::for_each; using std::remove_if; using std::find_if; using std::endl; +using std::make_pair; extern BufferList bufferlist; class text_fits { public: - text_fits(Buffer * b, unsigned short p) + text_fits(Buffer * b, int p) : buf(b), pw(p) {} - bool operator()(TextCache::value_type & vt) { - if (vt->params == buf && vt->paperWidth() == pw) return true; + bool operator()(TextCache::value_type const & vt) const { + if (vt.first == buf && vt.second.first == pw) + return true; return false; } private: Buffer * buf; - unsigned short pw; + int pw; }; -LyXText * TextCache::findFit(Buffer * b, unsigned short p) +LyXText * TextCache::findFit(Buffer * b, int p) { Cache::iterator it = find_if(cache.begin(), cache.end(), text_fits(b, p)); if (it != cache.end()) { - LyXText * tmp = (*it); + LyXText * tmp = (*it).second.second; cache.erase(it); return tmp; } @@ -60,14 +62,15 @@ LyXText * TextCache::findFit(Buffer * b, unsigned short p) class show_text { public: show_text(ostream & o) : os(o) {} - void operator()(TextCache::value_type & vt) { - os << "\tBuffer: " << vt->params - << "\tWidth: " << vt->paperWidth() << endl; + void operator()(TextCache::value_type const & vt) { + os << "\tBuffer: " << vt.first + << "\tWidth: " << vt.second.first << endl; } private: ostream & os; }; + void TextCache::show(ostream & os, string const & str) { os << "TextCache: " << str << endl; @@ -75,18 +78,18 @@ void TextCache::show(ostream & os, string const & str) } -void TextCache::show(ostream & os, LyXText * lt) +void TextCache::show(ostream & os, TextCache::value_type const & vt) { show_text st(os); - st(lt); + st(vt); } -void TextCache::add(LyXText * text) +void TextCache::add(Buffer * buf, int workwidth, LyXText * text) { lyxerr.debug() << "TextCache::add " << text; - if (bufferlist.isLoaded(text->params)) { - cache.push_back(text); + if (bufferlist.isLoaded(buf)) { + cache[buf] = make_pair(workwidth, text); lyxerr.debug() << " added" << endl; } else { delete text; @@ -98,7 +101,7 @@ void TextCache::add(LyXText * text) class delete_text { public: void operator()(TextCache::value_type & vt) { - delete vt; + delete vt.second.second; } }; @@ -114,29 +117,18 @@ class has_buffer { public: has_buffer(Buffer * b) : buf(b) {} - bool operator()(TextCache::value_type & vt) { - if (vt->params == buf) return true; + bool operator()(TextCache::value_type const & vt) const{ + if (vt.first == buf) return true; return false; } private: - Buffer * buf; + Buffer const * buf; }; void TextCache::removeAllWithBuffer(Buffer * buf) { - Cache::iterator it = remove_if(cache.begin(), cache.end(), - has_buffer(buf)); - if (it != cache.end()) { - if (lyxerr.debugging()) { - lyxerr.debug() << "TextCache::removeAllWithbuffer " - "Removing:\n"; - for_each(it, cache.end(), show_text(lyxerr)); - lyxerr << endl; - } - for_each(it, cache.end(), delete_text()); - cache.erase(it, cache.end()); - } + cache.erase(buf); } // Global instance