1    	// $Id: StStreamFile.cxx,v 1.4 2010/01/07 17:37:59 fine Exp $
2    	//
3    	// $Log: StStreamFile.cxx,v $
4    	// Revision 1.4  2010/01/07 17:37:59  fine
5    	// introduce closeFileSignal to process several DAT files at once. RT # 1794
6    	//
7    	// Revision 1.3  2010/01/06 20:42:26  fine
8    	// Fix type EventNumber shoould be RunNumber . Thanks Akio
9    	//
10   	// Revision 1.2  2009/10/13 15:44:59  fine
11   	// add the method to provide the error message
12   	//
13   	// Revision 1.1  2009/10/12 04:21:06  fine
14   	// Add abstract STAR iostream-base file interface
15   	//
16   	// 
17   	
18   	/***************************************************************************
19   	 * \Author: Valeri Fine (fine@bnl.gov)
20   	   \date 10-Oct-2009
21   	 * Description: Trigger Data file (run*.*.dat) reader
22   	 **************************************************************************/
23   	
24   	#include "StStreamFile.h"
25   	#include <iostream>
26   	
27   	//__________________________________________________________________________
28   	StStreamFile::~StStreamFile() { close();  }
29   	//__________________________________________________________________________
30   	void StStreamFile::open(const char *fileName, ios_base::openmode mode)
31   	{
32   	   if (fFilename==fileName && is_open() ) {
33   	      fStream.clear();   
34   	      fStream.seekg (0, ios::beg);
35   	   } else {
36   	      close();
37   	      fFilename=fileName;
38   	      fStream.clear();   
39   	      fStream.open(fFilename.c_str(),mode); 
40   	   }
41   	   if (Debug()) Perror("StStreamFile::open");
42   	}
43   	
44   	//__________________________________________________________________________
45   	void StStreamFile::close()
46   	{
47   	   if (is_open()) { 
48   	     fStream.clear();
49   	     fStream.close();
50   	     fFilename.erase();
51   	     closeFileSignal();
52   	   }
53   	}
54   	//__________________________________________________________________________
55   	istream &StStreamFile::read(char *s, streamsize n)
56   	{
57   	   fStream.clear();   
58   	   fStream.read(s,n);
59   	   if (Debug()) Perror("StStreamFile::read");
60   	   return fStream;
61   	}
62   	//__________________________________________________________________________
63   	void StStreamFile::Perror(const char *header) const
64   	{
65   	   if (!good()) {
66   	      if (header && header[0]) std::cerr << header << ": ";
67   	      std::cerr << " StStreamFile I/O error: "   
68   	         << " fail=" << fail()
69   	         << "; bad="  << bad()
70   	         << "; eof=" << eof() 
71   	         << " for <" << fFilename <<">  " 
72   	         << " open=" << ((StStreamFile *)this)->is_open() 
73   	         <<  std::endl;
74   	   } else if (Debug()) {
75   	     if (header && header[0]) std::cerr << header << ": ";
76   	     std::cerr << "There was no I/O Error" 
77   	               << " for <" << fFilename <<">  " 
78   	               << std::endl;
79   	   }
80   	}
81