// File.cxx #include "File.h" #include "hesbase/Name.h" #include "hesbase/FileType.h" #include "hesbase/FileId.h" #include "hesbase/EventId.h" #include "hesfile/StreamType.h" #include using hes::File; //********************************************************************** // Member functions. //********************************************************************** // Destructor. File::~File() { } //********************************************************************** // Close the file. int File::close() { return open(CLOSED); } //********************************************************************** // Is the physical file open? bool File::is_open() const { return open_status() != CLOSED; } //********************************************************************** // Free functions. //********************************************************************** // Output stream for open status. ostream& operator<<(ostream& lhs, File::OpenStatus rhs) { switch( rhs ) { case File::CLOSED : lhs << "CLOSED"; break; case File::READONLY: lhs << "READONLY"; break; case File::NEW : lhs << "NEW"; break; case File::APPEND : lhs << "APPEND"; break; } return lhs; } //********************************************************************** // Output stream. ostream& operator<<(ostream& lhs, const File& rhs) { if ( ! rhs.is_valid() ) { lhs << "invalid file"; return lhs; } string line = "-----------------------------------------------------"; lhs << line; lhs << "\n File type: " << rhs.type(); lhs << "\n Physical name: " << rhs.physical_name(); lhs << "\n Logical name: " << rhs.logical_name(); lhs << "\n ID: " << rhs.id(); lhs << "\n Stream type: " << rhs.stream_type().name(); lhs << "\n Open status: " << rhs.open_status(); lhs << "\nFile is "; if ( ! rhs.is_locked() ) lhs << "not "; lhs << "locked"; lhs << "\nFile can"; if ( ! rhs.can_be_read() ) lhs << "not"; lhs << " be read"; lhs << "\nFile can"; if ( ! rhs.can_be_written() ) lhs << "not"; lhs << " be written"; lhs << "\n Event count: " << rhs.event_count(); lhs << "\n Min event: " << rhs.min_event(); lhs << "\n Max event: " << rhs.max_event(); lhs << "\n Current event: "; if ( rhs.event().is_valid() ) lhs << rhs.event(); else lhs << "-- not defined --"; lhs << "\nEvent is "; if ( ! rhs.is_writing() ) lhs << "not "; lhs << "being written"; lhs << "\n" << line; return lhs; } //**********************************************************************