size_t nsCSSCompressedDataBlock::SizeOfIncludingThis(mozilla::MallocSizeOf aMallocSizeOf) const { size_t n = aMallocSizeOf(this); for (uint32_t i = 0; i < mNumProps; i++) { n += ValueAtIndex(i)->SizeOfExcludingThis(aMallocSizeOf); } return n; }
size_t nsCSSCompressedDataBlock::SizeOfIncludingThis(nsMallocSizeOfFun aMallocSizeOf) const { size_t n = aMallocSizeOf(this); for (PRUint32 i = 0; i < mNumProps; i++) { n += ValueAtIndex(i)->SizeOfExcludingThis(aMallocSizeOf); } return n; }
nsCSSCompressedDataBlock::~nsCSSCompressedDataBlock() { for (uint32_t i = 0; i < mNumProps; i++) { #ifdef DEBUG (void)PropertyAtIndex(i); // this checks the property is in range #endif const nsCSSValue* val = ValueAtIndex(i); NS_ABORT_IF_FALSE(val->GetUnit() != eCSSUnit_Null, "oops"); val->~nsCSSValue(); } }
nsCSSCompressedDataBlock* nsCSSCompressedDataBlock::Clone() const { nsAutoPtr<nsCSSCompressedDataBlock> result(new(mNumProps) nsCSSCompressedDataBlock(mNumProps)); result->mStyleBits = mStyleBits; for (uint32_t i = 0; i < mNumProps; i++) { result->SetPropertyAtIndex(i, PropertyAtIndex(i)); result->CopyValueToIndex(i, ValueAtIndex(i)); } return result.forget(); }
void nsCSSCompressedDataBlock::MapRuleInfoInto(nsRuleData *aRuleData) const { // If we have no data for these structs, then return immediately. // This optimization should make us return most of the time, so we // have to worry much less (although still some) about the speed of // the rest of the function. if (!(aRuleData->mSIDs & mStyleBits)) return; nsIDocument* doc = aRuleData->mPresContext->Document(); for (uint32_t i = 0; i < mNumProps; i++) { nsCSSProperty iProp = PropertyAtIndex(i); if (nsCachedStyleData::GetBitForSID(nsCSSProps::kSIDTable[iProp]) & aRuleData->mSIDs) { nsCSSValue* target = aRuleData->ValueFor(iProp); if (target->GetUnit() == eCSSUnit_Null) { const nsCSSValue *val = ValueAtIndex(i); NS_ABORT_IF_FALSE(val->GetUnit() != eCSSUnit_Null, "oops"); if (ShouldStartImageLoads(aRuleData, iProp)) { TryToStartImageLoad(*val, doc, iProp); } *target = *val; if (nsCSSProps::PropHasFlags(iProp, CSS_PROPERTY_IGNORED_WHEN_COLORS_DISABLED) && ShouldIgnoreColors(aRuleData)) { if (iProp == eCSSProperty_background_color) { // Force non-'transparent' background // colors to the user's default. if (target->IsNonTransparentColor()) { target->SetColorValue(aRuleData->mPresContext-> DefaultBackgroundColor()); } } else { // Ignore 'color', 'border-*-color', etc. *target = nsCSSValue(); } } } } } }
const nsCSSValue* nsCSSCompressedDataBlock::ValueFor(nsCSSProperty aProperty) const { NS_ABORT_IF_FALSE(!nsCSSProps::IsShorthand(aProperty), "Don't call for shorthands"); // If we have no data for this struct, then return immediately. // This optimization should make us return most of the time, so we // have to worry much less (although still some) about the speed of // the rest of the function. if (!(nsCachedStyleData::GetBitForSID(nsCSSProps::kSIDTable[aProperty]) & mStyleBits)) return nullptr; for (uint32_t i = 0; i < mNumProps; i++) { if (PropertyAtIndex(i) == aProperty) { return ValueAtIndex(i); } } return nullptr; }