BIMHome v1.0.0
BIMHome接口文档说明
Convert.h
浏览该文件的文档.
1/************************************************************************
2* @file Convert.h
3*
4* @brief
5*
6* @details
7*
8* @author
9*
10* @version
11*
12* @date
13*
14* @license 北京华科软科技有限公司
15*
16*************************************************************************/
17
18#ifndef BIMHOMEAPP_APP_CONVERT_H
19#define BIMHOMEAPP_APP_CONVERT_H
20
21#include <map>
22#include <set>
23#include <unordered_map>
24#include <memory>
25#include <iterator>
26
27namespace App
28{
29
38 template<typename C, typename P>
39 void convertToIF(const std::vector<C*>& childs, std::vector<P*>& parents)
40 {
41 auto it = childs.begin();
42 while (it != childs.end()) {
43 parents.push_back(*it);
44 it++;
45 }
46 }
47
56 template<typename C, typename P>
57 void convertFromIF(const std::vector<P*>& parents, std::vector<C*>& childs)
58 {
59 auto it = parents.begin();
60 while (it != parents.end()) {
61 C* pObject = dynamic_cast<C*>(*it);
62 if (pObject)
63 childs.push_back(pObject);
64 it++;
65 }
66 }
67
76 template<typename C, typename P>
77 void convertToIF(const std::set<C*>& childs, std::set<P*>& parents)
78 {
79 auto it = childs.begin();
80 while (it != childs.end()) {
81 parents.insert(*it);
82 it++;
83 }
84 }
85
94 template<typename C, typename P>
95 void convertFromIF(const std::set<P*>& parents, std::set<C*>& childs)
96 {
97 auto it = parents.begin();
98 while (it != parents.end()) {
99 C* pObject = dynamic_cast<C*>(*it);
100 if (pObject)
101 childs.insert(pObject);
102 it++;
103 }
104 }
105
113 template<typename C>
114 C* convertToPtr(const std::shared_ptr<C>& obj) {
115 return obj.get();
116 }
117
125 template<typename C>
126 std::shared_ptr<C> convertToSharedPtr(C* obj) {
127 return std::shared_ptr<C>(obj);
128 }
129
138 template<typename C, typename P>
139 void convertToIF(const std::vector<std::shared_ptr<C>>& childs, std::vector<std::shared_ptr<P>>& parents)
140 {
141 auto it = childs.begin();
142 while (it != childs.end()) {
143 parents.push_back(*it);
144 it++;
145 }
146 }
147
156 template<typename C, typename P>
157 void convertFromIF(const std::vector<std::shared_ptr<P>>& parents, std::vector<std::shared_ptr<C>>& childs)
158 {
159 auto it = parents.begin();
160 while (it != parents.end()) {
161 std::shared_ptr<C> pObject = std::dynamic_pointer_cast<C>(*it);
162 if (pObject)
163 childs.push_back(pObject);
164 it++;
165 }
166 }
167
175 template <typename T>
176 std::vector<std::shared_ptr<T>> convertToSharedPtrVector(const std::vector<T*>& ptrVec) {
177 std::vector<std::shared_ptr<T>> sharedPtrVec;
178 sharedPtrVec.reserve(ptrVec.size());
179 for (T* rawPtr : ptrVec) {
180 sharedPtrVec.emplace_back(rawPtr);
181 }
182 return sharedPtrVec;
183 }
184
192 template <typename T>
193 std::vector<T*> convertToPtrVector(const std::vector<std::shared_ptr<T>>& sharedPtrVec) {
194 std::vector<T*> ptrVec;
195 ptrVec.reserve(sharedPtrVec.size());
196
197 std::transform(sharedPtrVec.begin(), sharedPtrVec.end(),
198 std::back_inserter(ptrVec),
199 [](const std::shared_ptr<T>& sp) {
200 return sp.get();
201 });
202
203 return ptrVec;
204 }
205
206
207}
208
209#endif // !BIMHOMEAPP_APP_COMMON_H
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