1/* 2 * Copyright (C) 2012 Adobe Systems Incorporated. All rights reserved. 3 * 4 * Redistribution and use in source and binary forms, with or without 5 * modification, are permitted provided that the following conditions 6 * are met: 7 * 8 * 1. Redistributions of source code must retain the above 9 * copyright notice, this list of conditions and the following 10 * disclaimer. 11 * 2. Redistributions in binary form must reproduce the above 12 * copyright notice, this list of conditions and the following 13 * disclaimer in the documentation and/or other materials 14 * provided with the distribution. 15 * 16 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER "AS IS" AND ANY 17 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 18 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 19 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE 20 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, 21 * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 22 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 23 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 24 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR 25 * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF 26 * THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 27 * SUCH DAMAGE. 28 */ 29 30#include "config.h" 31 32#if ENABLE(CSS_SHADERS) 33#include "CustomFilterParameterList.h" 34 35#include "CustomFilterParameter.h" 36#include <wtf/text/StringHash.h> 37 38namespace WebCore { 39 40CustomFilterParameterList::CustomFilterParameterList() 41{ 42} 43 44CustomFilterParameterList::CustomFilterParameterList(size_t size) 45 : CustomFilterParameterListBase(size) 46{ 47} 48 49bool CustomFilterParameterList::operator==(const CustomFilterParameterList& other) const 50{ 51 if (size() != other.size()) 52 return false; 53 for (size_t i = 0; i < size(); ++i) { 54 if (at(i).get() != other.at(i).get() 55 && *at(i).get() != *other.at(i).get()) 56 return false; 57 } 58 return true; 59} 60 61bool CustomFilterParameterList::checkAlphabeticalOrder() const 62{ 63 for (unsigned i = 1; i < size(); ++i) { 64 // Break for equal or not-sorted parameters. 65 if (!codePointCompareLessThan(at(i - 1)->name(), at(i)->name())) 66 return false; 67 } 68 return true; 69} 70 71void CustomFilterParameterList::blend(const CustomFilterParameterList& fromList, 72 double progress, const LayoutSize& frameSize, CustomFilterParameterList& resultList) const 73{ 74 // This method expects both lists to be sorted by parameter name and the result list is also sorted. 75 ASSERT(checkAlphabeticalOrder()); 76 ASSERT(fromList.checkAlphabeticalOrder()); 77 size_t fromListIndex = 0, toListIndex = 0; 78 while (fromListIndex < fromList.size() && toListIndex < size()) { 79 CustomFilterParameter* paramFrom = fromList.at(fromListIndex).get(); 80 CustomFilterParameter* paramTo = at(toListIndex).get(); 81 if (paramFrom->name() == paramTo->name()) { 82 resultList.append(paramTo->blend(paramFrom, progress, frameSize)); 83 ++fromListIndex; 84 ++toListIndex; 85 continue; 86 } 87 if (codePointCompareLessThan(paramFrom->name(), paramTo->name())) { 88 resultList.append(paramFrom); 89 ++fromListIndex; 90 continue; 91 } 92 resultList.append(paramTo); 93 ++toListIndex; 94 } 95 for (; fromListIndex < fromList.size(); ++fromListIndex) 96 resultList.append(fromList.at(fromListIndex)); 97 for (; toListIndex < size(); ++toListIndex) 98 resultList.append(at(toListIndex)); 99 ASSERT(resultList.checkAlphabeticalOrder()); 100} 101 102} // namespace WebCore 103 104#endif // ENABLE(CSS_SHADERS) 105