/*****************************************************************************/
// Copyright 2007 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_tone_curve.cpp#1 $ */ 
/* $DateTime: 2012/05/30 13:28:51 $ */
/* $Change: 832332 $ */
/* $Author: tknoll $ */

/*****************************************************************************/

#include "dng_tone_curve.h"

#include "dng_assertions.h"
#include "dng_spline.h"
#include "dng_utils.h"

/******************************************************************************/

dng_tone_curve::dng_tone_curve ()

	:	fCoord ()

	{
	
	SetNull ();
	
	}

/******************************************************************************/

bool dng_tone_curve::operator== (const dng_tone_curve &curve) const
	{

	return fCoord == curve.fCoord;

	}
		
/******************************************************************************/

void dng_tone_curve::SetNull ()
	{
	
	fCoord.resize (2);
	
	fCoord [0].h = 0.0;
	fCoord [0].v = 0.0;
	
	fCoord [1].h = 1.0;
	fCoord [1].v = 1.0;
	
	}
		
/******************************************************************************/

bool dng_tone_curve::IsNull () const
	{
	
	dng_tone_curve temp;
	
	return (*this == temp);
	
	}
		
/******************************************************************************/

void dng_tone_curve::SetInvalid ()
	{
	
	fCoord.clear ();
	
	}
		
/******************************************************************************/

bool dng_tone_curve::IsValid () const
	{
	
	if (fCoord.size () < 2)
		{
		
		return false;
		
		}
		
	for (uint32 j = 0; j < fCoord.size (); j++)
		{
		
		if (fCoord [j] . h < 0.0 || fCoord [j] . h > 1.0 ||
			fCoord [j] . v < 0.0 || fCoord [j] . v > 1.0)
			{
			
			return false;
			
			}
			
		if (j > 0)
			{
			
			if (fCoord [j] . h <= fCoord [j - 1] . h)
				{
				
				return false;
				
				}
				
			}
			
		}
		
	return true;
		
	}
		
/******************************************************************************/

void dng_tone_curve::Solve (dng_spline_solver &solver) const
	{
	
	solver.Reset ();
	
	for (uint32 index = 0; index < fCoord.size (); index++)
		{
		
		solver.Add (fCoord [index].h,
					fCoord [index].v);
		
		}
		
	solver.Solve ();
	
	}
		
/*****************************************************************************/
