blob: 73a3731089570f329043a9b19be37bcf1e129225 [file] [log] [blame]
// Copyright 2018 The Chromium 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 DEVICE_USB_SCOPED_LIBUSB_DEVICE_REF_H_
#define DEVICE_USB_SCOPED_LIBUSB_DEVICE_REF_H_
#include "base/macros.h"
#include "base/memory/scoped_refptr.h"
struct libusb_device;
namespace device {
class UsbContext;
// This class owns a reference to a libusb_device as well as a reference to
// the libusb_context. The libusb_context must outlive any libusb_device
// instances created from it.
class ScopedLibusbDeviceRef {
public:
ScopedLibusbDeviceRef(libusb_device* device,
scoped_refptr<UsbContext> context);
ScopedLibusbDeviceRef(ScopedLibusbDeviceRef&& other);
~ScopedLibusbDeviceRef();
libusb_device* get() const { return device_; }
scoped_refptr<UsbContext> GetContext() const { return context_; }
void Reset();
bool IsValid() const;
private:
libusb_device* device_;
scoped_refptr<UsbContext> context_;
DISALLOW_COPY_AND_ASSIGN(ScopedLibusbDeviceRef);
};
bool operator==(const ScopedLibusbDeviceRef& ref, libusb_device* device);
} // namespace device
#endif // DEVICE_USB_SCOPED_LIBUSB_DEVICE_REF_H_