CMake/Source/cmCableData.cxx

120 lines
2.4 KiB
C++
Raw Normal View History

/*=========================================================================
Program: Insight Segmentation & Registration Toolkit
Module: $RCSfile$
Language: C++
Date: $Date$
Version: $Revision$
Copyright (c) 2000 National Library of Medicine
All rights reserved.
See COPYRIGHT.txt for copyright details.
=========================================================================*/
#include "cmCabilData.h"
#include "cmCacheManager.h"
/**
* Free all data that was stored here.
*/
cmCabilData::~cmCabilData()
{
for(OutputFiles::iterator i = m_OutputFiles.begin();
i != m_OutputFiles.end(); ++i)
{
delete i->second;
}
}
/**
* The constructor attempts to open the file for writing.
*/
cmCabilData::OutputFile
::OutputFile(std::string file, const cmCabilCommand* command):
m_FileStream(file.c_str()),
m_FirstReferencingCommand(command),
m_LastReferencingCommand(command)
{
if(!m_FileStream)
{
cmSystemTools::Error("Error can not open for write: ", file.c_str());
}
}
/**
* Destructor closes the file, if it was open.
*/
cmCabilData::OutputFile
::~OutputFile()
{
if(m_FileStream)
m_FileStream.close();
}
/**
* Get the output stream associated with this OutputFile.
*/
std::ostream&
cmCabilData::OutputFile
::GetStream()
{
return m_FileStream;
}
void
cmCabilData::OutputFile
::SetLastReferencingCommand(const cmCabilCommand* command)
{
m_LastReferencingCommand = command;
}
bool
cmCabilData::OutputFile
::FirstReferencingCommandIs(const cmCabilCommand* command) const
{
return (m_FirstReferencingCommand == command);
}
bool
cmCabilData::OutputFile
::LastReferencingCommandIs(const cmCabilCommand* command) const
{
return (m_LastReferencingCommand == command);
}
/**
* Get the OutputFile for the file with the given name. Automatically
* maintains first and last referencing commands.
*/
cmCabilData::OutputFile*
cmCabilData::GetOutputFile(const std::string& name,
const cmCabilCommand* command)
{
OutputFiles::iterator f = m_OutputFiles.find(name);
// If the file hasn't yet been opened, create an entry for it.
if(f == m_OutputFiles.end())
{
OutputFile* outputFile = new OutputFile(name, command);
m_OutputFiles[name] = outputFile;
return outputFile;
}
// The file has already been opened. Set the command as the last
// referencing command.
f->second->SetLastReferencingCommand(command);
return f->second;
}