| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142 | 
							- /*=========================================================================
 
-   Program:   Insight Segmentation & Registration Toolkit
 
-   Module:    $RCSfile$
 
-   Language:  C++
 
-   Date:      $Date$
 
-   Version:   $Revision$
 
- Copyright (c) 2001 Insight Consortium
 
- All rights reserved.
 
- Redistribution and use in source and binary forms, with or without
 
- modification, are permitted provided that the following conditions are met:
 
-  * Redistributions of source code must retain the above copyright notice,
 
-    this list of conditions and the following disclaimer.
 
-  * Redistributions in binary form must reproduce the above copyright notice,
 
-    this list of conditions and the following disclaimer in the documentation
 
-    and/or other materials provided with the distribution.
 
-  * The name of the Insight Consortium, nor the names of any consortium members,
 
-    nor of any contributors, may be used to endorse or promote products derived
 
-    from this software without specific prior written permission.
 
-   * Modified source versions must be plainly marked as such, and must not be
 
-     misrepresented as being the original software.
 
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER AND CONTRIBUTORS ``AS IS''
 
- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 
- ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR
 
- ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 
- DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 
- SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
 
- CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
 
- OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 
- OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
- =========================================================================*/
 
- #ifndef cmGeneratedFileStream_h
 
- #define cmGeneratedFileStream_h
 
- #include "cmStandardIncludes.h"
 
- /** \class cmGeneratedFileStream
 
-  * \brief Output stream for generated files that does copy-if-different.
 
-  *
 
-  * Many files generated by CMake don't change each time they are generated.
 
-  * This class can be used in place of std::ofstream to open a file and
 
-  * write output to it.  The class will automatically write output to a
 
-  * temporary file and copy it over an existing file only if the generated
 
-  * file has changed.
 
-  */
 
- class cmGeneratedFileStream
 
- {
 
- public:
 
-   /**
 
-    * The constructor takes the name of the file to be generated.  It
 
-    * automatically generates a name for the temporary file.
 
-    */
 
-   cmGeneratedFileStream(const char* name):
 
-     m_Name(name),
 
-     m_TempName(m_Name+".tmp"),
 
-     m_Stream(m_TempName.c_str()),
 
-     m_Copied(false)
 
-     {}
 
-   
 
-   /**
 
-    * The destructor ensures that the file has been closed and copied if
 
-    * it has changed.
 
-    */
 
-   ~cmGeneratedFileStream() { this->DoCopy(); }
 
-   
 
-   /**
 
-    * Get the real output stream.
 
-    */
 
-   std::ostream& GetStream() { return m_Stream; }
 
-   
 
-   /**
 
-    * Allow a test for whether the file is open.
 
-    */
 
-   operator bool() { return m_Stream.is_open(); }
 
-   
 
-   /**
 
-    * Close the file stream.  This will cause the copy-if-different to the
 
-    * real file name to occur.
 
-    */
 
-   void close() { this->DoCopy(); }
 
-   
 
- private:
 
-   /**
 
-    * The name of the real file where output will be copied if it has changed.
 
-    */
 
-   std::string m_Name;
 
-   
 
-   /**
 
-    * The name of the temporary file.
 
-    */
 
-   std::string m_TempName;
 
-   
 
-   /**
 
-    * The real output stream used to write to the file.
 
-    */
 
-   std::ofstream m_Stream;
 
-   
 
-   /**
 
-    * Whether the temporary file has already been copied to the real file.
 
-    */
 
-   bool m_Copied;
 
-   /**
 
-    * Closes the temporary file and does the copy-if-different to the real file.
 
-    */
 
-   void DoCopy()
 
-     {
 
-     if(!m_Copied)
 
-       {
 
-       m_Stream.close();
 
-       cmSystemTools::CopyFileIfDifferent(m_TempName.c_str(), m_Name.c_str());
 
-       cmSystemTools::RemoveFile(m_TempName.c_str());
 
-       m_Copied = true;
 
-       }
 
-     }
 
- };
 
- /**
 
-  * Allow a cmGeneratedFileStream to be used just as a real std::ostream
 
-  * would be.
 
-  */
 
- template <class T>
 
- std::ostream& operator << (cmGeneratedFileStream& l, const T& r)
 
- {
 
-   std::ostream& os = l.GetStream();
 
-   os << r;
 
-   return os;
 
- }
 
- #endif
 
 
  |