Make some methods of nsROCSSPrimitiveValue non-inline, and remove two unneeded QueryInterface calls. (Bug 569529) r=dbaron

This commit is contained in:
Craig Topper 2010-06-03 13:11:34 -07:00
parent dd3c3d72a0
commit faba5a9415
2 changed files with 181 additions and 161 deletions

View File

@ -39,14 +39,10 @@
#include "nsROCSSPrimitiveValue.h"
#include "nsCOMPtr.h"
#include "nsDOMError.h"
#include "prprf.h"
#include "nsContentUtils.h"
#include "nsXPIDLString.h"
#include "nsCRT.h"
#include "nsPresContext.h"
#include "nsStyleUtil.h"
#include "nsDOMCSSRGBColor.h"
#include "nsIDOMRect.h"
nsROCSSPrimitiveValue::nsROCSSPrimitiveValue(PRInt32 aAppUnitsPerInch)
: mType(CSS_PX), mAppUnitsPerInch(aAppUnitsPerInch)
@ -70,7 +66,7 @@ DOMCI_DATA(ROCSSPrimitiveValue, nsROCSSPrimitiveValue)
NS_INTERFACE_MAP_BEGIN(nsROCSSPrimitiveValue)
NS_INTERFACE_MAP_ENTRY(nsIDOMCSSPrimitiveValue)
NS_INTERFACE_MAP_ENTRY(nsIDOMCSSValue)
NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsIDOMCSSPrimitiveValue)
NS_INTERFACE_MAP_ENTRY(nsISupports)
NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(ROCSSPrimitiveValue)
NS_INTERFACE_MAP_END
@ -423,7 +419,8 @@ nsROCSSPrimitiveValue::GetRectValue(nsIDOMRect** aReturn)
return NS_ERROR_DOM_INVALID_ACCESS_ERR;
}
NS_ASSERTION(mValue.mRect, "mValue.mRect should never be null");
return CallQueryInterface(mValue.mRect, aReturn);
NS_ADDREF(*aReturn = mValue.mRect);
return NS_OK;
}
@ -435,6 +432,165 @@ nsROCSSPrimitiveValue::GetRGBColorValue(nsIDOMRGBColor** aReturn)
return NS_ERROR_DOM_INVALID_ACCESS_ERR;
}
NS_ASSERTION(mValue.mColor, "mValue.mColor should never be null");
return CallQueryInterface(mValue.mColor, aReturn);
NS_ADDREF(*aReturn = mValue.mColor);
return NS_OK;
}
void
nsROCSSPrimitiveValue::SetNumber(float aValue)
{
Reset();
mValue.mFloat = aValue;
mType = CSS_NUMBER;
}
void
nsROCSSPrimitiveValue::SetNumber(PRInt32 aValue)
{
Reset();
mValue.mFloat = float(aValue);
mType = CSS_NUMBER;
}
void
nsROCSSPrimitiveValue::SetNumber(PRUint32 aValue)
{
Reset();
mValue.mFloat = float(aValue);
mType = CSS_NUMBER;
}
void
nsROCSSPrimitiveValue::SetPercent(float aValue)
{
Reset();
mValue.mFloat = aValue;
mType = CSS_PERCENTAGE;
}
void
nsROCSSPrimitiveValue::SetAppUnits(nscoord aValue)
{
Reset();
mValue.mAppUnits = aValue;
mType = CSS_PX;
}
void
nsROCSSPrimitiveValue::SetAppUnits(float aValue)
{
SetAppUnits(NSToCoordRound(aValue));
}
void
nsROCSSPrimitiveValue::SetIdent(nsCSSKeyword aKeyword)
{
NS_PRECONDITION(aKeyword != eCSSKeyword_UNKNOWN &&
0 <= aKeyword && aKeyword < eCSSKeyword_COUNT,
"bad keyword");
Reset();
mValue.mKeyword = aKeyword;
mType = CSS_IDENT;
}
// FIXME: CSS_STRING should imply a string with "" and a need for escaping.
void
nsROCSSPrimitiveValue::SetString(const nsACString& aString, PRUint16 aType)
{
Reset();
mValue.mString = ToNewUnicode(aString);
if (mValue.mString) {
mType = aType;
} else {
// XXXcaa We should probably let the caller know we are out of memory
mType = CSS_UNKNOWN;
}
}
// FIXME: CSS_STRING should imply a string with "" and a need for escaping.
void
nsROCSSPrimitiveValue::SetString(const nsAString& aString, PRUint16 aType)
{
Reset();
mValue.mString = ToNewUnicode(aString);
if (mValue.mString) {
mType = aType;
} else {
// XXXcaa We should probably let the caller know we are out of memory
mType = CSS_UNKNOWN;
}
}
void
nsROCSSPrimitiveValue::SetURI(nsIURI *aURI)
{
Reset();
mValue.mURI = aURI;
NS_IF_ADDREF(mValue.mURI);
mType = CSS_URI;
}
void
nsROCSSPrimitiveValue::SetColor(nsDOMCSSRGBColor* aColor)
{
NS_PRECONDITION(aColor, "Null RGBColor being set!");
Reset();
mValue.mColor = aColor;
if (mValue.mColor) {
NS_ADDREF(mValue.mColor);
mType = CSS_RGBCOLOR;
}
else {
mType = CSS_UNKNOWN;
}
}
void
nsROCSSPrimitiveValue::SetRect(nsIDOMRect* aRect)
{
NS_PRECONDITION(aRect, "Null rect being set!");
Reset();
mValue.mRect = aRect;
if (mValue.mRect) {
NS_ADDREF(mValue.mRect);
mType = CSS_RECT;
}
else {
mType = CSS_UNKNOWN;
}
}
void
nsROCSSPrimitiveValue::SetTime(float aValue)
{
Reset();
mValue.mFloat = aValue;
mType = CSS_S;
}
void
nsROCSSPrimitiveValue::Reset()
{
switch (mType) {
case CSS_IDENT:
break;
case CSS_STRING:
case CSS_ATTR:
case CSS_COUNTER: // FIXME: Counter should use an object
NS_ASSERTION(mValue.mString, "Null string should never happen");
nsMemory::Free(mValue.mString);
mValue.mString = nsnull;
break;
case CSS_URI:
NS_IF_RELEASE(mValue.mURI);
break;
case CSS_RECT:
NS_ASSERTION(mValue.mRect, "Null Rect should never happen");
NS_RELEASE(mValue.mRect);
break;
case CSS_RGBCOLOR:
NS_ASSERTION(mValue.mColor, "Null RGBColor should never happen");
NS_RELEASE(mValue.mColor);
break;
}
}

