glibmm 2.28.1
Public Types | Static Public Member Functions

Glib::ArrayHandler< T, Tr > Class Template Reference

A utility for converting between std::vector and plain C arrays. More...

#include <glibmm/vectorutils.h>

List of all members.

Public Types

typedef Tr::CType CType
typedef T CppType
typedef std::vector< CppTypeVectorType
typedef
Glib::Container_Helpers::ArrayKeeper
< Tr > 
ArrayKeeperType
typedef
Glib::Container_Helpers::ArrayIterator
< Tr > 
ArrayIteratorType

Static Public Member Functions

static VectorType array_to_vector (const CType* array, size_t array_size, Glib::OwnershipType ownership)
static VectorType array_to_vector (const CType* array, Glib::OwnershipType ownership)
static ArrayKeeperType vector_to_array (const VectorType& vector)

Detailed Description

template<typename T, typename Tr = Glib::Container_Helpers::TypeTraits<T>>
class Glib::ArrayHandler< T, Tr >

A utility for converting between std::vector and plain C arrays.

This would normally only be used by glibmm or gtkmm itself, or similar libraries that wrap C APIs.

For instance:

 std::vector<Glib::ustring> PixbufFormat::get_mime_types() const
 {
   return Glib::ArrayHandler<Glib::ustring>::array_to_vector(gdk_pixbuf_format_get_mime_types(const_cast<GdkPixbufFormat*>(gobj())), Glib::OWNERSHIP_DEEP);
 }

or

 void Display::store_clipboard(const Glib::RefPtr<Gdk::Window>& clipboard_window, guint32 time_, const std::vector<Glib::ustring>& targets)
 {
   if (!targets.size ())
   {
     gdk_display_store_clipboard(gobj(),
                                 Glib::unwrap (clipboard_window),
                                 time_,
                                 Glib::ArrayHandler<Glib::ustring, AtomUstringTraits>::vector_to_array(targets).data (),
                                 targets.size ());
   }
 }

Note that usage below is wrong - data() returns a pointer to data owned by a temporary ArrayKeeper returned by vector_to_array(), which is destroyed at the end of this instruction. For details, see Glib::ArrayKeeper.


Member Typedef Documentation

template <typename T , typename Tr = Glib::Container_Helpers::TypeTraits<T>>
typedef Glib::Container_Helpers::ArrayIterator<Tr> Glib::ArrayHandler< T, Tr >::ArrayIteratorType
template <typename T , typename Tr = Glib::Container_Helpers::TypeTraits<T>>
typedef Glib::Container_Helpers::ArrayKeeper<Tr> Glib::ArrayHandler< T, Tr >::ArrayKeeperType
template <typename T , typename Tr = Glib::Container_Helpers::TypeTraits<T>>
typedef T Glib::ArrayHandler< T, Tr >::CppType
template <typename T , typename Tr = Glib::Container_Helpers::TypeTraits<T>>
typedef Tr::CType Glib::ArrayHandler< T, Tr >::CType
template <typename T , typename Tr = Glib::Container_Helpers::TypeTraits<T>>
typedef std::vector<CppType> Glib::ArrayHandler< T, Tr >::VectorType

Member Function Documentation

template <typename T , typename Tr = Glib::Container_Helpers::TypeTraits<T>>
static VectorType Glib::ArrayHandler< T, Tr >::array_to_vector ( const CType array,
size_t  array_size,
Glib::OwnershipType  ownership 
) [static]
template <typename T , typename Tr = Glib::Container_Helpers::TypeTraits<T>>
static VectorType Glib::ArrayHandler< T, Tr >::array_to_vector ( const CType array,
Glib::OwnershipType  ownership 
) [static]
template <typename T , typename Tr = Glib::Container_Helpers::TypeTraits<T>>
static ArrayKeeperType Glib::ArrayHandler< T, Tr >::vector_to_array ( const VectorType vector) [static]