forked from qt-creator/qt-creator
Utils: Converter to raw pointer and references
Sometimes you want to get raw pointer container from smart pointer container and reference container from value container. Change-Id: Ia018d572ac0a7bf742f3937dc38ee30670a3ca73 Reviewed-by: Eike Ziller <eike.ziller@qt.io>
This commit is contained in:
@@ -30,6 +30,7 @@
|
||||
#include <qcompilerdetection.h> // for Q_REQUIRED_RESULT
|
||||
|
||||
#include <algorithm>
|
||||
#include <memory>
|
||||
#include <tuple>
|
||||
|
||||
#include <QObject>
|
||||
@@ -658,4 +659,60 @@ inline void reverseForeach(const Container &c, const Op &operation)
|
||||
operation(*it);
|
||||
}
|
||||
|
||||
//////////////////
|
||||
// toRawPointer
|
||||
/////////////////
|
||||
template <typename ResultContainer,
|
||||
typename SourceContainer>
|
||||
ResultContainer toRawPointer(const SourceContainer &sources)
|
||||
{
|
||||
return transform<ResultContainer>(sources, [] (const auto &pointer) { return pointer.get(); });
|
||||
}
|
||||
|
||||
template <template<typename...> class ResultContainer,
|
||||
template<typename...> class SourceContainer,
|
||||
typename... SCArgs>
|
||||
auto toRawPointer(const SourceContainer<SCArgs...> &sources)
|
||||
{
|
||||
return transform<ResultContainer, const SourceContainer<SCArgs...> &>(sources, [] (const auto &pointer) { return pointer.get(); });
|
||||
}
|
||||
|
||||
template <class SourceContainer>
|
||||
auto toRawPointer(const SourceContainer &sources)
|
||||
{
|
||||
return transform(sources, [] (const auto &pointer) { return pointer.get(); });
|
||||
}
|
||||
|
||||
//////////////////
|
||||
// toReferences
|
||||
/////////////////
|
||||
template <template<typename...> class ResultContainer,
|
||||
typename SourceContainer>
|
||||
auto toReferences(SourceContainer &sources)
|
||||
{
|
||||
return transform<ResultContainer>(sources, [] (auto &value) { return std::ref(value); });
|
||||
}
|
||||
|
||||
template <typename SourceContainer>
|
||||
auto toReferences(SourceContainer &sources)
|
||||
{
|
||||
return transform(sources, [] (auto &value) { return std::ref(value); });
|
||||
}
|
||||
|
||||
//////////////////
|
||||
// toConstReferences
|
||||
/////////////////
|
||||
template <template<typename...> class ResultContainer,
|
||||
typename SourceContainer>
|
||||
auto toConstReferences(const SourceContainer &sources)
|
||||
{
|
||||
return transform<ResultContainer>(sources, [] (const auto &value) { return std::cref(value); });
|
||||
}
|
||||
|
||||
template <typename SourceContainer>
|
||||
auto toConstReferences(const SourceContainer &sources)
|
||||
{
|
||||
return transform(sources, [] (const auto &value) { return std::cref(value); });
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user