2 * \file GraphicsCache.cpp
3 * This file is part of LyX, the document processor.
4 * Licence details can be found in the file COPYING.
7 * \author Angus Leeming
9 * Full author contact details are available in file CREDITS.
14 #include "GraphicsCache.h"
15 #include "GraphicsCacheItem.h"
19 #include "frontends/Application.h"
21 #include "support/debug.h"
22 #include "support/FileName.h"
27 using namespace lyx::support;
33 /** The cache contains one item per file, so use a map to find the
34 * cache item quickly by filename.
36 typedef map<FileName, Cache::ItemPtr> CacheType;
47 // Now return the cache
48 static Cache singleton;
64 vector<string> const & Cache::loadableFormats() const
66 static vector<string> fmts;
71 for (string const & native_extension : frontend::loadableImageFormats()) {
72 for (Format const & format : theFormats()) {
73 if (format.extension() == native_extension) {
74 fmts.push_back(format.name());
80 if (lyxerr.debugging()) {
81 LYXERR(Debug::GRAPHICS, "LyX recognises the following image formats:");
82 for (string const & format : fmts) {
83 LYXERR(Debug::GRAPHICS, format << ',');
91 void Cache::add(FileName const & file, FileName const & doc_file) const
93 // Is the file in the cache already?
95 LYXERR(Debug::GRAPHICS, "Cache::add(" << file << "):\n"
96 << "The file is already in the cache.");
100 pimpl_->cache[file] = ItemPtr(new CacheItem(file, doc_file));
104 void Cache::remove(FileName const & file) const
106 CacheType::iterator it = pimpl_->cache.find(file);
107 if (it == pimpl_->cache.end())
110 ItemPtr & item = it->second;
112 if (item.use_count() == 1) {
113 // The graphics file is in the cache, but nothing else
115 pimpl_->cache.erase(it);
120 bool Cache::inCache(FileName const & file) const
122 return pimpl_->cache.find(file) != pimpl_->cache.end();
126 Cache::ItemPtr const Cache::item(FileName const & file) const
128 CacheType::const_iterator it = pimpl_->cache.find(file);
129 if (it == pimpl_->cache.end())
135 } // namespace graphics