167 lines
3.9 KiB
C++
167 lines
3.9 KiB
C++
/*****************************************************************************/
|
|
// 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
|
|
|
|
/*****************************************************************************/
|