text: /*
   * File:	BootImage.h
   *
   * Copyright (c) Freescale Semiconductor, Inc. All rights reserved.
   * See included license file for license details.
   */
  #if !defined(_BootImage_h_)
  #define _BootImage_h_
  
  #include <iostream>
  #include "Version.h"
  
  namespace elftosb
  {
  /*!
   * \brief Abstract base class for all boot image format classes.
   *
   * Provides virtual methods for all of the common features between different
   * boot image formats. These are the product and component version numbers
   * and the drive tag.
   *
   * Also provided is the virtual method writeToStream() that lets the caller
   * stream out the boot image without knowing the underlying format type.
   */
  class BootImage
  {
  public:
      //! \brief Constructor.
      BootImage() {}
      //! \brief Destructor.
      virtual ~BootImage() {}
      //! \name Versions
      //@{
      virtual void setProductVersion(const version_t &version) = 0;
      virtual void setComponentVersion(const version_t &version) = 0;
      //@}
  
      //! \brief Specify the drive tag to be set in the output file header.
      virtual void setDriveTag(uint16_t tag) = 0;
  
      //! \brief Returns a string containing the preferred file extension for image format.
      virtual std::string getFileExtension() const = 0;
  
      //! \brief Write the boot image to an output stream.
      virtual void writeToStream(std::ostream &stream) = 0;
  };
  
  }; // namespace elftosb
  
  #endif // _BootImage_h_
  