]> git.lyx.org Git - lyx.git/blobdiff - src/graphics/GraphicsCache.h
Run codespell on tex2lyx/, client/, convert/ and graphics/
[lyx.git] / src / graphics / GraphicsCache.h
index 712ad8006235d4da68371639c08482427111a7ed..0fd1dd0102a1945eb990c32140f79d7a4c2a2018 100644 (file)
@@ -1,63 +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 <memory>
+#include <string>
+#include <vector>
+
 
-#include <map>
+namespace lyx {
 
-#include "LString.h"
-#include "GraphicsCacheItem.h"
-#include <boost/utility.hpp>
-#include <boost/smart_ptr.hpp>
+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<GraphicsCacheItem> 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<std::string> 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<CacheItem> ItemPtr;
        ///
-       typedef std::map<string, shared_ptr_item> 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