/*****************************************************************************/ // Copyright 2008-2009 Adobe Systems Incorporated // All Rights Reserved. // // NOTICE: Adobe permits you to use, modify, and distribute this file in // accordance with the terms of the Adobe license agreement accompanying it. /*****************************************************************************/ /* $Id: //mondo/dng_sdk_1_4/dng_sdk/source/dng_opcode_list.h#2 $ */ /* $DateTime: 2012/07/31 22:04:34 $ */ /* $Change: 840853 $ */ /* $Author: tknoll $ */ /** \file * List of opcodes. */ /*****************************************************************************/ #ifndef __dng_opcode_list__ #define __dng_opcode_list__ /*****************************************************************************/ #include "dng_auto_ptr.h" #include "dng_classes.h" #include "dng_memory.h" #include "dng_opcodes.h" #include <vector> /*****************************************************************************/ /// A list of opcodes. class dng_opcode_list { private: dng_std_vector<dng_opcode *> fList; bool fAlwaysApply; uint32 fStage; public: /// Create an empty opcode list for the specific image stage (1, 2, or 3). dng_opcode_list (uint32 stage); ~dng_opcode_list (); /// Is the opcode list empty? bool IsEmpty () const { return fList.size () == 0; } /// Does the list contain at least 1 opcode? bool NotEmpty () const { return !IsEmpty (); } /// Should the opcode list always be applied to the image? bool AlwaysApply () const { return fAlwaysApply && NotEmpty (); } /// Set internal flag to indicate this opcode list should always be /// applied. void SetAlwaysApply () { fAlwaysApply = true; } /// The number of opcodes in this list. uint32 Count () const { return (uint32) fList.size (); } /// Retrieve read/write opcode by index (must be in the range 0 to Count /// () - 1). dng_opcode & Entry (uint32 index) { return *fList [index]; } /// Retrieve read-only opcode by index (must be in the range 0 to Count /// () - 1). const dng_opcode & Entry (uint32 index) const { return *fList [index]; } /// Remove all opcodes from the list. void Clear (); /// Swap two opcode lists. void Swap (dng_opcode_list &otherList); /// Return minimum DNG version required to support all opcodes in this /// list. If includeOptional is set to true, then this calculation will /// include optional opcodes. uint32 MinVersion (bool includeOptional) const; /// Apply this opcode list to the specified image with corresponding /// negative. void Apply (dng_host &host, dng_negative &negative, AutoPtr<dng_image> &image); /// Append the specified opcode to this list. void Append (AutoPtr<dng_opcode> &opcode); /// Serialize this opcode list to a block of memory. The caller is /// responsible for deleting this block. dng_memory_block * Spool (dng_host &host) const; /// Write a fingerprint of this opcode list to the specified stream. void FingerprintToStream (dng_stream &stream) const; /// Read an opcode list from the specified stream, starting at the /// specified offset (streamOffset, in bytes). byteCount is provided for /// error checking purposes. A bad format exception /// will be thrown if the length of the opcode stream does not exactly /// match byteCount. void Parse (dng_host &host, dng_stream &stream, uint32 byteCount, uint64 streamOffset); private: // Hidden copy constructor and assignment operator. dng_opcode_list (const dng_opcode_list &list); dng_opcode_list & operator= (const dng_opcode_list &list); }; /*****************************************************************************/ #endif /*****************************************************************************/