1 // Copyright (C) 2019 The Android Open Source Project
2 //
3 // Licensed under the Apache License, Version 2.0 (the "License");
4 // you may not use this file except in compliance with the License.
5 // You may obtain a copy of the License at
6 //
7 //      http://www.apache.org/licenses/LICENSE-2.0
8 //
9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an "AS IS" BASIS,
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 // See the License for the specific language governing permissions and
13 // limitations under the License.
14 
15 #pragma once
16 
17 #include <string>
18 
19 #include <android-base/macros.h>
20 
21 namespace android {
22 namespace snapshot {
23 
24 // An abstract "device" that will be cleaned up (unmapped, unmounted, etc.) upon
25 // destruction.
26 struct AutoDevice {
~AutoDeviceAutoDevice27     virtual ~AutoDevice(){};
28     void Release();
29 
HasDeviceAutoDevice30     bool HasDevice() const { return !name_.empty(); }
31 
32   protected:
AutoDeviceAutoDevice33     AutoDevice(const std::string& name) : name_(name) {}
34     std::string name_;
35 
36   private:
37     DISALLOW_COPY_AND_ASSIGN(AutoDevice);
38     AutoDevice(AutoDevice&& other) = delete;
39 };
40 
41 }  // namespace snapshot
42 }  // namespace android
43