diff options
Diffstat (limited to 'source/dng_1d_function.h')
-rw-r--r-- | source/dng_1d_function.h | 318 |
1 files changed, 159 insertions, 159 deletions
diff --git a/source/dng_1d_function.h b/source/dng_1d_function.h index aee59ca..a3c38db 100644 --- a/source/dng_1d_function.h +++ b/source/dng_1d_function.h @@ -1,159 +1,159 @@ -/*****************************************************************************/
-// Copyright 2006 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_1d_function.h#1 $ */
-/* $DateTime: 2012/05/30 13:28:51 $ */
-/* $Change: 832332 $ */
-/* $Author: tknoll $ */
-
-/** \file
- * Classes for a 1D floating-point to floating-point function abstraction.
- */
-
-/*****************************************************************************/
-
-#ifndef __dng_1d_function__
-#define __dng_1d_function__
-
-/*****************************************************************************/
-
-#include "dng_classes.h"
-#include "dng_types.h"
-
-/*****************************************************************************/
-
-/// \brief A 1D floating-point function.
-///
-/// The domain (input) is always from 0.0 to 1.0, while the range (output) can be an arbitrary interval.
-
-class dng_1d_function
- {
-
- public:
-
- virtual ~dng_1d_function ();
-
- /// Returns true if this function is the map x -> y such that x == y for all x . That is if Evaluate(x) == x for all x.
-
- virtual bool IsIdentity () const;
-
- /// Return the mapping for value x.
- /// This method must be implemented by a derived class of dng_1d_function and the derived class determines the
- /// lookup method and function used.
- /// \param x A value between 0.0 and 1.0 (inclusive).
- /// \retval Mapped value for x
-
- virtual real64 Evaluate (real64 x) const = 0;
-
- /// Return the reverse mapped value for y.
- /// This method can be implemented by derived classes. The default implementation uses Newton's method to solve
- /// for x such that Evaluate(x) == y.
- /// \param y A value to reverse map. Should be within the range of the function implemented by this dng_1d_function .
- /// \retval A value x such that Evaluate(x) == y (to very close approximation).
-
- virtual real64 EvaluateInverse (real64 y) const;
-
- };
-
-/*****************************************************************************/
-
-/// An identity (x -> y such that x == y for all x) mapping function.
-
-class dng_1d_identity: public dng_1d_function
- {
-
- public:
- /// Always returns true for this class.
-
- virtual bool IsIdentity () const;
-
- /// Always returns x for this class.
-
- virtual real64 Evaluate (real64 x) const;
-
- /// Always returns y for this class.
-
- virtual real64 EvaluateInverse (real64 y) const;
-
- /// This class is a singleton, and is entirely threadsafe. Use this method to get an instance of the class.
-
- static const dng_1d_function & Get ();
-
- };
-
-/*****************************************************************************/
-
-/// A dng_1d_function that represents the composition (curry) of two other dng_1d_functions.
-
-class dng_1d_concatenate: public dng_1d_function
- {
-
- protected:
-
- const dng_1d_function &fFunction1;
-
- const dng_1d_function &fFunction2;
-
- public:
-
- /// Create a dng_1d_function which computes y = function2.Evaluate(function1.Evaluate(x)).
- /// Compose function1 and function2 to compute y = function2.Evaluate(function1.Evaluate(x)). The range of function1.Evaluate must be a subset of 0.0 to 1.0 inclusive,
- /// otherwise the result of function1(x) will be pinned (clipped) to 0.0 if <0.0 and to 1.0 if > 1.0 .
- /// \param function1 Inner function of composition.
- /// \param function2 Outer function of composition.
-
- dng_1d_concatenate (const dng_1d_function &function1,
- const dng_1d_function &function2);
-
- /// Only true if both function1 and function2 have IsIdentity equal to true.
-
- virtual bool IsIdentity () const;
-
- /// Return the composed mapping for value x.
- /// \param x A value between 0.0 and 1.0 (inclusive).
- /// \retval function2.Evaluate(function1.Evaluate(x)).
-
- virtual real64 Evaluate (real64 x) const;
-
- /// Return the reverse mapped value for y.
- /// Be careful using this method with compositions where the inner function does not have a range 0.0 to 1.0 . (Or better yet, do not use such functions.)
- /// \param y A value to reverse map. Should be within the range of function2.Evaluate.
- /// \retval A value x such that function2.Evaluate(function1.Evaluate(x)) == y (to very close approximation).
-
- virtual real64 EvaluateInverse (real64 y) const;
-
- };
-
-/*****************************************************************************/
-
-/// A dng_1d_function that represents the inverse of another dng_1d_function.
-
-class dng_1d_inverse: public dng_1d_function
- {
-
- protected:
-
- const dng_1d_function &fFunction;
-
- public:
-
- dng_1d_inverse (const dng_1d_function &f);
-
- virtual bool IsIdentity () const;
-
- virtual real64 Evaluate (real64 x) const;
-
- virtual real64 EvaluateInverse (real64 y) const;
-
- };
-
-/*****************************************************************************/
-
-#endif
-
-/*****************************************************************************/
+/*****************************************************************************/ +// Copyright 2006 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_1d_function.h#1 $ */ +/* $DateTime: 2012/05/30 13:28:51 $ */ +/* $Change: 832332 $ */ +/* $Author: tknoll $ */ + +/** \file + * Classes for a 1D floating-point to floating-point function abstraction. + */ + +/*****************************************************************************/ + +#ifndef __dng_1d_function__ +#define __dng_1d_function__ + +/*****************************************************************************/ + +#include "dng_classes.h" +#include "dng_types.h" + +/*****************************************************************************/ + +/// \brief A 1D floating-point function. +/// +/// The domain (input) is always from 0.0 to 1.0, while the range (output) can be an arbitrary interval. + +class dng_1d_function + { + + public: + + virtual ~dng_1d_function (); + + /// Returns true if this function is the map x -> y such that x == y for all x . That is if Evaluate(x) == x for all x. + + virtual bool IsIdentity () const; + + /// Return the mapping for value x. + /// This method must be implemented by a derived class of dng_1d_function and the derived class determines the + /// lookup method and function used. + /// \param x A value between 0.0 and 1.0 (inclusive). + /// \retval Mapped value for x + + virtual real64 Evaluate (real64 x) const = 0; + + /// Return the reverse mapped value for y. + /// This method can be implemented by derived classes. The default implementation uses Newton's method to solve + /// for x such that Evaluate(x) == y. + /// \param y A value to reverse map. Should be within the range of the function implemented by this dng_1d_function . + /// \retval A value x such that Evaluate(x) == y (to very close approximation). + + virtual real64 EvaluateInverse (real64 y) const; + + }; + +/*****************************************************************************/ + +/// An identity (x -> y such that x == y for all x) mapping function. + +class dng_1d_identity: public dng_1d_function + { + + public: + /// Always returns true for this class. + + virtual bool IsIdentity () const; + + /// Always returns x for this class. + + virtual real64 Evaluate (real64 x) const; + + /// Always returns y for this class. + + virtual real64 EvaluateInverse (real64 y) const; + + /// This class is a singleton, and is entirely threadsafe. Use this method to get an instance of the class. + + static const dng_1d_function & Get (); + + }; + +/*****************************************************************************/ + +/// A dng_1d_function that represents the composition (curry) of two other dng_1d_functions. + +class dng_1d_concatenate: public dng_1d_function + { + + protected: + + const dng_1d_function &fFunction1; + + const dng_1d_function &fFunction2; + + public: + + /// Create a dng_1d_function which computes y = function2.Evaluate(function1.Evaluate(x)). + /// Compose function1 and function2 to compute y = function2.Evaluate(function1.Evaluate(x)). The range of function1.Evaluate must be a subset of 0.0 to 1.0 inclusive, + /// otherwise the result of function1(x) will be pinned (clipped) to 0.0 if <0.0 and to 1.0 if > 1.0 . + /// \param function1 Inner function of composition. + /// \param function2 Outer function of composition. + + dng_1d_concatenate (const dng_1d_function &function1, + const dng_1d_function &function2); + + /// Only true if both function1 and function2 have IsIdentity equal to true. + + virtual bool IsIdentity () const; + + /// Return the composed mapping for value x. + /// \param x A value between 0.0 and 1.0 (inclusive). + /// \retval function2.Evaluate(function1.Evaluate(x)). + + virtual real64 Evaluate (real64 x) const; + + /// Return the reverse mapped value for y. + /// Be careful using this method with compositions where the inner function does not have a range 0.0 to 1.0 . (Or better yet, do not use such functions.) + /// \param y A value to reverse map. Should be within the range of function2.Evaluate. + /// \retval A value x such that function2.Evaluate(function1.Evaluate(x)) == y (to very close approximation). + + virtual real64 EvaluateInverse (real64 y) const; + + }; + +/*****************************************************************************/ + +/// A dng_1d_function that represents the inverse of another dng_1d_function. + +class dng_1d_inverse: public dng_1d_function + { + + protected: + + const dng_1d_function &fFunction; + + public: + + dng_1d_inverse (const dng_1d_function &f); + + virtual bool IsIdentity () const; + + virtual real64 Evaluate (real64 x) const; + + virtual real64 EvaluateInverse (real64 y) const; + + }; + +/*****************************************************************************/ + +#endif + +/*****************************************************************************/ |