| /* |
| * Copyright 2022 The WebRTC project authors. All Rights Reserved. |
| * |
| * Use of this source code is governed by a BSD-style license |
| * that can be found in the LICENSE file in the root of the source |
| * tree. An additional intellectual property rights grant can be found |
| * in the file PATENTS. All contributing project authors may |
| * be found in the AUTHORS file in the root of the source tree. |
| */ |
| |
| #ifndef MODULES_PORTAL_SCOPED_GLIB_H_ |
| #define MODULES_PORTAL_SCOPED_GLIB_H_ |
| |
| #include <gio/gio.h> |
| |
| #include "rtc_base/checks.h" |
| #include "rtc_base/system/rtc_export_template.h" |
| |
| namespace webrtc { |
| |
| template <class T> |
| class Scoped { |
| public: |
| Scoped() {} |
| explicit Scoped(T* val) { ptr_ = val; } |
| ~Scoped() { RTC_DCHECK_NOTREACHED(); } |
| |
| T* operator->() const { return ptr_; } |
| |
| explicit operator bool() const { return ptr_ != nullptr; } |
| |
| bool operator!() const { return ptr_ == nullptr; } |
| |
| T* get() const { return ptr_; } |
| |
| T** receive() { |
| RTC_CHECK(!ptr_); |
| return &ptr_; |
| } |
| |
| Scoped& operator=(T* val) { |
| RTC_DCHECK(val); |
| ptr_ = val; |
| return *this; |
| } |
| |
| protected: |
| T* ptr_ = nullptr; |
| }; |
| |
| template <> |
| Scoped<GError>::~Scoped(); |
| template <> |
| Scoped<char>::~Scoped(); |
| template <> |
| Scoped<GVariant>::~Scoped(); |
| template <> |
| Scoped<GVariantIter>::~Scoped(); |
| template <> |
| Scoped<GDBusMessage>::~Scoped(); |
| template <> |
| Scoped<GUnixFDList>::~Scoped(); |
| |
| extern template class RTC_EXPORT_TEMPLATE_DECLARE(RTC_EXPORT) Scoped<GError>; |
| extern template class RTC_EXPORT_TEMPLATE_DECLARE(RTC_EXPORT) Scoped<char>; |
| extern template class RTC_EXPORT_TEMPLATE_DECLARE(RTC_EXPORT) Scoped<GVariant>; |
| extern template class RTC_EXPORT_TEMPLATE_DECLARE( |
| RTC_EXPORT) Scoped<GVariantIter>; |
| extern template class RTC_EXPORT_TEMPLATE_DECLARE( |
| RTC_EXPORT) Scoped<GDBusMessage>; |
| extern template class RTC_EXPORT_TEMPLATE_DECLARE( |
| RTC_EXPORT) Scoped<GUnixFDList>; |
| |
| } // namespace webrtc |
| |
| #endif // MODULES_PORTAL_SCOPED_GLIB_H_ |