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"
10 #include "nsISupportsUtils.h"
12 #include "TransactionItem.h"
16 TransactionStack::TransactionStack(Type aType
) : mType(aType
) {}
18 TransactionStack::~TransactionStack() { Clear(); }
20 void TransactionStack::Push(TransactionItem
* aTransactionItem
) {
21 if (NS_WARN_IF(!aTransactionItem
)) {
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
)) {
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();
49 already_AddRefed
<TransactionItem
> TransactionStack::GetItemAt(
50 size_t aIndex
) const {
51 RefPtr
<TransactionItem
> item
=
52 nsRefPtrDeque
<TransactionItem
>::ObjectAt(aIndex
);
56 void TransactionStack::Clear() {
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
);
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