/* [<][>][^][v][top][bottom][index][help] */
DEFINITIONS
This source file includes following definitions.
- image
 - options
 - id
 
// This may look like C code, but it is really -*- C++ -*-
//
// Copyright Bob Friesenhahn, 1999, 2000, 2001, 2002
//
// Definition of an Image reference
//
// This is a private implementation class which should never be
// referenced by any user code.
//
#if !defined(Magick_ImageRef_header)
#define Magick_ImageRef_header
#include "Magick++/Include.h"
#include "Magick++/Thread.h"
namespace Magick
{
  class Options;
  //
  // Reference counted access to Image *
  //
  class MagickPPExport ImageRef {
    friend class Image; 
  private:
    // Construct with an image pointer and default options
    ImageRef ( MagickCore::Image * image_ );
    // Construct with an image pointer and options
    ImageRef ( MagickCore::Image * image_, const Options * options_ );
    // Construct with null image and default options
    ImageRef ( void );
    // Destroy image and options
    ~ImageRef ( void );
    // Copy constructor and assignment are not supported
    ImageRef(const ImageRef&);
    ImageRef& operator=(const ImageRef&);
    
    void                 image ( MagickCore::Image * image_ );
    MagickCore::Image *&  image ( void );
    
    void                 options ( Options * options_ );
    Options *            options ( void );
    void                 id ( const ::ssize_t id_ );
    ::ssize_t            id ( void ) const;
    
    MagickCore::Image *  _image;    // ImageMagick Image
    Options *            _options;  // User-specified options
    ::ssize_t            _id;       // Registry ID (-1 if not registered)
    ::ssize_t            _refCount; // Reference count
    MutexLock            _mutexLock;// Mutex lock
  };
} // end of namespace Magick
//
// Inlines
//
// Retrieve image from reference
inline MagickCore::Image *& Magick::ImageRef::image ( void )
{
  return _image;
}
// Retrieve Options from reference
inline Magick::Options * Magick::ImageRef::options ( void )
{
  return _options;
}
// Retrieve registration id from reference
inline ::ssize_t Magick::ImageRef::id ( void ) const
{
  return _id;
}
#endif // Magick_ImageRef_header