LCOV - code coverage report
Current view: top level - editor/txmgr - nsTransactionStack.cpp (source / functions) Hit Total Coverage
Test: output.info Lines: 25 47 53.2 %
Date: 2017-07-14 16:53:18 Functions: 10 14 71.4 %
Legend: Lines: hit not hit

          Line data    Source code
       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
       4             :  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
       5             : 
       6             : #include "nsCOMPtr.h"
       7             : #include "nsCycleCollectionParticipant.h"
       8             : #include "nsISupportsUtils.h"
       9             : #include "nsTransactionItem.h"
      10             : #include "nsTransactionStack.h"
      11             : #include "nscore.h"
      12             : 
      13          15 : class nsTransactionStackDeallocator : public nsDequeFunctor {
      14           0 :   virtual void* operator() (void* aObject) {
      15           0 :     RefPtr<nsTransactionItem> releaseMe = dont_AddRef(static_cast<nsTransactionItem*>(aObject));
      16           0 :     return nullptr;
      17             :   }
      18             : };
      19             : 
      20           6 : nsTransactionStack::nsTransactionStack(Type aType)
      21           6 :   : nsDeque(new nsTransactionStackDeallocator())
      22           6 :   , mType(aType)
      23             : {
      24           6 : }
      25             : 
      26           6 : nsTransactionStack::~nsTransactionStack()
      27             : {
      28           3 :   Clear();
      29           3 : }
      30             : 
      31             : void
      32           3 : nsTransactionStack::Push(nsTransactionItem* aTransactionItem)
      33             : {
      34           3 :   if (!aTransactionItem) {
      35           0 :     return;
      36             :   }
      37             : 
      38           6 :   RefPtr<nsTransactionItem> item(aTransactionItem);
      39           3 :   Push(item.forget());
      40             : }
      41             : 
      42             : void
      43           3 : nsTransactionStack::Push(already_AddRefed<nsTransactionItem> aTransactionItem)
      44             : {
      45           6 :   RefPtr<nsTransactionItem> item(aTransactionItem);
      46           3 :   if (!item) {
      47           0 :     return;
      48             :   }
      49             : 
      50           3 :   nsDeque::Push(item.forget().take());
      51             : }
      52             : 
      53             : already_AddRefed<nsTransactionItem>
      54           3 : nsTransactionStack::Pop()
      55             : {
      56             :   RefPtr<nsTransactionItem> item =
      57           6 :     dont_AddRef(static_cast<nsTransactionItem*>(nsDeque::Pop()));
      58           6 :   return item.forget();
      59             : }
      60             : 
      61             : already_AddRefed<nsTransactionItem>
      62           0 : nsTransactionStack::PopBottom()
      63             : {
      64             :   RefPtr<nsTransactionItem> item =
      65           0 :     dont_AddRef(static_cast<nsTransactionItem*>(nsDeque::PopFront()));
      66           0 :   return item.forget();
      67             : }
      68             : 
      69             : already_AddRefed<nsTransactionItem>
      70           1 : nsTransactionStack::Peek()
      71             : {
      72             :   RefPtr<nsTransactionItem> item =
      73           2 :     static_cast<nsTransactionItem*>(nsDeque::Peek());
      74           2 :   return item.forget();
      75             : }
      76             : 
      77             : already_AddRefed<nsTransactionItem>
      78           0 : nsTransactionStack::GetItem(int32_t aIndex)
      79             : {
      80           0 :   if (aIndex < 0 || aIndex >= static_cast<int32_t>(nsDeque::GetSize())) {
      81           0 :     return nullptr;
      82             :   }
      83             :   RefPtr<nsTransactionItem> item =
      84           0 :     static_cast<nsTransactionItem*>(nsDeque::ObjectAt(aIndex));
      85           0 :   return item.forget();
      86             : }
      87             : 
      88             : void
      89           7 : nsTransactionStack::Clear()
      90             : {
      91           7 :   while (GetSize() != 0) {
      92             :     RefPtr<nsTransactionItem> item =
      93           0 :       mType == FOR_UNDO ? Pop() : PopBottom();
      94             :   }
      95           7 : }
      96             : 
      97             : void
      98           0 : nsTransactionStack::DoTraverse(nsCycleCollectionTraversalCallback &cb)
      99             : {
     100           0 :   int32_t size = GetSize();
     101           0 :   for (int32_t i = 0; i < size; ++i) {
     102           0 :     nsTransactionItem* item = static_cast<nsTransactionItem*>(nsDeque::ObjectAt(i));
     103           0 :     if (item) {
     104           0 :       NS_CYCLE_COLLECTION_NOTE_EDGE_NAME(cb, "transaction stack mDeque[i]");
     105           0 :       cb.NoteNativeChild(item, NS_CYCLE_COLLECTION_PARTICIPANT(nsTransactionItem));
     106             :     }
     107             :   }
     108           0 : }

Generated by: LCOV version 1.13