]> git.lyx.org Git - lyx.git/blobdiff - src/Buffer.h
typo
[lyx.git] / src / Buffer.h
index 5186994eaa760812c1f260170383f278f540b992..a9696812bf7c458b1ae9103626166de7fe31b73b 100644 (file)
@@ -29,7 +29,6 @@ namespace lyx {
 
 class BiblioInfo;
 class BufferParams;
-class BufferSet;
 class DispatchResult;
 class DocIterator;
 class docstring_list;
@@ -70,6 +69,11 @@ class FileName;
 class FileNameList;
 }
 
+
+class Buffer;
+typedef std::list<Buffer *> ListOfBuffers;
+
+
 /** The buffer object.
  * This is the buffer object. It contains all the informations about
  * a document loaded into LyX.
@@ -301,9 +305,6 @@ public:
        void setParent(Buffer const *);
        Buffer const * parent() const;
 
-       // Collect all relative buffer
-       std::vector<Buffer const *> allRelatives() const;
-
        /** Get the document's master (or \c this if this is not a
            child document)
         */
@@ -312,11 +313,26 @@ public:
        /// \return true if \p child is a child of this \c Buffer.
        bool isChild(Buffer * child) const;
        
-       /// return a vector with all children (and grandchildren)
-       std::vector<Buffer *> getChildren(bool grand_children = true) const;
-
-       /// Add all children (and grandchildren) to supplied vector
-       void getChildren(std::vector<Buffer *> & children, bool grand_children = true) const;
+       /// \return true if this \c Buffer has children
+       bool hasChildren() const;
+       
+       /// \return a list of the direct children of this Buffer.
+       /// this list has no duplicates and is in the order in which
+       /// the children appear.
+       ListOfBuffers getChildren() const;
+       
+       /// \return a list of all descendents of this Buffer (children,
+       /// grandchildren, etc). this list has no duplicates and is in
+       /// the order in which the children appear.
+       ListOfBuffers getDescendents() const;
+
+       /// Collect all relative buffers, in the order in which they appear.
+       /// I.e., the "root" Buffer is first, then its first child, then any
+       /// of its children, etc. However, there are no duplicates in this
+       /// list.
+       /// This is "stable", too, in the sense that it returns the same
+       /// thing from whichever Buffer it is called.
+       ListOfBuffers allRelatives() const;
 
        /// Is buffer read-only?
        bool isReadonly() const;
@@ -342,23 +358,36 @@ public:
        */
        void validate(LaTeXFeatures &) const;
 
-       /// Information from BibTeX databases is cached in the Buffer, so
-       /// we do not have to read the file over and over. 
+       /// Reference information is cached in the Buffer, so we do not
+       /// have to check or read things over and over. 
+       ///
+       /// There are two caches.
+       ///
+       /// One is a cache of the BibTeX files from which reference info is
+       /// being gathered. This cache is PER BUFFER, and the cache for the
+       /// master essentially includes the cache for its children. This gets
+       /// invalidated when an InsetBibtex is created, deleted, or modified.
+       /// 
+       /// The other is a cache of the reference information itself. This
+       /// exists only in the master buffer, and when it needs to be updated,
+       /// the children add their information to the master's cache.
+       
        /// Calling this method invalidates the cache and so requires a
        /// re-read.
-       void invalidateBibinfoCache();
+       void invalidateBibinfoCache() const;
        /// This invalidates the cache of files we need to check.
-       void invalidateBibfileCache();
+       void invalidateBibfileCache() const;
        /// Updates the cached bibliography information.
        /// Note that you MUST call this method to update the cache. It will
        /// not happen otherwise. (Currently, it is called at the start of
        /// updateBuffer() and from GuiCitation.)
+       /// Note that this operates on the master document.
        void checkBibInfoCache() const;
        /// \return the bibliography information for this buffer's master,
        /// or just for it, if it isn't a child.
        BiblioInfo const & masterBibInfo() const;
-       /// \return the bibliography information for this buffer ONLY.
-       BiblioInfo const & localBibInfo() const;
+       ///
+       void fillWithBibKeys(BiblioInfo & keys) const;
        ///
        void getLabelList(std::vector<docstring> &) const;
 
@@ -581,7 +610,10 @@ private:
        /// of loaded child documents).
        support::FileNameList const & 
                getBibfilesCache(UpdateScope scope = UpdateMaster) const;
+       ///
+       void collectChildren(ListOfBuffers & children, bool grand_children) const;
 
+       
        /// Use the Pimpl idiom to hide the internals.
        class Impl;
        /// The pointer never changes although *pimpl_'s contents may.