Krita Source Code Documentation
Loading...
Searching...
No Matches
kis_pointer_utils.h File Reference
#include <QSharedPointer>
#include <QForeach>

Go to the source code of this file.

Classes

struct  KisSharedPointerTraits< T >
 
struct  KisSharedPointerTraits< KisPinnedSharedPtr< T > >
 
struct  KisSharedPointerTraits< KisSharedPtr< T > >
 
struct  KisSharedPointerTraits< QSharedPointer< T > >
 

Functions

template<typename R , typename T , template< typename U > class Container>
Container< RimplicitCastList (const Container< T > &list)
 
template<template< class > class Container, class T >
Container< QWeakPointer< T > > listStrongToWeak (const Container< QSharedPointer< T > > &container)
 
template<class A , template< class C > class List>
List< QSharedPointer< A > > listToQShared (const List< A * > list)
 
template<template< class > class Container, class T >
Container< QSharedPointer< T > > listWeakToStrong (const Container< QWeakPointer< T > > &container, bool allOrNothing=true)
 
template<typename T >
T * removeSharedPointer (KisPinnedSharedPtr< T > value)
 
template<typename T >
T * removeSharedPointer (KisSharedPtr< T > value)
 
template<typename T >
T * removeSharedPointer (QSharedPointer< T > value)
 
template<typename T >
T * removeSharedPointer (T *value)
 
template<class T >
QSharedPointer< T > toQShared (T *ptr)
 

Function Documentation

◆ implicitCastList()

template<typename R , typename T , template< typename U > class Container>
Container< R > implicitCastList ( const Container< T > & list)
inline

Converts a list of objects with type T into a list of objects of type R. The conversion is done implicitly, therefore the c-tor of type R should support it. The main usage case is conversion of pointers in "descendant- to-parent" way.

Definition at line 83 of file kis_pointer_utils.h.

84{
85 Container<R> result;
86
87 Q_FOREACH(const T &item, list) {
88 result.append(item);
89 }
90 return result;
91}

◆ listStrongToWeak()

template<template< class > class Container, class T >
Container< QWeakPointer< T > > listStrongToWeak ( const Container< QSharedPointer< T > > & container)

Convert a list of strong pointers into a list of weak pointers

Definition at line 40 of file kis_pointer_utils.h.

41{
42 Container<QWeakPointer<T> > result;
43 Q_FOREACH (QSharedPointer<T> v, container) {
44 result << v;
45 }
46 return result;
47}
qreal v

References v.

◆ listToQShared()

template<class A , template< class C > class List>
List< QSharedPointer< A > > listToQShared ( const List< A * > list)

Convert a list of raw pointers into a list of shared pointers

Definition at line 27 of file kis_pointer_utils.h.

27 {
28 List<QSharedPointer<A>> newList;
29 Q_FOREACH(A* value, list) {
30 newList.append(toQShared(value));
31 }
32 return newList;
33}
float value(const T *src, size_t ch)
QSharedPointer< T > toQShared(T *ptr)

References A, toQShared(), and value().

◆ listWeakToStrong()

template<template< class > class Container, class T >
Container< QSharedPointer< T > > listWeakToStrong ( const Container< QWeakPointer< T > > & container,
bool allOrNothing = true )

Convert a list of weak pointers into a list of strong pointers

WARNING: By default, uses "all or nothing" rule. If at least one of the weak pointers is invalid, returns an empty list! Even though some other pointer can still be converted correctly.

Definition at line 58 of file kis_pointer_utils.h.

60{
61 Container<QSharedPointer<T> > result;
62 Q_FOREACH (QWeakPointer<T> v, container) {
63 QSharedPointer<T> strong(v);
64 if (!strong && allOrNothing) {
65 result.clear();
66 return result;
67 }
68
69 if (strong) {
70 result << strong;
71 }
72 }
73 return result;
74}

References v.

◆ removeSharedPointer() [1/4]

template<typename T >
T * removeSharedPointer ( KisPinnedSharedPtr< T > value)

Definition at line 115 of file kis_pointer_utils.h.

116{
117 return value.data();
118}

References value().

◆ removeSharedPointer() [2/4]

template<typename T >
T * removeSharedPointer ( KisSharedPtr< T > value)

Definition at line 121 of file kis_pointer_utils.h.

122{
123 return value.data();
124}

References value().

◆ removeSharedPointer() [3/4]

template<typename T >
T * removeSharedPointer ( QSharedPointer< T > value)

Definition at line 127 of file kis_pointer_utils.h.

128{
129 return value.data();
130}

References value().

◆ removeSharedPointer() [4/4]

template<typename T >
T * removeSharedPointer ( T * value)

Definition at line 109 of file kis_pointer_utils.h.

110{
111 return value;
112}

References value().

◆ toQShared()

template<class T >
QSharedPointer< T > toQShared ( T * ptr)
inline

Convert a raw pointer into a shared pointer

Definition at line 19 of file kis_pointer_utils.h.

19 {
20 return QSharedPointer<T>(ptr);
21}