]> git.lyx.org Git - lyx.git/blobdiff - src/bufferlist.h
Fixed various "missing features" in the tabular/textinset code.
[lyx.git] / src / bufferlist.h
index e2c0109f32a998b45e19ecdbaae0ce742da319d1..0b4efadfae45bc043d75968d3b4b03c2dbdfc1bb 100644 (file)
@@ -4,9 +4,9 @@
  * 
  *           LyX, The Document Processor        
  *           Copyright 1995 Matthias Ettrich
- *           Copyright 1995-1999 The LyX Team
+ *           Copyright 1995-2000 The LyX Team
  *
- *           This file is Copyright 1996
+ *           This file is Copyright 1996-2000
  *           Lars Gullik Bjønnes
  *
  * ====================================================== */
@@ -20,8 +20,7 @@
 
 #include "buffer.h"
 #include "debug.h"
-
-#define NEW_STORE 1
+#include <boost/utility.hpp>
 
 /** A class to hold all the buffers in a structure
   The point of this class is to hide from bufferlist what kind
   This class should ideally be enclosed inside class BufferList, but that
   gave me an "internal gcc error".
   */
-class BufferStorage {
-#ifdef NEW_STORE
+class BufferStorage : public noncopyable {
 public:
        ///
-       typedef vector<Buffer *> Container;
+       typedef std::vector<Buffer *> Container;
        ///
        typedef Container::iterator iterator;
        ///
+       typedef Container::const_iterator const_iterator;
+       ///
+       typedef Container::size_type size_type;
+       ///
        bool empty() const { return container.empty(); }
        ///
        void release(Buffer * buf);
        ///
-       Buffer * newBuffer(string const & s, LyXRC *, bool = false);
+       Buffer * newBuffer(string const & s, bool = false);
        ///
        Container::iterator begin() { return container.begin(); }
        ///
        Container::iterator end() { return container.end(); }
        ///
+       Container::const_iterator begin() const { return container.begin(); }
+       ///
+       Container::const_iterator end() const { return container.end(); }
+       ///
        Buffer * front() { return container.front(); }
        ///
        Buffer * operator[](int c) { return container[c]; }
        ///
-       int size() const { return container.size(); }
+       size_type size() const { return container.size(); }
 private:
        ///
        Container container;
-#else
-public:
-       ///
-       BufferStorage();
-       ///
-       bool empty();
-       ///
-       void release(Buffer * buf);
-       ///
-       Buffer* newBuffer(string const & s, LyXRC *, bool = false);
-private:
-       enum {
-               /** The max number of buffers there are possible to have
-                   loaded at the same time. (this only applies when we use an
-                   array)
-               */
-               NUMBER_OF_BUFFERS = 50
-       };
-       
-       /** The Bufferlist is currently implemented as a static array.
-         The buffers are new'ed and deleted as reqested.
-         */
-       Buffer *buffer[NUMBER_OF_BUFFERS];
-       ///
-       friend class BufferStorage_Iter;
-#endif
 };
 
 
-#ifndef NEW_STORE
-/// An Iterator class for BufferStorage
-class BufferStorage_Iter {
-public:
-       ///
-       BufferStorage_Iter(BufferStorage const & bs)
-       { cs = & bs; index = 0;}
-       /// next
-       Buffer* operator() ();
-       ///
-       Buffer* operator[] (int a);
-private:
-       ///
-       const BufferStorage *cs;
-       ///
-       unsigned char index;
-};
-#endif
-
-
-/** The class governing all the open buffers
-  This class governs all the currently open buffers. Currently all the buffer
-  are located in a static array, soon this will change and we will have a
-  linked list instead.
+/** The class govern all open buffers.
  */
-class BufferList {
+class BufferList : public noncopyable {
 public:
        ///
        BufferList();
@@ -125,21 +82,18 @@ public:
        };
 
        /// returns the state of the bufferlist
-       list_state getState() { return _state; }
+       list_state getState() const { return state_; }
        
        /** loads a LyX file or...
-         If the optional argument tolastfiles is false (default is
+           If the optional argument tolastfiles is false (default is
             true), the file name will not be added to the last opened
            files list
-           */  
+       */  
        Buffer * loadLyXFile(string const & filename, 
                             bool tolastfiles = true);
        
        ///
-       bool empty();
-
-       /// Saves buffer. Returns false if unsuccesful.
-       bool write(Buffer *, bool makeBackup = true);
+       bool empty() const;
 
        ///
         bool QwriteAll();
@@ -154,14 +108,9 @@ public:
        Buffer * readFile(string const &, bool ro);
 
        /// Make a new file (buffer) using a template
-       Buffer * newFile(string const &, string);
-
-       /** This one must be moved to some other place.
-        */
-       void makePup(int);
-
-       ///
-       void updateInset(Inset *, bool = true);
+       Buffer * newFile(string const &, string, bool isNamed=false);
+       /// returns a vector with all the buffers filenames
+       std::vector<string> const getFileNames() const;
 
        ///
        int unlockInset(UpdatableInset *);
@@ -171,29 +120,35 @@ public:
 
        ///
        void emergencyWriteAll();
-
-       /** closes buffer
-         Returns false if operation was canceled
+       
+       /** Close buffer.
+           @param buf the buffer that should be closed
+           @return #false# if operation was canceled
          */
-       bool close(Buffer *);
+       bool close(Buffer * buf);
 
        ///
        Buffer * first();
        
        /// returns true if the buffer exists already
-       bool exists(string const &);
+       bool exists(string const &) const;
 
+       /// returns true if the buffer is loaded
+       bool isLoaded(Buffer const * b) const;
+       
        /// returns a pointer to the buffer with the given name.
        Buffer * getBuffer(string const &);
        /// returns a pointer to the buffer with the given number.
-       Buffer * getBuffer(int);
+       Buffer * getBuffer(unsigned int);
 
 private:
        ///
        BufferStorage bstore;
        
        ///
-       list_state _state;
+       list_state state_;
+       ///
+       void emergencyWrite(Buffer * buf);
 };
 
 #endif