]> git.lyx.org Git - lyx.git/blobdiff - src/graphics/GraphicsCache.h
If the graphics loader has a copy c-tor it should have copy assignment that does...
[lyx.git] / src / graphics / GraphicsCache.h
index 3c90ee312fe2159063e1a290c58955597017bf3b..ca4d02977679a7a34b0656f2c516f7df13a71395 100644 (file)
@@ -1,39 +1,40 @@
 // -*- C++ -*-
 /**
  *  \file GraphicsCache.h
- *  Copyright 2002 the LyX Team
- *  Read the file COPYING
+ * This file is part of LyX, the document processor.
+ * Licence details can be found in the file COPYING.
  *
- * \author Baruch Even <baruch.even@writeme.com>
- * \author Angus Leeming <a.leeming@ic.ac.uk>
+ * \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
+ *  grfx::Cache is the manager of the image cache.
+ *  It is responsible for creating the grfx::CacheItem's and maintaining them.
+ *
+ *  grfx::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 <map>
 #include <vector>
 #include <boost/utility.hpp>
+#include <boost/scoped_ptr.hpp>
+#include <boost/shared_ptr.hpp>
+
 
 namespace grfx {
 
-class GCache : boost::noncopyable {
+class CacheItem;
+
+class Cache : boost::noncopyable {
 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
@@ -42,13 +43,10 @@ public:
        std::vector<string> loadableFormats() const;
 
        /// Add a graphics file to the cache.
-       void add(string const & file);
+       void add(string const & 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(string const & file) const;
 
        /// Returns \c true if the file is in the cache.
        bool inCache(string const & file) const;
@@ -57,42 +55,30 @@ public:
         *  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 boost::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 boost::shared_ptr<CacheItem> ItemPtr;
+       ///
+       ItemPtr const item(string const & file) const;
 
 private:
        /** Make the c-tor, d-tor private so we can control how many objects
         *  are instantiated.
         */
-       GCache();
+       Cache();
        ///
-       ~GCache();
-
-       /** 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<string, GraphicPtr> CacheType;
+       ~Cache();
 
-       /** 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.
+       boost::scoped_ptr<Impl> const pimpl_;
 };
 
 } // namespace grfx
 
-
 #endif // GRAPHICSCACHE_H