View File

@ -41,17 +41,11 @@
#define nsROCSSPrimitiveValue_h___
#include "nsIDOMCSSPrimitiveValue.h"
#include "nsString.h"
#include "nsCoord.h"
#include "nsReadableUtils.h"
#include "nsIURI.h"
#include "nsIAtom.h"
#include "nsCSSKeywords.h"
#include "nsCOMPtr.h"
#include "nsDOMError.h"
#include "nsDOMCSSRect.h"
#include "nsDOMCSSRGBColor.h"
class nsIURI;
class nsDOMCSSRGBColor;
class nsROCSSPrimitiveValue : public nsIDOMCSSPrimitiveValue
{
@ -68,152 +62,22 @@ public:
nsROCSSPrimitiveValue(PRInt32 aAppUnitsPerInch);
virtual ~nsROCSSPrimitiveValue();
// FIXME Many of these methods should be out-of-line.
void SetNumber(float aValue)
{
Reset();
mValue.mFloat = aValue;
mType = CSS_NUMBER;
}
void SetNumber(PRInt32 aValue)
{
Reset();
mValue.mFloat = float(aValue);
mType = CSS_NUMBER;
}
void SetNumber(PRUint32 aValue)
{
Reset();
mValue.mFloat = float(aValue);
mType = CSS_NUMBER;
}
void SetPercent(float aValue)
{
Reset();
mValue.mFloat = aValue;
mType = CSS_PERCENTAGE;
}
void SetAppUnits(nscoord aValue)
{
Reset();
mValue.mAppUnits = aValue;
mType = CSS_PX;
}
void SetAppUnits(float aValue)
{
SetAppUnits(NSToCoordRound(aValue));
}
void SetIdent(nsCSSKeyword aKeyword)
{
NS_PRECONDITION(aKeyword != eCSSKeyword_UNKNOWN &&
0 <= aKeyword && aKeyword < eCSSKeyword_COUNT,
"bad keyword");
Reset();
mValue.mKeyword = aKeyword;
mType = CSS_IDENT;
}
void SetNumber(float aValue);
void SetNumber(PRInt32 aValue);
void SetNumber(PRUint32 aValue);
void SetPercent(float aValue);
void SetAppUnits(nscoord aValue);
void SetAppUnits(float aValue);
void SetIdent(nsCSSKeyword aKeyword);
// FIXME: CSS_STRING should imply a string with "" and a need for escaping.
void SetString(const nsACString& aString, PRUint16 aType = CSS_STRING)
{
Reset();
mValue.mString = ToNewUnicode(aString);
if (mValue.mString) {
mType = aType;
} else {
// XXXcaa We should probably let the caller know we are out of memory
mType = CSS_UNKNOWN;
}
}
void SetString(const nsACString& aString, PRUint16 aType = CSS_STRING);
// FIXME: CSS_STRING should imply a string with "" and a need for escaping.
void SetString(const nsAString& aString, PRUint16 aType = CSS_STRING)
{
Reset();
mValue.mString = ToNewUnicode(aString);
if (mValue.mString) {
mType = aType;
} else {
// XXXcaa We should probably let the caller know we are out of memory
mType = CSS_UNKNOWN;
}
}
void SetURI(nsIURI *aURI)
{
Reset();
mValue.mURI = aURI;
NS_IF_ADDREF(mValue.mURI);
mType = CSS_URI;
}
void SetColor(nsDOMCSSRGBColor* aColor)
{
NS_PRECONDITION(aColor, "Null RGBColor being set!");
Reset();
mValue.mColor = aColor;
if (mValue.mColor) {
NS_ADDREF(mValue.mColor);
mType = CSS_RGBCOLOR;
}
else {
mType = CSS_UNKNOWN;
}
}
void SetRect(nsIDOMRect* aRect)
{
NS_PRECONDITION(aRect, "Null rect being set!");
Reset();
mValue.mRect = aRect;
if (mValue.mRect) {
NS_ADDREF(mValue.mRect);
mType = CSS_RECT;
}
else {
mType = CSS_UNKNOWN;
}
}
void SetTime(float aValue)
{
Reset();
mValue.mFloat = aValue;
mType = CSS_S;
}
void Reset(void)
{
switch (mType) {
case CSS_IDENT:
break;
case CSS_STRING:
case CSS_ATTR:
case CSS_COUNTER: // FIXME: Counter should use an object
NS_ASSERTION(mValue.mString, "Null string should never happen");
nsMemory::Free(mValue.mString);
mValue.mString = nsnull;
break;
case CSS_URI:
NS_IF_RELEASE(mValue.mURI);
break;
case CSS_RECT:
NS_ASSERTION(mValue.mRect, "Null Rect should never happen");
NS_RELEASE(mValue.mRect);
break;
case CSS_RGBCOLOR:
NS_ASSERTION(mValue.mColor, "Null RGBColor should never happen");
NS_RELEASE(mValue.mColor);
break;
}
}
void SetString(const nsAString& aString, PRUint16 aType = CSS_STRING);
void SetURI(nsIURI *aURI);
void SetColor(nsDOMCSSRGBColor* aColor);
void SetRect(nsIDOMRect* aRect);
void SetTime(float aValue);
void Reset();
private:
PRUint16 mType;