X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Fbufferlist.h;h=adb65fde2c4498cc3ed6200e4c6712d33316a9c1;hb=34d28f9daae536db06d6cf1a9dcf62dc0f5aa432;hp=ae43d4ec2567c4e6a13274582b23ba30caf735cb;hpb=27de1486ca34aaad446adb798d71a77d6f6304da;p=lyx.git diff --git a/src/bufferlist.h b/src/bufferlist.h index ae43d4ec25..adb65fde2c 100644 --- a/src/bufferlist.h +++ b/src/bufferlist.h @@ -1,24 +1,29 @@ // -*- C++ -*- /* This file is part of -* ====================================================== -* -* LyX, The Document Processor -* Copyright (C) 1995 Matthias Ettrich -* -* This file is Copyleft (C) 1996 -* Lars Gullik Bjønnes -* -*======================================================*/ - -#ifndef _BUFFER_LIST_H_ -#define _BUFFER_LIST_H_ + * ====================================================== + * + * LyX, The Document Processor + * Copyright 1995 Matthias Ettrich + * Copyright 1995-2001 The LyX Team + * + * This file is Copyright 1996-2001 + * Lars Gullik Bjønnes + * + * ====================================================== */ + +#ifndef BUFFER_LIST_H +#define BUFFER_LIST_H #ifdef __GNUG__ #pragma interface #endif -#include "buffer.h" -#include "error.h" +class Buffer; +class UpdatableInset; +#include +#include + +#include "LString.h" /** A class to hold all the buffers in a structure The point of this class is to hide from bufferlist what kind @@ -28,65 +33,49 @@ This class should ideally be enclosed inside class BufferList, but that gave me an "internal gcc error". */ -class BufferStorage { +class BufferStorage : boost::noncopyable { public: /// - BufferStorage(); + typedef std::vector Container; /// - bool isEmpty(); + typedef Container::iterator iterator; /// - void release(Buffer* buf); + typedef Container::const_iterator const_iterator; /// - Buffer* newBuffer(LString 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]; + typedef Container::size_type size_type; /// - friend class BufferStorage_Iter; -}; - -/// An Iterator class for BufferStorage -class BufferStorage_Iter { -public: + bool empty() const { return container.empty(); } /// - BufferStorage_Iter(const BufferStorage & bs) - { cs=&bs; index=0;} - /// next - Buffer* operator() (); + void release(Buffer * buf); /// - Buffer* operator[] (int a); -private: + 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(); } /// - const BufferStorage *cs; + Container::const_iterator end() const { return container.end(); } + /// + Buffer * front() { return container.front(); } + /// + Buffer * operator[](int c) { return container[c]; } + /// + size_type size() const { return container.size(); } +private: /// - unsigned char index; + Container container; }; - -/** 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 : boost::noncopyable { public: /// BufferList(); - /// - ~BufferList(); - /// state info enum list_state { /// @@ -96,79 +85,73 @@ 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(LString const & filename, - bool tolastfiles = true); + */ + Buffer * loadLyXFile(string const & filename, + bool tolastfiles = true); /// - bool isEmpty(); - - /// Saves buffer. Returns false if unsuccesful. - bool write(Buffer *, bool makeBackup = true); + bool empty() const; /// - bool QwriteAll(); + bool qwriteAll(); /// Close all open buffers. void closeAll(); - /// - void resize(); - /// Read a file into a buffer readonly or not. - Buffer* readFile(LString const &, bool ro); + Buffer * readFile(string const &, bool ro); /// Make a new file (buffer) using a template - Buffer* newFile(LString const &, LString); - - /** This one must be moved to some other place. - */ - void makePup(int); - - ///** Later with multiple frames this should not be here. - // */ - //Buffer* switchBuffer(Buffer *from, int); + Buffer * newFile(string const &, string, bool isNamed = false); + /// returns a vector with all the buffers filenames + std::vector const getFileNames() const; /// - void updateInset(Inset*, bool = true); + int unlockInset(UpdatableInset *); /// - int unlockInset(UpdatableInset*); - - /// - void updateIncludedTeXfiles(LString const &); + void updateIncludedTeXfiles(string const &); /// 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(); + Buffer * first(); /// returns true if the buffer exists already - bool exists(LString 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(LString const &); + Buffer * getBuffer(string const &); /// returns a pointer to the buffer with the given number. - Buffer* getBuffer(int); + Buffer * getBuffer(unsigned int); private: + /// ask to save a buffer on quit + bool qwriteOne(Buffer * buf, string const & fname, string & unsaved_list); + /// BufferStorage bstore; /// - list_state _state; + list_state state_; + /// + void emergencyWrite(Buffer * buf); }; #endif