X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;ds=inline;f=src%2Fgraphics%2FGraphicsCache.h;h=0fd1dd0102a1945eb990c32140f79d7a4c2a2018;hb=8663a371f31dc7bb888071c15a0b2cd4c3669c60;hp=3c90ee312fe2159063e1a290c58955597017bf3b;hpb=514156adbb94a0e4a2c150ef2920d600b67cef16;p=lyx.git diff --git a/src/graphics/GraphicsCache.h b/src/graphics/GraphicsCache.h index 3c90ee312f..0fd1dd0102 100644 --- a/src/graphics/GraphicsCache.h +++ b/src/graphics/GraphicsCache.h @@ -1,98 +1,92 @@ // -*- C++ -*- /** - * \file GraphicsCache.h - * Copyright 2002 the LyX Team - * Read the file COPYING + * \file GraphicsCache.h + * This file is part of LyX, the document processor. + * Licence details can be found in the file COPYING. * - * \author Baruch Even - * \author Angus Leeming + * \author Baruch Even + * \author Angus Leeming * - * grfx::GCache is the manager of the image cache. - * It is responsible for creating the grfx::GCacheItem's and maintaining them. + * Full author contact details are available in file CREDITS. * - * grfx::GCache is a singleton class. It is possible to have only one - * instance of it at any moment. + * lyx::graphics::Cache is the manager of the image cache. + * It is responsible for creating the lyx::graphics::CacheItem's + * and maintaining them. + * + * lyx::graphics::Cache is a singleton class. It is possible to have only one + * instance of it at any moment. */ #ifndef GRAPHICSCACHE_H #define GRAPHICSCACHE_H -#ifdef __GNUG__ -#pragma interface -#endif - -#include "LString.h" -#include "GraphicsTypes.h" -#include +#include +#include #include -#include -namespace grfx { -class GCache : boost::noncopyable { +namespace lyx { + +namespace support { class FileName; } + +namespace graphics { + +class CacheItem; + +class Cache { public: /// This is a singleton class. Get the instance. - static GCache & get(); + static Cache & get(); /** Which graphics formats can be loaded directly by the image loader. * Other formats can be loaded if a converter to a loadable format * can be defined. */ - std::vector loadableFormats() const; + std::vector const & loadableFormats() const; /// Add a graphics file to the cache. - void add(string const & file); + void add(support::FileName const & file, support::FileName const & doc_file) const; - /** Remove a file from the cache. - * Called from the InsetGraphics d-tor. - * If we use reference counting, then this may become redundant. - */ - void remove(string const & file); + /// Remove a file from the cache. + void remove(support::FileName const & file) const; /// Returns \c true if the file is in the cache. - bool inCache(string const & file) const; + bool inCache(support::FileName const & file) const; /** Get the cache item associated with file. * Returns an empty container if there is no such item. * * IMPORTANT: whatever uses an image must make a local copy of this - * GraphicPtr. The boost::shared_ptr<>::use_count() function is + * ItemPtr. The shared_ptr<>::use_count() function is * used to ascertain whether or not to remove the item from the cache * when remove(file) is called. * * You have been warned! */ - GraphicPtr const graphic(string const & file) const; - - /** Get the image associated with file. - If the image is not yet loaded, (or is not in the cache!) return - an empty container. - */ - ImagePtr const image(string const & file) const; + typedef std::shared_ptr ItemPtr; + /// + ItemPtr const item(support::FileName const & file) const; private: + /// noncopyable + Cache(Cache const &); + void operator=(Cache const &); + /** Make the c-tor, d-tor private so we can control how many objects * are instantiated. */ - GCache(); + Cache(); /// - ~GCache(); + ~Cache(); - /** The cache contains one item per file, so use a map to find the - * cache item quickly by filename. - * Note that each cache item can have multiple views, potentially one - * per inset that references the original file. - */ - typedef std::map CacheType; - - /** Store a pointer to the cache so that we can forward declare - * GCacheItem. - */ - CacheType * cache; + /// Use the Pimpl idiom to hide the internals. + class Impl; + /// The pointer never changes although *pimpl_'s contents may. + Impl * const pimpl_; }; -} // namespace grfx - +} // namespace graphics +} // namespace lyx #endif // GRAPHICSCACHE_H