initial commit
Signed-off-by: Peter Siegmund <mars3142@noreply.mars3142.dev>
This commit is contained in:
87
libs/wxWidgets-3.3.1/include/wx/gtk/private/variant.h
Normal file
87
libs/wxWidgets-3.3.1/include/wx/gtk/private/variant.h
Normal file
@@ -0,0 +1,87 @@
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
// Name: gtk/private/variant.h
|
||||
// Purpose: RAII wrapper for working with GVariant
|
||||
// Author: Vadim Zeitlin
|
||||
// Created: 2024-04-11
|
||||
// Copyright: (c) 2024 Vadim Zeitlin <vadim@wxwidgets.org>
|
||||
// Licence: wxWindows licence
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#ifndef _WX_GTK_PRIVATE_VARIANT_H_
|
||||
#define _WX_GTK_PRIVATE_VARIANT_H_
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// wxGtkVariant: RAII wrapper for GVariant
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
class wxGtkVariant
|
||||
{
|
||||
public:
|
||||
wxGtkVariant() = default;
|
||||
|
||||
explicit wxGtkVariant(GVariant* variant) : m_variant(variant) { }
|
||||
|
||||
wxGtkVariant(wxGtkVariant&& other) noexcept
|
||||
: m_variant(other.m_variant)
|
||||
{
|
||||
other.m_variant = nullptr;
|
||||
}
|
||||
|
||||
wxGtkVariant& operator=(wxGtkVariant&& other) noexcept
|
||||
{
|
||||
if ( this != &other )
|
||||
{
|
||||
m_variant = other.m_variant;
|
||||
other.m_variant = nullptr;
|
||||
}
|
||||
|
||||
return *this;
|
||||
}
|
||||
|
||||
~wxGtkVariant()
|
||||
{
|
||||
if ( m_variant )
|
||||
g_variant_unref(m_variant);
|
||||
}
|
||||
|
||||
// Check if we have a valid GVariant.
|
||||
explicit operator bool() const { return m_variant != nullptr; }
|
||||
|
||||
// Return the pointer to the internally stored pointer. This should only be
|
||||
// used to initialize the object by passing it to some GTK function.
|
||||
GVariant **ByRef()
|
||||
{
|
||||
wxASSERT_MSG( !m_variant, "shouldn't be already initialized" );
|
||||
|
||||
return &m_variant;
|
||||
}
|
||||
|
||||
// Wrappers for a few functions used in our code.
|
||||
guint32 GetUint32() const { return g_variant_get_uint32(m_variant); }
|
||||
wxGtkVariant GetVariant() const { return wxGtkVariant{g_variant_get_variant(m_variant)}; }
|
||||
|
||||
// Wrapper for generic g_variant_get(): this is still as type-unsafe as the
|
||||
// original C function.
|
||||
template <typename... Args>
|
||||
void Get(const gchar* format_string, Args*... args) const
|
||||
{
|
||||
g_variant_get(m_variant, format_string, args...);
|
||||
}
|
||||
|
||||
// Yield ownership of the GVariant to the caller.
|
||||
GVariant* Release()
|
||||
{
|
||||
GVariant* const variant = m_variant;
|
||||
m_variant = nullptr;
|
||||
return variant;
|
||||
}
|
||||
|
||||
private:
|
||||
GVariant* m_variant = nullptr;
|
||||
|
||||
// For now we just don't support copying at all for simplicity, it could be
|
||||
// implemented later if needed.
|
||||
wxDECLARE_NO_COPY_CLASS(wxGtkVariant);
|
||||
};
|
||||
|
||||
#endif // _WX_GTK_PRIVATE_VARIANT_H_
|
||||
Reference in New Issue
Block a user