18#ifndef BIMHOMEAPP_APP_CONVERT_H
19#define BIMHOMEAPP_APP_CONVERT_H
23#include <unordered_map>
38 template<
typename C,
typename P>
39 void convertToIF(
const std::vector<C*>& childs, std::vector<P*>& parents)
41 auto it = childs.begin();
42 while (it != childs.end()) {
43 parents.push_back(*it);
56 template<
typename C,
typename P>
57 void convertFromIF(
const std::vector<P*>& parents, std::vector<C*>& childs)
59 auto it = parents.begin();
60 while (it != parents.end()) {
61 C* pObject =
dynamic_cast<C*
>(*it);
63 childs.push_back(pObject);
76 template<
typename C,
typename P>
77 void convertToIF(
const std::set<C*>& childs, std::set<P*>& parents)
79 auto it = childs.begin();
80 while (it != childs.end()) {
94 template<
typename C,
typename P>
97 auto it = parents.begin();
98 while (it != parents.end()) {
99 C* pObject =
dynamic_cast<C*
>(*it);
101 childs.insert(pObject);
127 return std::shared_ptr<C>(obj);
138 template<
typename C,
typename P>
139 void convertToIF(
const std::vector<std::shared_ptr<C>>& childs, std::vector<std::shared_ptr<P>>& parents)
141 auto it = childs.begin();
142 while (it != childs.end()) {
143 parents.push_back(*it);
156 template<
typename C,
typename P>
157 void convertFromIF(
const std::vector<std::shared_ptr<P>>& parents, std::vector<std::shared_ptr<C>>& childs)
159 auto it = parents.begin();
160 while (it != parents.end()) {
161 std::shared_ptr<C> pObject = std::dynamic_pointer_cast<C>(*it);
163 childs.push_back(pObject);
175 template <
typename T>
177 std::vector<std::shared_ptr<T>> sharedPtrVec;
178 sharedPtrVec.reserve(ptrVec.size());
179 for (
T* rawPtr : ptrVec) {
180 sharedPtrVec.emplace_back(rawPtr);
192 template <
typename T>
194 std::vector<T*> ptrVec;
195 ptrVec.reserve(sharedPtrVec.size());
197 std::transform(sharedPtrVec.begin(), sharedPtrVec.end(),
198 std::back_inserter(ptrVec),
199 [](
const std::shared_ptr<T>& sp) {
C
Definition ISnapProcessedBase.h:49
T
Definition ISnapProcessedBase.h:49
void convertFromIF(const std::vector< P * > &parents, std::vector< C * > &childs)
将父类指针的向量转换为子类指针的向量
Definition Convert.h:57
void convertToIF(const std::vector< C * > &childs, std::vector< P * > &parents)
将子类指针的向量转换为父类指针的向量
Definition Convert.h:39
std::vector< std::shared_ptr< T > > convertToSharedPtrVector(const std::vector< T * > &ptrVec)
将原始指针向量转换为智能指针向量
Definition Convert.h:176
std::vector< T * > convertToPtrVector(const std::vector< std::shared_ptr< T > > &sharedPtrVec)
将智能指针向量转换为原始指针向量
Definition Convert.h:193
C * convertToPtr(const std::shared_ptr< C > &obj)
将智能指针转换为原始指针
Definition Convert.h:114
std::shared_ptr< C > convertToSharedPtr(C *obj)
将原始指针转换为智能指针
Definition Convert.h:126
Definition BaseFigureFactory.h:28