diff options
Diffstat (limited to 'third_party/libwebrtc/modules/portal/scoped_glib.h')
-rw-r--r-- | third_party/libwebrtc/modules/portal/scoped_glib.h | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/third_party/libwebrtc/modules/portal/scoped_glib.h b/third_party/libwebrtc/modules/portal/scoped_glib.h new file mode 100644 index 0000000000..d97e47ae1f --- /dev/null +++ b/third_party/libwebrtc/modules/portal/scoped_glib.h @@ -0,0 +1,76 @@ +/* + * 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_ |