]> git.lyx.org Git - lyx.git/blobdiff - src/lastfiles.C
white-space changes, removed definitions.h several enum changes because of this,...
[lyx.git] / src / lastfiles.C
index d2005145b20e92cecb8b03a822ad4b7d4488266d..7a08ac16d20378657c8580b99aff025b388e96ff 100644 (file)
@@ -1,12 +1,12 @@
 /* This file is part of
- * ======================================================
+ * ====================================================== 
  * 
  *           LyX, The Document Processor
  *      
  *           Copyright 1995 Matthias Ettrich
  *           Copyright 1995-1999 The LyX Team.
  *
- * ======================================================*/
+ * ====================================================== */
 
 #include <config.h>
 
 #pragma implementation
 #endif
 
-#include "lyxlex.h"
+#include <fstream>
+using std::ifstream;
+using std::ofstream;
+
+#include <algorithm>
+using std::find;
+
 #include "support/FileInfo.h"
 #include "lastfiles.h"
-#include "support/filetools.h"
 #include "debug.h"
 
-LastFiles::LastFiles(string const & filename, bool st, char num)
+LastFiles::LastFiles(string const & filename, bool st, unsigned int num)
        : dostat(st)
 {
        setNumberOfFiles(num);
-       files = new string[num_files];
        readFile(filename);
 }
 
 
-LastFiles::~LastFiles()
+void LastFiles::setNumberOfFiles(unsigned int no)
 {
-       delete[] files;
-}
-
-
-void LastFiles::setNumberOfFiles(char no)
-{
-       if (1 <= no && no <= ABSOLUTEMAXLASTFILES)
+       if (0 < no && no <= ABSOLUTEMAXLASTFILES)
                num_files = no;
        else {
                lyxerr << "LyX: lastfiles: too many files\n"
-                       "\tdefault (=" << int(DEFAULTFILES) // int() only because of anon enum
+                       "\tdefault (= " << int(DEFAULTFILES)
                       << ") used." << endl;
                num_files = DEFAULTFILES;
        }
@@ -52,48 +50,30 @@ void LastFiles::setNumberOfFiles(char no)
 void LastFiles::readFile(string const & filename)
 {
        // we will not complain if we can't find filename nor will
-       // we issue a warning. Lgb.
-       LyXLex lex(0, 0); /* LyXLex should be changed
-                             * to allow constructor with
-                             * no parameters. */
-       bool error = false;
-
-       lex.setFile(filename);
-
-       if (!lex.IsOK()) return;
-
+       // we issue a warning. (Lgb)
+       ifstream ifs(filename.c_str());
        string tmp;
        FileInfo fileInfo;
-       int i = 0;
-
-       while (lex.IsOK() && !error && i < num_files) {
-               switch(lex.lex()) {
-               case LyXLex::LEX_FEOF:
-                       error = true;
-                       break;
-               default:
-                       tmp = lex.GetString();
-                       // Check if the file exist
-                       if (dostat) {
-                               if (!(fileInfo.newFile(tmp).exist() &&
-                                     fileInfo.isRegular()))
-                                       break; // the file does not exist
-                       }
-                       files[i] = tmp;
-                       i++;
-                       break;
+
+       while(getline(ifs, tmp) && files.size() < num_files) {
+               if (dostat) {
+                       if (!(fileInfo.newFile(tmp).exist() &&
+                             fileInfo.isRegular()))
+                               continue;
                }
+               files.push_back(tmp);
        }
 }
 
 
 void LastFiles::writeFile(string const & filename) const
 {
-       FilePtr fd(filename, FilePtr::write);
-       if (fd()) {
-               for (int i = 0; i < num_files; i++) {
-                       if (!files[i].empty())
-                               fprintf(fd, "\"%s\"\n", files[i].c_str());
+       ofstream ofs(filename.c_str());
+       if (ofs) {
+               for (Files::const_iterator cit = files.begin();
+                    cit != files.end();
+                    ++cit) {
+                       ofs << (*cit) << '\n';
                }
        } else
                lyxerr << "LyX: Warning: unable to save LastFiles: "
@@ -103,12 +83,19 @@ void LastFiles::writeFile(string const & filename) const
 
 void LastFiles::newFile(string const & file)
 {
-       int n;
-       // Find this file in list. If not in list, point to last entry
-       for(n = 0; n < (num_files - 1); n++)
-               if(files[n] == file) break;
-
-       for(int i = n; i >= 1; i--)
-               files[i] = files[i - 1];
-       files[0] = file;
+       // If file already exist, delete it and reinsert at front.
+       Files::iterator it = find(files.begin(), files.end(), file);
+       if (it != files.end())
+               files.erase(it);
+       files.push_front(file);
+       if (files.size() > num_files)
+               files.pop_back();
+}
+
+
+string LastFiles::operator[](unsigned int i) const
+{
+       if (i < files.size())
+               return files[i];
+       return string();
 }