// file : odb/qt/smart-ptr/pointer-traits.hxx // copyright : Copyright (c) 2009-2013 Code Synthesis Tools CC // license : GNU GPL v2; see accompanying LICENSE file #ifndef ODB_QT_SMART_PTR_POINTER_TRAITS_HXX #define ODB_QT_SMART_PTR_POINTER_TRAITS_HXX #include #include #include #include #include namespace odb { // Specialization for QSharedPointer. // template class pointer_traits > { public: static const pointer_kind kind = pk_shared; static const bool lazy = false; typedef T element_type; typedef QSharedPointer pointer_type; typedef QSharedPointer const_pointer_type; typedef typename odb::details::meta::remove_const::result unrestricted_element_type; typedef QSharedPointer unrestricted_pointer_type; typedef smart_ptr_guard guard; static element_type* get_ptr (const pointer_type& p) { return p.data (); } static element_type& get_ref (const pointer_type& p) { return *p; } static bool null_ptr (const pointer_type& p) { return !p; } static unrestricted_pointer_type const_pointer_cast (const pointer_type& p) { return qSharedPointerConstCast (p); } template static QSharedPointer static_pointer_cast (const pointer_type& p) { return qSharedPointerCast (p); } template static QSharedPointer dynamic_pointer_cast (const pointer_type& p) { return qSharedPointerDynamicCast (p); } public: static void* allocate (std::size_t n) { return operator new (n); } static void free (void* p) { operator delete (p); } }; // Specialization for QWeakPointer. // template class pointer_traits > { public: static const pointer_kind kind = pk_weak; static const bool lazy = false; typedef T element_type; typedef QWeakPointer pointer_type; typedef QSharedPointer strong_pointer_type; static strong_pointer_type lock (const pointer_type& p) { return p.toStrongRef (); } }; } #include #endif // ODB_QT_SMART_PTR_POINTER_TRAITS_HXX