SplitFileReader.cpp

Go to the documentation of this file.
00001 /*
00002  * Copyright (c) 2004 CSIRO ICT Centre
00003  *
00004  * $Id: SplitFileReader.cpp 587 2004-12-03 15:06:33Z nch $
00005  */
00006 
00007 #include <stdio.h>
00008 #include "String.h"
00009 #include <vector>
00010 
00011 #include "FileObjectReader.h"
00012 #include "FileReader.h"
00013 #include "SplitFileReader.h"
00014 
00015 
00016 SplitFileReader::SplitFileReader(FileObjectReader * obj,
00017                                  std::vector<String> const & fileNames,
00018                                  bool areLargeFiles)
00019     : FileReader(obj, areLargeFiles),
00020       m_fileNames(fileNames),
00021       m_fileNum(0),
00022       m_finished(false)
00023 {
00024 }
00025 
00026 SplitFileReader::~SplitFileReader()
00027 {
00028   m_fileNames.clear();
00029 }
00030 
00031 void SplitFileReader::open()
00032 {
00033   if (m_fileNum < m_fileNames.size())
00034   {
00035     fileName = m_fileNames[m_fileNum++].c_str();
00036     FileReader::open();
00037   }
00038   else
00039   {
00040     m_finished = true;
00041   }
00042 }
00043 
00044 void SplitFileReader::reopen()
00045 {
00046   m_fileNum = 0;
00047   m_finished = false;
00048   close();
00049   open();
00050 }
00051 
00052 Object * SplitFileReader::read()
00053 {
00054   Object * next = 0;
00055 
00056   if (!m_finished)
00057   {
00058     next = FileReader::read();
00059     if (next == 0)
00060     {
00061       // try to read from the next file
00062       close();
00063       open();
00064       if (!m_finished)
00065       {
00066         next = read();
00067       }
00068     }
00069   }
00070 
00071   return next;
00072 }
Generated on Mon Oct 4 10:39:55 2010 for Matching.kdevelop by  doxygen 1.6.3