164 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			C++
		
	
	
	
			
		
		
	
	
			164 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			C++
		
	
	
	
| /*****************************************************************************/
 | |
| // Copyright 2006-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_string_list.cpp#1 $ */ 
 | |
| /* $DateTime: 2012/05/30 13:28:51 $ */
 | |
| /* $Change: 832332 $ */
 | |
| /* $Author: tknoll $ */
 | |
| 
 | |
| /*****************************************************************************/
 | |
| 
 | |
| #include "dng_string_list.h"
 | |
| 
 | |
| #include "dng_bottlenecks.h"
 | |
| #include "dng_exceptions.h"
 | |
| #include "dng_string.h"
 | |
| #include "dng_utils.h"
 | |
| 
 | |
| /*****************************************************************************/
 | |
| 
 | |
| dng_string_list::dng_string_list ()
 | |
| 
 | |
| 	:	fCount     (0)
 | |
| 	,	fAllocated (0)
 | |
| 	,	fList      (NULL)
 | |
| 	
 | |
| 	{
 | |
| 	
 | |
| 	}
 | |
| 
 | |
| /*****************************************************************************/
 | |
| 
 | |
| dng_string_list::~dng_string_list ()
 | |
| 	{
 | |
| 	
 | |
| 	Clear ();
 | |
| 	
 | |
| 	}
 | |
| 
 | |
| /*****************************************************************************/
 | |
| 
 | |
| void dng_string_list::Allocate (uint32 minSize)
 | |
| 	{
 | |
| 	
 | |
| 	if (fAllocated < minSize)
 | |
| 		{
 | |
| 		
 | |
| 		uint32 newSize = Max_uint32 (minSize, fAllocated * 2);
 | |
| 		
 | |
| 		dng_string **list = (dng_string **)
 | |
| 							malloc (newSize * sizeof (dng_string *));
 | |
| 		
 | |
| 		if (!list)
 | |
| 			{
 | |
| 			
 | |
| 			ThrowMemoryFull ();
 | |
| 			
 | |
| 			}
 | |
| 		
 | |
| 		if (fCount)
 | |
| 			{
 | |
| 			
 | |
| 			DoCopyBytes (fList, list, fCount * (uint32) sizeof (dng_string *));
 | |
| 			
 | |
| 			}
 | |
| 			
 | |
| 		if (fList)
 | |
| 			{
 | |
| 			
 | |
| 			free (fList);
 | |
| 			
 | |
| 			}
 | |
| 			
 | |
| 		fList = list;
 | |
| 		
 | |
| 		fAllocated = newSize;
 | |
| 		
 | |
| 		}
 | |
| 	
 | |
| 	}
 | |
| 					 
 | |
| /*****************************************************************************/
 | |
| 
 | |
| void dng_string_list::Insert (uint32 index, 
 | |
| 							  const dng_string &s)
 | |
| 	{
 | |
| 	
 | |
| 	Allocate (fCount + 1);
 | |
| 	
 | |
| 	dng_string *ss = new dng_string (s);
 | |
| 	
 | |
| 	if (!ss)
 | |
| 		{
 | |
| 		
 | |
| 		ThrowMemoryFull ();
 | |
| 		
 | |
| 		}
 | |
| 		
 | |
| 	fCount++;
 | |
| 	
 | |
| 	for (uint32 j = fCount - 1; j > index; j--)
 | |
| 		{
 | |
| 		
 | |
| 		fList [j] = fList [j - 1];
 | |
| 		
 | |
| 		}
 | |
| 		
 | |
| 	fList [index] = ss;
 | |
| 	
 | |
| 	}
 | |
| 					 
 | |
| /*****************************************************************************/
 | |
| 
 | |
| bool dng_string_list::Contains (const dng_string &s) const
 | |
| 	{
 | |
| 	
 | |
| 	for (uint32 j = 0; j < fCount; j++)
 | |
| 		{
 | |
| 		
 | |
| 		if ((*this) [j] == s)
 | |
| 			{
 | |
| 			
 | |
| 			return true;
 | |
| 			
 | |
| 			}
 | |
| 			
 | |
| 		}
 | |
| 		
 | |
| 	return false;
 | |
| 	
 | |
| 	}
 | |
| 					 
 | |
| /*****************************************************************************/
 | |
| 
 | |
| void dng_string_list::Clear ()
 | |
| 	{
 | |
| 	
 | |
| 	if (fList)
 | |
| 		{
 | |
| 		
 | |
| 		for (uint32 index = 0; index < fCount; index++)
 | |
| 			{
 | |
| 			
 | |
| 			delete fList [index];
 | |
| 			
 | |
| 			}
 | |
| 			
 | |
| 		free (fList);
 | |
| 		
 | |
| 		fList = NULL;
 | |
| 		
 | |
| 		}
 | |
| 		
 | |
| 	fCount     = 0;
 | |
| 	fAllocated = 0;
 | |
| 	
 | |
| 	}
 | |
| 
 | |
| /*****************************************************************************/
 |