summaryrefslogtreecommitdiff
path: root/gpr/source/lib/dng_sdk/dng_opcode_list.h
diff options
context:
space:
mode:
Diffstat (limited to 'gpr/source/lib/dng_sdk/dng_opcode_list.h')
-rw-r--r--gpr/source/lib/dng_sdk/dng_opcode_list.h165
1 files changed, 165 insertions, 0 deletions
diff --git a/gpr/source/lib/dng_sdk/dng_opcode_list.h b/gpr/source/lib/dng_sdk/dng_opcode_list.h
new file mode 100644
index 0000000..84813fb
--- /dev/null
+++ b/gpr/source/lib/dng_sdk/dng_opcode_list.h
@@ -0,0 +1,165 @@
+/*****************************************************************************/
+// 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_opcodes.h"
+
+#include <vector>
+
+/*****************************************************************************/
+
+/// A list of opcodes.
+
+class dng_opcode_list
+ {
+
+ private:
+
+ 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
+
+/*****************************************************************************/