blob: a0bb772765815f409dddbd7b798c4233d2a6970e [file] [log] [blame]
Andreas Gampea1ffdba2019-01-04 16:08:51 -08001/*
2 * Copyright (C) 2014 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17#ifndef ART_RUNTIME_HANDLE_WRAPPER_H_
18#define ART_RUNTIME_HANDLE_WRAPPER_H_
19
20#include "handle.h"
21#include "obj_ptr.h"
22
23namespace art {
24
25// A wrapper which wraps around Object** and restores the pointer in the destructor.
26// TODO: Delete
27template<class T>
28class HandleWrapper : public MutableHandle<T> {
29 public:
30 HandleWrapper(T** obj, const MutableHandle<T>& handle)
31 : MutableHandle<T>(handle), obj_(obj) {
32 }
33
34 HandleWrapper(const HandleWrapper&) = default;
35
36 ~HandleWrapper() {
37 *obj_ = MutableHandle<T>::Get();
38 }
39
40 private:
41 T** const obj_;
42};
43
44
45// A wrapper which wraps around ObjPtr<Object>* and restores the pointer in the destructor.
46// TODO: Add more functionality.
47template<class T>
48class HandleWrapperObjPtr : public MutableHandle<T> {
49 public:
50 HandleWrapperObjPtr(ObjPtr<T>* obj, const MutableHandle<T>& handle)
51 : MutableHandle<T>(handle), obj_(obj) {}
52
53 HandleWrapperObjPtr(const HandleWrapperObjPtr&) = default;
54
55 ~HandleWrapperObjPtr() {
Vladimir Markod7e9bbf2019-03-28 13:18:57 +000056 *obj_ = MutableHandle<T>::Get();
Andreas Gampea1ffdba2019-01-04 16:08:51 -080057 }
58
59 private:
60 ObjPtr<T>* const obj_;
61};
62
63} // namespace art
64
65#endif // ART_RUNTIME_HANDLE_WRAPPER_H_