content/base/src/nsAttrValueOrString.h

Thu, 15 Jan 2015 21:03:48 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Thu, 15 Jan 2015 21:03:48 +0100
branch
TOR_BUG_9701
changeset 11
deefc01c0e14
permissions
-rw-r--r--

Integrate friendly tips from Tor colleagues to make (or not) 4.5 alpha 3;
This includes removal of overloaded (but unused) methods, and addition of
a overlooked call to DataStruct::SetData(nsISupports, uint32_t, bool.)

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

mercurial