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"
16 #include "GraphicsImage.h"
20 #include "support/filetools.h"
29 using support::FileName
;
33 /** The cache contains one item per file, so use a map to find the
34 * cache item quickly by filename.
36 typedef std::map
<FileName
, Cache::ItemPtr
> CacheType
;
47 // Now return the cache
48 static Cache singleton
;
62 std::vector
<string
> Cache::loadableFormats() const
64 return Image::loadableFormats();
68 void Cache::add(FileName
const & file
) const
70 // Is the file in the cache already?
72 LYXERR(Debug::GRAPHICS
) << "Cache::add(" << file
<< "):\n"
73 << "The file is already in the cache."
78 pimpl_
->cache
[file
] = ItemPtr(new CacheItem(file
));
82 void Cache::remove(FileName
const & file
) const
84 CacheType::iterator it
= pimpl_
->cache
.find(file
);
85 if (it
== pimpl_
->cache
.end())
88 ItemPtr
& item
= it
->second
;
90 if (item
.use_count() == 1) {
91 // The graphics file is in the cache, but nothing else
93 pimpl_
->cache
.erase(it
);
98 bool Cache::inCache(FileName
const & file
) const
100 return pimpl_
->cache
.find(file
) != pimpl_
->cache
.end();
104 Cache::ItemPtr
const Cache::item(FileName
const & file
) const
106 CacheType::const_iterator it
= pimpl_
->cache
.find(file
);
107 if (it
== pimpl_
->cache
.end())
113 } // namespace graphics