content/base/src/nsAttrValueOrString.h

Wed, 31 Dec 2014 06:09:35 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Wed, 31 Dec 2014 06:09:35 +0100
changeset 0
6474c204b198
permissions
-rw-r--r--

Cloned upstream origin tor-browser at tor-browser-31.3.0esr-4.5-1-build1
revision ID fc1c9ff7c1b2defdbc039f12214767608f46423f for hacking purpose.

michael@0 1 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
michael@0 2 /* This Source Code Form is subject to the terms of the Mozilla Public
michael@0 3 * License, v. 2.0. If a copy of the MPL was not distributed with this file,
michael@0 4 * You can obtain one at http://mozilla.org/MPL/2.0/. */
michael@0 5
michael@0 6 /*
michael@0 7 * A wrapper to contain either an nsAttrValue or an nsAString. This is useful
michael@0 8 * because constructing an nsAttrValue from an nsAString can be expensive when
michael@0 9 * the buffer of the string is not shared.
michael@0 10 *
michael@0 11 * Since a raw pointer to the passed-in string is kept, this class should only
michael@0 12 * be used on the stack.
michael@0 13 */
michael@0 14
michael@0 15 #ifndef nsAttrValueOrString_h___
michael@0 16 #define nsAttrValueOrString_h___
michael@0 17
michael@0 18 #include "nsString.h"
michael@0 19 #include "nsAttrValue.h"
michael@0 20
michael@0 21 class MOZ_STACK_CLASS nsAttrValueOrString
michael@0 22 {
michael@0 23 public:
michael@0 24 nsAttrValueOrString(const nsAString& aValue)
michael@0 25 : mAttrValue(nullptr)
michael@0 26 , mStringPtr(&aValue)
michael@0 27 , mCheapString(nullptr)
michael@0 28 { }
michael@0 29 nsAttrValueOrString(const nsAttrValue& aValue)
michael@0 30 : mAttrValue(&aValue)
michael@0 31 , mStringPtr(nullptr)
michael@0 32 , mCheapString(nullptr)
michael@0 33 { }
michael@0 34
michael@0 35 /**
michael@0 36 * Returns a reference to the string value of the contents of this object.
michael@0 37 *
michael@0 38 * When this object points to a string or an nsAttrValue of string or atom
michael@0 39 * type this should be fairly cheap. Other nsAttrValue types will be
michael@0 40 * serialized the first time this is called and cached from thereon.
michael@0 41 */
michael@0 42 const nsAString& String() const;
michael@0 43
michael@0 44 /**
michael@0 45 * Compares the string representation of this object with the string
michael@0 46 * representation of an nsAttrValue.
michael@0 47 */
michael@0 48 bool EqualsAsStrings(const nsAttrValue& aOther) const
michael@0 49 {
michael@0 50 if (mStringPtr) {
michael@0 51 return aOther.Equals(*mStringPtr, eCaseMatters);
michael@0 52 }
michael@0 53 return aOther.EqualsAsStrings(*mAttrValue);
michael@0 54 }
michael@0 55
michael@0 56 protected:
michael@0 57 const nsAttrValue* mAttrValue;
michael@0 58 mutable const nsAString* mStringPtr;
michael@0 59 mutable nsCheapString mCheapString;
michael@0 60 };
michael@0 61
michael@0 62 #endif // nsAttrValueOrString_h___

mercurial