X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Fgraphics%2FGraphicsCache.h;h=0fd1dd0102a1945eb990c32140f79d7a4c2a2018;hb=c6f262a5b74e7bf595efd6a02ca26a2900e5e6eb;hp=d64df5f5d321193930dcc2b9c1fb2ab5433721d7;hpb=7110b8eda4ab2dc3e87c53c89225caaff972f9eb;p=lyx.git diff --git a/src/graphics/GraphicsCache.h b/src/graphics/GraphicsCache.h index d64df5f5d3..0fd1dd0102 100644 --- a/src/graphics/GraphicsCache.h +++ b/src/graphics/GraphicsCache.h @@ -1,54 +1,92 @@ // -*- C++ -*- -/* This file is part of - * ================================================= - * - * LyX, The Document Processor - * Copyright 1995 Matthias Ettrich. - * Copyright 1995-2000 The LyX Team. +/** + * \file GraphicsCache.h + * This file is part of LyX, the document processor. + * Licence details can be found in the file COPYING. * - * This file Copyright 2000 Baruch Even - * ================================================= */ + * \author Baruch Even + * \author Angus Leeming + * + * Full author contact details are available in file CREDITS. + * + * 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 +#include +#include -#include -#include "LString.h" -#include "GraphicsCacheItem.h" +namespace lyx { -/** GraphicsCache is the manager of the image cache, it is responsible to - * create the GraphicsCacheItem's and maintain them. - * - * GraphicsCache is a singleton class, there should be only one instance of - * it at any moment. - */ -class GraphicsCache { +namespace support { class FileName; } + +namespace graphics { + +class CacheItem; + +class Cache { public: - /// Get the instance of the class. - static GraphicsCache * getInstance(); - /// Add a file to the cache. - GraphicsCacheItem * addFile(string const & filename); + /// This is a singleton class. Get the instance. + static Cache & get(); -private: - /// Remove a cache item if it's count has gone to zero. - void removeFile(string const & filename); - - /// Private c-tor so we can control how many objects are instantiated. - GraphicsCache() {} + /** 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 const & loadableFormats() const; + + /// Add a graphics file to the cache. + void add(support::FileName const & file, support::FileName const & doc_file) const; + + /// 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(support::FileName const & file) const; - /// Private d-tor so that no-one will destroy us. - ~GraphicsCache(); + /** 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 + * 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! + */ + typedef std::shared_ptr ItemPtr; + /// + ItemPtr const item(support::FileName const & file) const; - /// Holder of the single instance of the class. - static GraphicsCache * singleton; +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. + */ + Cache(); + /// + ~Cache(); - typedef std::map CacheType; - CacheType cache; + /// Use the Pimpl idiom to hide the internals. + class Impl; + /// The pointer never changes although *pimpl_'s contents may. + Impl * const pimpl_; }; -#endif + +} // namespace graphics +} // namespace lyx + +#endif // GRAPHICSCACHE_H