| // 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. |
| |
| #ifndef LIB_TONIC_DART_PERSISTENT_VALUE_H_ |
| #define LIB_TONIC_DART_PERSISTENT_VALUE_H_ |
| |
| #include <memory> |
| |
| #include "third_party/dart/runtime/include/dart_api.h" |
| #include "tonic/common/macros.h" |
| |
| namespace tonic { |
| class DartState; |
| |
| // DartPersistentValue is a bookkeeping class to help pair calls to |
| // Dart_NewPersistentHandle with Dart_DeletePersistentHandle. Consider using |
| // this class instead of holding a Dart_PersistentHandle directly so that you |
| // don't leak the Dart_PersistentHandle. |
| class DartPersistentValue { |
| public: |
| DartPersistentValue(); |
| DartPersistentValue(DartPersistentValue&& other); |
| DartPersistentValue(DartState* dart_state, Dart_Handle value); |
| ~DartPersistentValue(); |
| |
| Dart_PersistentHandle value() const { return value_; } |
| bool is_empty() const { return !value_; } |
| |
| void Set(DartState* dart_state, Dart_Handle value); |
| void Clear(); |
| Dart_Handle Get(); |
| Dart_Handle Release(); |
| |
| const std::weak_ptr<DartState>& dart_state() const { return dart_state_; } |
| |
| private: |
| std::weak_ptr<DartState> dart_state_; |
| Dart_PersistentHandle value_; |
| |
| TONIC_DISALLOW_COPY_AND_ASSIGN(DartPersistentValue); |
| }; |
| |
| } // namespace tonic |
| |
| #endif // LIB_TONIC_DART_PERSISTENT_VALUE_H_ |