X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FTextCache.C;h=31f97029f08e170bebeb43cca037eeccd2fb2868;hb=98c966c64594611e469313314abd1e59524adb4a;hp=0b5be6340e0e35874ddbbe265039683c9d90230a;hpb=77e706c44175f3cf71473a42d5db890c77b3b7b3;p=lyx.git diff --git a/src/TextCache.C b/src/TextCache.C index 0b5be6340e..31f97029f0 100644 --- a/src/TextCache.C +++ b/src/TextCache.C @@ -1,11 +1,11 @@ /* This file is part of - * ====================================================== - * - * LyX, The Document Processor + * ====================================================== + * + * LyX, The Document Processor * Copyright 1995 Matthias Ettrich - * Copyright 1995-2000 The LyX Team + * Copyright 1995-2001 The LyX Team * - * This file is Copyright 2000 + * This file is Copyright 2000-2001 * Lars Gullik Bjønnes * * ====================================================== */ @@ -16,40 +16,67 @@ #pragma implementation #endif -#include - #include "TextCache.h" #include "buffer.h" #include "bufferlist.h" +#include "debug.h" + +#include using std::ostream; using std::for_each; using std::remove_if; using std::find_if; using std::endl; +using std::make_pair; extern BufferList bufferlist; +namespace { + 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) +class show_text { +public: + show_text(ostream & o) : os(o) {} + void operator()(TextCache::value_type const & vt) { + os << "\tBuffer: " << vt.first + << "\tWidth: " << vt.second.first << endl; + } +private: + ostream & os; +}; + + +class delete_text { +public: + void operator()(TextCache::value_type & vt) { + delete vt.second.second; + } +}; + +} // namespace anon + + +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; } @@ -57,17 +84,6 @@ 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; - } -private: - ostream & os; -}; - void TextCache::show(ostream & os, string const & str) { os << "TextCache: " << str << endl; @@ -75,34 +91,26 @@ 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); - lyxerr.debug() << " added" << endl; + lyxerr[Debug::INFO] << "TextCache::add " << text; + if (bufferlist.isLoaded(buf)) { + cache[buf] = make_pair(workwidth, text); + lyxerr[Debug::INFO] << " added" << endl; } else { delete text; - lyxerr.debug() << " deleted" << endl; + lyxerr[Debug::INFO] << " deleted" << endl; } } -class delete_text { -public: - void operator()(TextCache::value_type & vt) { - delete vt; - } -}; - - void TextCache::clear() { for_each(cache.begin(), cache.end(), delete_text()); @@ -110,33 +118,9 @@ void TextCache::clear() } -class has_buffer { -public: - has_buffer(Buffer * b) - : buf(b) {} - bool operator()(TextCache::value_type & vt) { - if (vt->params == buf) return true; - return false; - } -private: - Buffer * 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