125 lines
2.9 KiB
C++
125 lines
2.9 KiB
C++
/*
|
|
Copyright (C) 2005-2006 Feeling Software Inc.
|
|
MIT License: http://www.opensource.org/licenses/mit-license.php
|
|
*/
|
|
|
|
#include "StdAfx.h"
|
|
#include "FCDocument/FCDEffectParameter.h"
|
|
#include "FCDocument/FCDEffectParameterFactory.h"
|
|
#include "FCDocument/FCDEffectParameterList.h"
|
|
|
|
FCDEffectParameterList::FCDEffectParameterList(FCDocument* document, bool _ownParameters)
|
|
: FCDObject(document, "FCDEffectParameterList")
|
|
{
|
|
ownParameters = _ownParameters;
|
|
}
|
|
|
|
FCDEffectParameterList::~FCDEffectParameterList()
|
|
{
|
|
if (ownParameters)
|
|
{
|
|
size_t l = size();
|
|
for (size_t i = 0; i < l; ++i)
|
|
{
|
|
FCDEffectParameter* p = at(i);
|
|
SAFE_DELETE(p);
|
|
}
|
|
}
|
|
clear();
|
|
ownParameters = false;
|
|
}
|
|
|
|
FCDEffectParameter* FCDEffectParameterList::AddParameter(uint32 type)
|
|
{
|
|
FCDEffectParameter* parameter = NULL;
|
|
if (ownParameters)
|
|
{
|
|
parameter = FCDEffectParameterFactory::Create(GetDocument(), type);
|
|
push_back(parameter);
|
|
}
|
|
return parameter;
|
|
}
|
|
|
|
void FCDEffectParameterList::ReleaseParameter(FCDEffectParameter* parameter)
|
|
{
|
|
iterator it = std::find(begin(), end(), parameter);
|
|
if (it != end())
|
|
{
|
|
if (ownParameters) delete *it;
|
|
erase(it);
|
|
}
|
|
}
|
|
|
|
FCDEffectParameter* FCDEffectParameterList::FindReference(const char* reference)
|
|
{
|
|
for (iterator it = begin(); it != end(); ++it)
|
|
{
|
|
if ((*it)->GetReference() == reference) return (*it);
|
|
}
|
|
return NULL;
|
|
}
|
|
const FCDEffectParameter* FCDEffectParameterList::FindReference(const char* reference) const
|
|
{
|
|
for (const_iterator it = begin(); it != end(); ++it)
|
|
{
|
|
if ((*it)->GetReference() == reference) return (*it);
|
|
}
|
|
return NULL;
|
|
}
|
|
|
|
FCDEffectParameter* FCDEffectParameterList::FindSemantic(const char* semantic)
|
|
{
|
|
for (iterator it = begin(); it != end(); ++it)
|
|
{
|
|
if ((*it)->GetSemantic() == semantic) return (*it);
|
|
}
|
|
return NULL;
|
|
}
|
|
const FCDEffectParameter* FCDEffectParameterList::FindSemantic(const char* semantic) const
|
|
{
|
|
for (const_iterator it = begin(); it != end(); ++it)
|
|
{
|
|
if ((*it)->GetSemantic() == semantic) return (*it);
|
|
}
|
|
return NULL;
|
|
}
|
|
|
|
void FCDEffectParameterList::FindReference(const char* reference, FCDEffectParameterList& list)
|
|
{
|
|
for (iterator it = begin(); it != end(); ++it)
|
|
{
|
|
if ((*it)->GetReference() == reference) list.push_back(*it);
|
|
}
|
|
}
|
|
|
|
void FCDEffectParameterList::FindSemantic(const char* semantic, FCDEffectParameterList& list)
|
|
{
|
|
for (iterator it = begin(); it != end(); ++it)
|
|
{
|
|
if ((*it)->GetSemantic() == semantic) list.push_back(*it);
|
|
}
|
|
}
|
|
|
|
// Copy this list
|
|
FCDEffectParameterList* FCDEffectParameterList::Clone() const
|
|
{
|
|
FCDEffectParameterList* clone = new FCDEffectParameterList(GetDocument(), ownParameters);
|
|
if (!empty())
|
|
{
|
|
clone->reserve(size());
|
|
|
|
if (ownParameters)
|
|
{
|
|
for (const_iterator it = begin(); it != end(); ++it)
|
|
{
|
|
clone->push_back((*it)->Clone());
|
|
}
|
|
}
|
|
else
|
|
{
|
|
(*clone) = (*this);
|
|
}
|
|
}
|
|
return clone;
|
|
}
|