LCOV - code coverage report
Current view: top level - dom/svg - SVGStringList.h (source / functions) Hit Total Coverage
Test: output.info Lines: 6 41 14.6 %
Date: 2017-07-14 16:53:18 Functions: 3 14 21.4 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
       2             : /* vim: set ts=8 sts=2 et sw=2 tw=80: */
       3             : /* This Source Code Form is subject to the terms of the Mozilla Public
       4             :  * License, v. 2.0. If a copy of the MPL was not distributed with this
       5             :  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
       6             : 
       7             : #ifndef MOZILLA_SVGSTRINGLIST_H__
       8             : #define MOZILLA_SVGSTRINGLIST_H__
       9             : 
      10             : #include "nsDebug.h"
      11             : #include "nsTArray.h"
      12             : #include "nsString.h" // IWYU pragma: keep
      13             : 
      14             : namespace mozilla {
      15             : 
      16             : /**
      17             :  *
      18             :  * The DOM wrapper class for this class is DOMSVGStringList.
      19             :  */
      20             : class SVGStringList
      21             : {
      22             :   friend class DOMSVGStringList;
      23             : 
      24             : public:
      25             : 
      26         429 :   SVGStringList() : mIsSet(false), mIsCommaSeparated(false) {}
      27           0 :   ~SVGStringList(){}
      28             : 
      29         143 :   void SetIsCommaSeparated(bool aIsCommaSeparated) {
      30         143 :     mIsCommaSeparated = aIsCommaSeparated;
      31         143 :   }
      32             :   nsresult SetValue(const nsAString& aValue);
      33             : 
      34           0 :   void Clear() {
      35           0 :     mStrings.Clear();
      36           0 :     mIsSet = false;
      37           0 :   }
      38             : 
      39             :   /// This may return an incomplete string on OOM, but that's acceptable.
      40             :   void GetValue(nsAString& aValue) const;
      41             : 
      42           0 :   bool IsEmpty() const {
      43           0 :     return mStrings.IsEmpty();
      44             :   }
      45             : 
      46           0 :   uint32_t Length() const {
      47           0 :     return mStrings.Length();
      48             :   }
      49             : 
      50           0 :   const nsAString& operator[](uint32_t aIndex) const {
      51           0 :     return mStrings[aIndex];
      52             :   }
      53             : 
      54             :   bool operator==(const SVGStringList& rhs) const {
      55             :     return mStrings == rhs.mStrings;
      56             :   }
      57             : 
      58           0 :   bool SetCapacity(uint32_t size) {
      59           0 :     return mStrings.SetCapacity(size, fallible);
      60             :   }
      61             : 
      62             :   void Compact() {
      63             :     mStrings.Compact();
      64             :   }
      65             : 
      66             :   // Returns true if the value of this stringlist has been explicitly
      67             :   // set by markup or a DOM call, false otherwise.
      68         272 :   bool IsExplicitlySet() const
      69         272 :     { return mIsSet; }
      70             : 
      71             :   // Access to methods that can modify objects of this type is deliberately
      72             :   // limited. This is to reduce the chances of someone modifying objects of
      73             :   // this type without taking the necessary steps to keep DOM wrappers in sync.
      74             :   // If you need wider access to these methods, consider adding a method to
      75             :   // SVGAnimatedStringList and having that class act as an intermediary so it
      76             :   // can take care of keeping DOM wrappers in sync.
      77             : 
      78             : protected:
      79             : 
      80             :   /**
      81             :    * This may fail on OOM if the internal capacity needs to be increased, in
      82             :    * which case the list will be left unmodified.
      83             :    */
      84             :   nsresult CopyFrom(const SVGStringList& rhs);
      85             : 
      86           0 :   nsAString& operator[](uint32_t aIndex) {
      87           0 :     return mStrings[aIndex];
      88             :   }
      89             : 
      90             :   /**
      91             :    * This may fail (return false) on OOM if the internal capacity is being
      92             :    * increased, in which case the list will be left unmodified.
      93             :    */
      94             :   bool SetLength(uint32_t aStringOfItems) {
      95             :     return mStrings.SetLength(aStringOfItems, fallible);
      96             :   }
      97             : 
      98             : private:
      99             : 
     100             :   // Marking the following private only serves to show which methods are only
     101             :   // used by our friend classes (as opposed to our subclasses) - it doesn't
     102             :   // really provide additional safety.
     103             : 
     104           0 :   bool InsertItem(uint32_t aIndex, const nsAString &aString) {
     105           0 :     if (aIndex >= mStrings.Length()) {
     106           0 :       aIndex = mStrings.Length();
     107             :     }
     108           0 :     if (mStrings.InsertElementAt(aIndex, aString, fallible)) {
     109           0 :       mIsSet = true;
     110           0 :       return true;
     111             :     }
     112           0 :     return false;
     113             :   }
     114             : 
     115           0 :   void ReplaceItem(uint32_t aIndex, const nsAString &aString) {
     116           0 :     MOZ_ASSERT(aIndex < mStrings.Length(),
     117             :                "DOM wrapper caller should have raised INDEX_SIZE_ERR");
     118           0 :     mStrings[aIndex] = aString;
     119           0 :   }
     120             : 
     121           0 :   void RemoveItem(uint32_t aIndex) {
     122           0 :     MOZ_ASSERT(aIndex < mStrings.Length(),
     123             :                "DOM wrapper caller should have raised INDEX_SIZE_ERR");
     124           0 :     mStrings.RemoveElementAt(aIndex);
     125           0 :   }
     126             : 
     127           0 :   bool AppendItem(const nsAString &aString) {
     128           0 :     if (mStrings.AppendElement(aString, fallible)) {
     129           0 :       mIsSet = true;
     130           0 :       return true;
     131             :     }
     132           0 :     return false;
     133             :   }
     134             : 
     135             : protected:
     136             : 
     137             :   /* See SVGLengthList for the rationale for using FallibleTArray<float> instead
     138             :    * of FallibleTArray<float, 1>.
     139             :    */
     140             :   FallibleTArray<nsString> mStrings;
     141             :   bool mIsSet;
     142             :   bool mIsCommaSeparated;
     143             : };
     144             : 
     145             : } // namespace mozilla
     146             : 
     147             : #endif // MOZILLA_SVGSTRINGLIST_H__

Generated by: LCOV version 1.13