3 * \file GraphicsCache.h
4 * Copyright 2002 the LyX Team
5 * Read the file COPYING
7 * \author Baruch Even <baruch.even@writeme.com>
8 * \author Angus Leeming <a.leeming@ic.ac.uk>
10 * grfx::Cache is the manager of the image cache.
11 * It is responsible for creating the grfx::CacheItem's and maintaining them.
13 * grfx::Cache is a singleton class. It is possible to have only one
14 * instance of it at any moment.
17 #ifndef GRAPHICSCACHE_H
18 #define GRAPHICSCACHE_H
26 #include <boost/utility.hpp>
27 #include <boost/scoped_ptr.hpp>
28 #include <boost/shared_ptr.hpp>
35 class Cache : boost::noncopyable {
38 /// This is a singleton class. Get the instance.
41 /** Which graphics formats can be loaded directly by the image loader.
42 * Other formats can be loaded if a converter to a loadable format
45 std::vector<string> loadableFormats() const;
47 /// Add a graphics file to the cache.
48 void add(string const & file);
50 /// Remove a file from the cache.
51 void remove(string const & file);
53 /// Returns \c true if the file is in the cache.
54 bool inCache(string const & file) const;
56 /** Get the cache item associated with file.
57 * Returns an empty container if there is no such item.
59 * IMPORTANT: whatever uses an image must make a local copy of this
60 * GraphicPtr. The boost::shared_ptr<>::use_count() function is
61 * used to ascertain whether or not to remove the item from the cache
62 * when remove(file) is called.
64 * You have been warned!
66 typedef boost::shared_ptr<CacheItem> ItemPtr;
68 ItemPtr const item(string const & file) const;
71 /** Make the c-tor, d-tor private so we can control how many objects
78 /// Use the Pimpl idiom to hide the internals.
80 /// The pointer never changes although *pimpl_'s contents may.
81 boost::scoped_ptr<Impl> const pimpl_;
86 #endif // GRAPHICSCACHE_H