// Copyright 2013 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #pragma once #include #include "flutter/fml/macros.h" namespace impeller { class ArchiveStatement; //------------------------------------------------------------------------------ /// @brief All writes made to the archive within a transaction that is not /// marked as ready for commit will be rolled back with the /// transaction ends. /// /// All transactions are obtained from the `ArchiveDatabase`. /// /// @see `ArchiveDatabase` /// class ArchiveTransaction { public: ArchiveTransaction(ArchiveTransaction&& transaction); ~ArchiveTransaction(); void MarkWritesAsReadyForCommit(); private: ArchiveStatement& end_stmt_; ArchiveStatement& rollback_stmt_; int64_t& transaction_count_; bool cleanup_ = false; bool successful_ = false; bool abandoned_ = false; friend class ArchiveDatabase; ArchiveTransaction(int64_t& transactionCount, ArchiveStatement& beginStatement, ArchiveStatement& endStatement, ArchiveStatement& rollbackStatement); FML_DISALLOW_COPY_AND_ASSIGN(ArchiveTransaction); }; } // namespace impeller