Backed out changeset b71c8c052463 (bug 1943846) for causing mass failures. CLOSED...
[gecko.git] / editor / txmgr / TransactionStack.cpp
blob099b46a77cb6a8bbe38c0a8f501225de4f9f9295
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/. */
6 #include "TransactionStack.h"
8 #include "nsCycleCollectionParticipant.h"
9 #include "nsDebug.h"
10 #include "nsISupportsUtils.h"
11 #include "nscore.h"
12 #include "TransactionItem.h"
14 namespace mozilla {
16 TransactionStack::TransactionStack(Type aType) : mType(aType) {}
18 TransactionStack::~TransactionStack() { Clear(); }
20 void TransactionStack::Push(TransactionItem* aTransactionItem) {
21 if (NS_WARN_IF(!aTransactionItem)) {
22 return;
24 nsRefPtrDeque<TransactionItem>::Push(aTransactionItem);
27 void TransactionStack::Push(
28 already_AddRefed<TransactionItem> aTransactionItem) {
29 TransactionItem* transactionItem = aTransactionItem.take();
30 if (NS_WARN_IF(!transactionItem)) {
31 return;
33 nsRefPtrDeque<TransactionItem>::Push(dont_AddRef(transactionItem));
36 already_AddRefed<TransactionItem> TransactionStack::Pop() {
37 return nsRefPtrDeque<TransactionItem>::Pop();
40 already_AddRefed<TransactionItem> TransactionStack::PopBottom() {
41 return nsRefPtrDeque<TransactionItem>::PopFront();
44 already_AddRefed<TransactionItem> TransactionStack::Peek() const {
45 RefPtr<TransactionItem> item = nsRefPtrDeque<TransactionItem>::Peek();
46 return item.forget();
49 already_AddRefed<TransactionItem> TransactionStack::GetItemAt(
50 size_t aIndex) const {
51 RefPtr<TransactionItem> item =
52 nsRefPtrDeque<TransactionItem>::ObjectAt(aIndex);
53 return item.forget();
56 void TransactionStack::Clear() {
57 while (GetSize()) {
58 RefPtr<TransactionItem> item = mType == FOR_UNDO ? Pop() : PopBottom();
62 void TransactionStack::DoTraverse(nsCycleCollectionTraversalCallback& cb) {
63 size_t size = GetSize();
64 for (size_t i = 0; i < size; ++i) {
65 auto* item = nsRefPtrDeque<TransactionItem>::ObjectAt(i);
66 if (item) {
67 NS_CYCLE_COLLECTION_NOTE_EDGE_NAME(cb, "transaction stack mDeque[i]");
68 cb.NoteNativeChild(item,
69 NS_CYCLE_COLLECTION_PARTICIPANT(TransactionItem));
74 } // namespace mozilla