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 #ifndef mozilla_TransactionStack_h 7 #define mozilla_TransactionStack_h 8 9 #include "mozilla/AlreadyAddRefed.h" 10 #include "nsDeque.h" 11 12 class nsCycleCollectionTraversalCallback; 13 14 namespace mozilla { 15 16 class TransactionItem; 17 18 class TransactionStack : private nsRefPtrDeque<TransactionItem> { 19 public: 20 enum Type { FOR_UNDO, FOR_REDO }; 21 22 explicit TransactionStack(Type aType); 23 ~TransactionStack(); 24 25 void Push(TransactionItem* aTransactionItem); 26 void Push(already_AddRefed<TransactionItem> aTransactionItem); 27 already_AddRefed<TransactionItem> Pop(); 28 already_AddRefed<TransactionItem> PopBottom(); 29 already_AddRefed<TransactionItem> Peek() const; 30 already_AddRefed<TransactionItem> GetItemAt(size_t aIndex) const; 31 void Clear(); GetSize()32 size_t GetSize() const { return nsRefPtrDeque<TransactionItem>::GetSize(); } IsEmpty()33 bool IsEmpty() const { return GetSize() == 0; } 34 DoUnlink()35 void DoUnlink() { Clear(); } 36 void DoTraverse(nsCycleCollectionTraversalCallback& cb); 37 38 private: 39 const Type mType; 40 }; 41 42 } // namespace mozilla 43 44 #endif // mozilla_TransactionStack_h 45