LCOV - code coverage report
Current view: top level - xpcom/ds - nsWhitespaceTokenizer.h (source / functions) Hit Total Coverage
Test: output.info Lines: 22 29 75.9 %
Date: 2017-07-14 16:53:18 Functions: 6 22 27.3 %
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 __nsWhitespaceTokenizer_h
       8             : #define __nsWhitespaceTokenizer_h
       9             : 
      10             : #include "mozilla/RangedPtr.h"
      11             : #include "nsDependentSubstring.h"
      12             : #include "nsCRT.h"
      13             : 
      14             : template<typename DependentSubstringType, bool IsWhitespace(char16_t)>
      15             : class nsTWhitespaceTokenizer
      16             : {
      17             :   typedef typename DependentSubstringType::char_type CharType;
      18             :   typedef typename DependentSubstringType::substring_type SubstringType;
      19             : 
      20             : public:
      21           3 :   explicit nsTWhitespaceTokenizer(const SubstringType& aSource)
      22             :     : mIter(aSource.Data(), aSource.Length())
      23           3 :     , mEnd(aSource.Data() + aSource.Length(), aSource.Data(),
      24             :            aSource.Length())
      25             :     , mWhitespaceBeforeFirstToken(false)
      26           6 :     , mWhitespaceAfterCurrentToken(false)
      27             :   {
      28           3 :     while (mIter < mEnd && IsWhitespace(*mIter)) {
      29           0 :       mWhitespaceBeforeFirstToken = true;
      30           0 :       ++mIter;
      31             :     }
      32           3 :   }
      33             : 
      34             :   /**
      35             :    * Checks if any more tokens are available.
      36             :    */
      37           6 :   bool hasMoreTokens() const
      38             :   {
      39           6 :     return mIter < mEnd;
      40             :   }
      41             : 
      42             :   /*
      43             :    * Returns true if there is whitespace prior to the first token.
      44             :    */
      45           3 :   bool whitespaceBeforeFirstToken() const
      46             :   {
      47           3 :     return mWhitespaceBeforeFirstToken;
      48             :   }
      49             : 
      50             :   /*
      51             :    * Returns true if there is any whitespace after the current token.
      52             :    * This is always true unless we're reading the last token.
      53             :    */
      54           3 :   bool whitespaceAfterCurrentToken() const
      55             :   {
      56           3 :     return mWhitespaceAfterCurrentToken;
      57             :   }
      58             : 
      59             :   /**
      60             :    * Returns the next token.
      61             :    */
      62           3 :   const DependentSubstringType nextToken()
      63             :   {
      64           3 :     const mozilla::RangedPtr<const CharType> tokenStart = mIter;
      65          35 :     while (mIter < mEnd && !IsWhitespace(*mIter)) {
      66          16 :       ++mIter;
      67             :     }
      68           3 :     const mozilla::RangedPtr<const CharType> tokenEnd = mIter;
      69           3 :     mWhitespaceAfterCurrentToken = false;
      70           3 :     while (mIter < mEnd && IsWhitespace(*mIter)) {
      71           0 :       mWhitespaceAfterCurrentToken = true;
      72           0 :       ++mIter;
      73             :     }
      74           3 :     return Substring(tokenStart.get(), tokenEnd.get());
      75             :   }
      76             : 
      77             : private:
      78             :   mozilla::RangedPtr<const CharType> mIter;
      79             :   const mozilla::RangedPtr<const CharType> mEnd;
      80             :   bool mWhitespaceBeforeFirstToken;
      81             :   bool mWhitespaceAfterCurrentToken;
      82             : };
      83             : 
      84             : template<bool IsWhitespace(char16_t) = NS_IsAsciiWhitespace>
      85             : class nsWhitespaceTokenizerTemplate
      86             :   : public nsTWhitespaceTokenizer<nsDependentSubstring, IsWhitespace>
      87             : {
      88             : public:
      89           3 :   explicit nsWhitespaceTokenizerTemplate(const nsAString& aSource)
      90           3 :     : nsTWhitespaceTokenizer<nsDependentSubstring, IsWhitespace>(aSource)
      91             :   {
      92           3 :   }
      93             : };
      94             : 
      95             : typedef nsWhitespaceTokenizerTemplate<> nsWhitespaceTokenizer;
      96             : 
      97             : template<bool IsWhitespace(char16_t) = NS_IsAsciiWhitespace>
      98             : class nsCWhitespaceTokenizerTemplate
      99             :   : public nsTWhitespaceTokenizer<nsDependentCSubstring, IsWhitespace>
     100             : {
     101             : public:
     102           0 :   explicit nsCWhitespaceTokenizerTemplate(const nsACString& aSource)
     103           0 :     : nsTWhitespaceTokenizer<nsDependentCSubstring, IsWhitespace>(aSource)
     104             :   {
     105           0 :   }
     106             : };
     107             : 
     108             : typedef nsCWhitespaceTokenizerTemplate<> nsCWhitespaceTokenizer;
     109             : 
     110             : #endif /* __nsWhitespaceTokenizer_h */

Generated by: LCOV version 1.13