// Copyright 2018 The Chromium OS 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 SCREENSHOT_PTR_UTIL_H_
#define SCREENSHOT_PTR_UTIL_H_

#include <gbm.h>
#include <xf86drm.h>
#include <xf86drmMode.h>

#include <memory>

namespace screenshot {

struct DrmModeResDeleter {
  void operator()(drmModeRes* resources) {
    drmModeFreeResources(resources);
  }
};
using ScopedDrmModeResPtr = std::unique_ptr<drmModeRes, DrmModeResDeleter>;

struct DrmModeCrtcDeleter {
  void operator()(drmModeCrtc* crtc) {
    drmModeFreeCrtc(crtc);
  }
};
using ScopedDrmModeCrtcPtr = std::unique_ptr<drmModeCrtc, DrmModeCrtcDeleter>;

struct DrmModeEncoderDeleter {
  void operator()(drmModeEncoder* encoder) {
    drmModeFreeEncoder(encoder);
  }
};
using ScopedDrmModeEncoderPtr =
    std::unique_ptr<drmModeEncoder, DrmModeEncoderDeleter>;

struct DrmModeConnectorDeleter {
  void operator()(drmModeConnector* connector) {
    drmModeFreeConnector(connector);
  }
};
using ScopedDrmModeConnectorPtr =
    std::unique_ptr<drmModeConnector, DrmModeConnectorDeleter>;

struct DrmModeFBDeleter {
  void operator()(drmModeFB* fb) {
    drmModeFreeFB(fb);
  }
};
using ScopedDrmModeFBPtr = std::unique_ptr<drmModeFB, DrmModeFBDeleter>;

struct DrmModeFB2Deleter {
  void operator()(drmModeFB2* fb2) {
    drmModeFreeFB2(fb2);
  }
};
using ScopedDrmModeFB2Ptr = std::unique_ptr<drmModeFB2, DrmModeFB2Deleter>;

struct GbmDeviceDeleter {
  void operator()(gbm_device* device) {
    gbm_device_destroy(device);
  }
};
using ScopedGbmDevicePtr = std::unique_ptr<gbm_device, GbmDeviceDeleter>;

struct GbmBoDeleter {
  void operator()(gbm_bo* bo) {
    gbm_bo_destroy(bo);
  }
};
using ScopedGbmBoPtr = std::unique_ptr<gbm_bo, GbmBoDeleter>;

}  // namespace screenshot

#endif  // SCREENSHOT_PTR_UTIL_H_
