X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Fgraphics%2FGraphicsCache.h;h=0fd1dd0102a1945eb990c32140f79d7a4c2a2018;hb=3695b631c6c16d1d87c646d25143c416e7358bad;hp=9272e58e490cd09b2033d359e8132afdb4da4244;hpb=83acbbd5237373926c629855379e1df9a04209b2;p=lyx.git diff --git a/src/graphics/GraphicsCache.h b/src/graphics/GraphicsCache.h index 9272e58e49..0fd1dd0102 100644 --- a/src/graphics/GraphicsCache.h +++ b/src/graphics/GraphicsCache.h @@ -1,63 +1,92 @@ // -*- C++ -*- -/* This file is part of - * ================================================= - * - * LyX, The Document Processor - * Copyright 1995 Matthias Ettrich. - * Copyright 1995-2001 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 +namespace lyx { -#include "LString.h" -#include "GraphicsCacheItem.h" -#include -#include +namespace support { class FileName; } -class GraphicsCacheItem; +namespace graphics { -/** GraphicsCache is the manager of the image cache. - It is responsible of 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 : boost::noncopyable { +class CacheItem; + +class Cache { public: - /// Get the instance of the class. - static GraphicsCache & getInstance(); - /// Public destructor due to compiler warnings. - ~GraphicsCache(); - typedef boost::shared_ptr shared_ptr_item; + /// This is a singleton class. Get the instance. + static Cache & get(); - /// Add a file to the cache. - shared_ptr_item addFile(string const & filename); + /** 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; -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() {} - + /// 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; + + /** 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; /// - typedef std::map CacheType; + 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. + */ + Cache(); /// - CacheType cache; - - /** We need this so that an Item can tell the cache that it should be - deleted. (to call removeFile). - It also helps removing a warning gcc emits. */ - friend class GraphicsCacheItem; + ~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