/* ** This program is free software; you can redistribute it and/or modify ** it under the terms of the GNU General Public License as published by ** the Free Software Foundation; either version 1, or (at your option) ** any later version. ** This program is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** You should have received a copy of the GNU General Public License ** along with this program; if not, write to the Free Software ** Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ /* * Author : Alexandre Parenteau --- December 1997 */ /* * MultiFiles.h --- class to store multiple files by directory */ #ifndef MULTIFILES_H #define MULTIFILES_H #include "TextBinary.h" #include "CPStr.h" #include #ifdef _MSC_VER using namespace std; #endif class CvsArgs; // used internally class FileEntry { public: FileEntry() {} FileEntry(const char *filename, const UFSSpec *macspec = 0L, const char *currRevision = 0L) { file = filename; if( currRevision != 0L ) currRev = currRevision; if( macspec != 0L ) spec = *macspec; } FileEntry(const FileEntry & entry) { *this = entry; } FileEntry & operator=(const FileEntry & entry) { file = entry.file; currRev = entry.currRev; spec = entry.spec; return *this; } CStr file; CStr currRev; UFSSpec spec; }; // used internally class MultiFilesEntry { public: MultiFilesEntry() {} MultiFilesEntry(const char *path) { dir = path; } MultiFilesEntry(const MultiFilesEntry & entries) { *this = entries; } MultiFilesEntry & operator=(const MultiFilesEntry & entries) { dir = entries.dir; files = entries.files; return *this; } void setdir(const char *newdir); void add(const char *file, const UFSSpec *spec = 0L, const char *currRevision = 0L); CStr dir; std::vector files; }; class MultiFiles { public: MultiFiles() : pos(-1) {} void newdir(const char *dir); // add a new directory void newfile(const char *file, const UFSSpec *spec = 0L, const char *currRevision = 0L); // add a new file to the current directory inline void rewind(void) {pos = -1;} // rewind to first directory bool next(void); // return false if no more directories char *add (CvsArgs & args); // add the files to a CvsArgs, return the directory bool get (int index, CStr & path, CStr & fileName, CStr &currRev); // return the file in the current directory (false if failed) int NumFiles(void) const; // number of files in the current dir void reset(); // reset for reuse. protected: int pos; std::vector dirs; }; #endif /* MULTIFILES_H */