1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/layout/style/CSSVariableValues.cpp Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,147 @@ 1.4 +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ 1.5 +/* This Source Code Form is subject to the terms of the Mozilla Public 1.6 + * License, v. 2.0. If a copy of the MPL was not distributed with this 1.7 + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ 1.8 + 1.9 +/* computed CSS Variable values */ 1.10 + 1.11 +#include "CSSVariableValues.h" 1.12 + 1.13 +#include "CSSVariableResolver.h" 1.14 + 1.15 +namespace mozilla { 1.16 + 1.17 +CSSVariableValues::CSSVariableValues() 1.18 +{ 1.19 + MOZ_COUNT_CTOR(CSSVariableValues); 1.20 +} 1.21 + 1.22 +CSSVariableValues::CSSVariableValues(const CSSVariableValues& aOther) 1.23 +{ 1.24 + MOZ_COUNT_CTOR(CSSVariableValues); 1.25 + CopyVariablesFrom(aOther); 1.26 +} 1.27 + 1.28 +#ifdef DEBUG 1.29 +CSSVariableValues::~CSSVariableValues() 1.30 +{ 1.31 + MOZ_COUNT_DTOR(CSSVariableValues); 1.32 +} 1.33 +#endif 1.34 + 1.35 +CSSVariableValues& 1.36 +CSSVariableValues::operator=(const CSSVariableValues& aOther) 1.37 +{ 1.38 + if (this == &aOther) { 1.39 + return *this; 1.40 + } 1.41 + 1.42 + mVariableIDs.Clear(); 1.43 + mVariables.Clear(); 1.44 + CopyVariablesFrom(aOther); 1.45 + return *this; 1.46 +} 1.47 + 1.48 +bool 1.49 +CSSVariableValues::operator==(const CSSVariableValues& aOther) const 1.50 +{ 1.51 + if (mVariables.Length() != aOther.mVariables.Length()) { 1.52 + return false; 1.53 + } 1.54 + 1.55 + for (size_t thisIndex = 0; thisIndex < mVariables.Length(); ++thisIndex) { 1.56 + size_t otherIndex; 1.57 + if (!aOther.mVariableIDs.Get(mVariables[thisIndex].mVariableName, 1.58 + &otherIndex)) { 1.59 + return false; 1.60 + } 1.61 + const nsString& otherValue = aOther.mVariables[otherIndex].mValue; 1.62 + if (!mVariables[thisIndex].mValue.Equals(otherValue)) { 1.63 + return false; 1.64 + } 1.65 + } 1.66 + 1.67 + return true; 1.68 +} 1.69 + 1.70 +size_t 1.71 +CSSVariableValues::Count() const 1.72 +{ 1.73 + return mVariables.Length(); 1.74 +} 1.75 + 1.76 +bool 1.77 +CSSVariableValues::Get(const nsAString& aName, nsString& aValue) const 1.78 +{ 1.79 + size_t id; 1.80 + if (!mVariableIDs.Get(aName, &id)) { 1.81 + return false; 1.82 + } 1.83 + aValue = mVariables[id].mValue; 1.84 + return true; 1.85 +} 1.86 + 1.87 +bool 1.88 +CSSVariableValues::Get(const nsAString& aName, 1.89 + nsString& aValue, 1.90 + nsCSSTokenSerializationType& aFirstToken, 1.91 + nsCSSTokenSerializationType& aLastToken) const 1.92 +{ 1.93 + size_t id; 1.94 + if (!mVariableIDs.Get(aName, &id)) { 1.95 + return false; 1.96 + } 1.97 + aValue = mVariables[id].mValue; 1.98 + aFirstToken = mVariables[id].mFirstToken; 1.99 + aLastToken = mVariables[id].mLastToken; 1.100 + return true; 1.101 +} 1.102 + 1.103 +void 1.104 +CSSVariableValues::GetVariableAt(size_t aIndex, nsAString& aName) const 1.105 +{ 1.106 + aName = mVariables[aIndex].mVariableName; 1.107 +} 1.108 + 1.109 +void 1.110 +CSSVariableValues::Put(const nsAString& aName, 1.111 + nsString aValue, 1.112 + nsCSSTokenSerializationType aFirstToken, 1.113 + nsCSSTokenSerializationType aLastToken) 1.114 +{ 1.115 + size_t id; 1.116 + if (mVariableIDs.Get(aName, &id)) { 1.117 + mVariables[id].mValue = aValue; 1.118 + mVariables[id].mFirstToken = aFirstToken; 1.119 + mVariables[id].mLastToken = aLastToken; 1.120 + } else { 1.121 + id = mVariables.Length(); 1.122 + mVariableIDs.Put(aName, id); 1.123 + mVariables.AppendElement(Variable(aName, aValue, aFirstToken, aLastToken)); 1.124 + } 1.125 +} 1.126 + 1.127 +void 1.128 +CSSVariableValues::CopyVariablesFrom(const CSSVariableValues& aOther) 1.129 +{ 1.130 + for (size_t i = 0, n = aOther.mVariables.Length(); i < n; i++) { 1.131 + Put(aOther.mVariables[i].mVariableName, 1.132 + aOther.mVariables[i].mValue, 1.133 + aOther.mVariables[i].mFirstToken, 1.134 + aOther.mVariables[i].mLastToken); 1.135 + } 1.136 +} 1.137 + 1.138 +void 1.139 +CSSVariableValues::AddVariablesToResolver(CSSVariableResolver* aResolver) const 1.140 +{ 1.141 + for (size_t i = 0, n = mVariables.Length(); i < n; i++) { 1.142 + aResolver->Put(mVariables[i].mVariableName, 1.143 + mVariables[i].mValue, 1.144 + mVariables[i].mFirstToken, 1.145 + mVariables[i].mLastToken, 1.146 + true); 1.147 + } 1.148 +} 1.149 + 1.150 +} // namespace mozilla