CustomFilterParameterList.cpp [plain text]
#include "config.h"
#if ENABLE(CSS_SHADERS)
#include "CustomFilterParameterList.h"
#include "CustomFilterParameter.h"
#include <wtf/text/StringHash.h>
namespace WebCore {
CustomFilterParameterList::CustomFilterParameterList()
{
}
CustomFilterParameterList::CustomFilterParameterList(size_t size)
: CustomFilterParameterListBase(size)
{
}
bool CustomFilterParameterList::operator==(const CustomFilterParameterList& other) const
{
if (size() != other.size())
return false;
for (size_t i = 0; i < size(); ++i) {
if (at(i).get() != other.at(i).get()
&& *at(i).get() != *other.at(i).get())
return false;
}
return true;
}
bool CustomFilterParameterList::checkAlphabeticalOrder() const
{
for (unsigned i = 1; i < size(); ++i) {
if (!codePointCompareLessThan(at(i - 1)->name(), at(i)->name()))
return false;
}
return true;
}
void CustomFilterParameterList::blend(const CustomFilterParameterList& fromList,
double progress, const LayoutSize& frameSize, CustomFilterParameterList& resultList) const
{
ASSERT(checkAlphabeticalOrder());
ASSERT(fromList.checkAlphabeticalOrder());
size_t fromListIndex = 0, toListIndex = 0;
while (fromListIndex < fromList.size() && toListIndex < size()) {
CustomFilterParameter* paramFrom = fromList.at(fromListIndex).get();
CustomFilterParameter* paramTo = at(toListIndex).get();
if (paramFrom->name() == paramTo->name()) {
resultList.append(paramTo->blend(paramFrom, progress, frameSize));
++fromListIndex;
++toListIndex;
continue;
}
if (codePointCompareLessThan(paramFrom->name(), paramTo->name())) {
resultList.append(paramFrom);
++fromListIndex;
continue;
}
resultList.append(paramTo);
++toListIndex;
}
for (; fromListIndex < fromList.size(); ++fromListIndex)
resultList.append(fromList.at(fromListIndex));
for (; toListIndex < size(); ++toListIndex)
resultList.append(at(toListIndex));
ASSERT(resultList.checkAlphabeticalOrder());
}
}
#endif // ENABLE(CSS_SHADERS)