Changeset 1918
- Timestamp:
- 07/16/20 17:18:01 (4 years ago)
- Location:
- XIOS/dev/dev_ym/XIOS_COUPLING/src
- Files:
-
- 44 added
- 18 deleted
- 11 edited
Legend:
- Unmodified
- Added
- Removed
-
XIOS/dev/dev_ym/XIOS_COUPLING/src/array_new.hpp
r1875 r1918 567 567 virtual bool isEmpty(void) const { return !initialized; } 568 568 virtual size_t size(void) const { return size(this->numElements()); } 569 virtual std::vector<T_numtype> getVector(void) { return vector<T_numtype>(this->dataFirst(),this->dataFirst()+this->numElements()) ;} 569 570 static size_t size(sizeType numElements) { return (N_rank + 1) * sizeof(int) + sizeof(size_t) + numElements * sizeof(T_numtype); } 570 571 -
XIOS/dev/dev_ym/XIOS_COUPLING/src/context_client.hpp
r1853 r1918 67 67 int getRemoteSize(void) {return serverSize;} 68 68 int getServerSize(void) {return serverSize;} 69 MPI_Comm getIntraComm(void) {return intraComm ;} 70 int getIntraCommSize(void) {return clientSize ;} 71 int getIntraCommRank(void) {return clientRank ;} 69 72 70 73 /*! set the associated server (dual chanel client/server) */ -
XIOS/dev/dev_ym/XIOS_COUPLING/src/filter/source_filter.cpp
r1869 r1918 43 43 else 44 44 { 45 if (mask) 46 grid->maskField(data, packet->data); 47 else 48 grid->inputField(data, packet->data); 45 if (mask) grid->maskField(data, packet->data); 46 else grid->inputField(data, packet->data); 49 47 } 50 48 // Convert missing values to NaN -
XIOS/dev/dev_ym/XIOS_COUPLING/src/node/axis.cpp
r1875 r1918 333 333 this->checkData(); 334 334 this->checkLabel(); 335 initializeLocalElement() ; 336 addFullView() ; 337 addWorkflowView() ; 338 addModelView() ; 339 340 checkAttributes_done_ = true ; 341 } 342 CATCH_DUMP_ATTR 343 344 345 346 void CAxis::initializeLocalElement(void) 347 { 348 // after checkAttribute index of size n 349 int rank = CContext::getCurrent()->getIntraCommRank() ; 335 350 336 checkAttributes_done_ = true ; 337 } 338 CATCH_DUMP_ATTR 351 CArray<size_t,1> ind(n) ; 352 for (int i=0;i<n;i++) ind(i)=index(i) ; 353 354 localElement_ = new CLocalElement(rank, n_glo, ind) ; 355 } 356 357 void CAxis::addFullView(void) 358 { 359 CArray<int,1> index(n) ; 360 for(int i=0; i<n ; i++) index(i)=i ; 361 localElement_ -> addView(CElementView::FULL, index) ; 362 } 363 364 void CAxis::addWorkflowView(void) 365 { 366 // mask + data are included into data_index 367 int nk=data_index.numElements() ; 368 int nMask=0 ; 369 for(int k=0;k<nk;k++) if (data_index(k)>=0 && data_index(k)<n) nMask++ ; 370 371 CArray<int,1> index(nMask) ; 372 nMask=0 ; 373 for(int k=0;k<nk;k++) 374 if (data_index(k)>=0 && data_index(k)<n) 375 { 376 index(nMask) = data_index(k) ; 377 nMask++ ; 378 } 379 localElement_ -> addView(CElementView::WORKFLOW, index) ; 380 } 381 382 void CAxis::addModelView(void) 383 { 384 // information for model view is stored in data_index 385 localElement_->addView(CElementView::MODEL, data_index) ; 386 } 387 388 void CAxis::computeModelToWorkflowConnector(void) 389 { 390 CLocalView* srcView=getLocalView(CElementView::MODEL) ; 391 CLocalView* dstView=getLocalView(CElementView::WORKFLOW) ; 392 modelToWorkflowConnector_ = new CLocalConnector(srcView, dstView); 393 modelToWorkflowConnector_->computeConnector() ; 394 } 339 395 340 396 /*! -
XIOS/dev/dev_ym/XIOS_COUPLING/src/node/axis.hpp
r1875 r1918 16 16 #include "transformation.hpp" 17 17 #include "transformation_enum.hpp" 18 #include "element.hpp" 19 #include "local_connector.hpp" 18 20 19 21 namespace xios { … … 222 224 static bool dummyTransformationMapList_; 223 225 226 227 228 private: 229 CLocalElement* localElement_ = nullptr ; 230 void initializeLocalElement(void) ; 231 public: 232 CLocalElement* getLocalElement(void) { if (localElement_==nullptr) initializeLocalElement() ; return localElement_ ; } 233 CLocalView* getLocalView(CElementView::type type) { return getLocalElement()->getView(type) ;} 234 private: 235 void addFullView(void) ; 236 void addWorkflowView(void) ; 237 void addModelView(void) ; 238 239 private: 240 CLocalConnector* modelToWorkflowConnector_ ; 241 void computeModelToWorkflowConnector(void) ; 242 public: 243 CLocalConnector* getModelToWorkflowConnector(void) { if (modelToWorkflowConnector_==nullptr) computeModelToWorkflowConnector() ; return modelToWorkflowConnector_ ;} 244 245 224 246 DECLARE_REF_FUNC(Axis,axis) 225 247 }; // class CAxis -
XIOS/dev/dev_ym/XIOS_COUPLING/src/node/domain.cpp
r1879 r1918 18 18 #include "server_distribution_description.hpp" 19 19 #include "client_server_mapping_distributed.hpp" 20 #include "local_connector.hpp" 21 #include "grid_local_connector.hpp" 22 #include "remote_connector.hpp" 23 #include "gatherer_connector.hpp" 24 #include "scatterer_connector.hpp" 25 #include "grid_scatterer_connector.hpp" 26 #include "grid_gatherer_connector.hpp" 27 28 29 20 30 21 31 #include <algorithm> … … 1734 1744 this->computeLocalMask() ; 1735 1745 this->completeLonLatClient(); 1746 this->initializeLocalElement() ; 1747 this->addFullView() ; 1748 this->addWorkflowView() ; 1749 this->addModelView() ; 1750 // testing ? 1751 CLocalView* local = localElement_->getView(CElementView::WORKFLOW) ; 1752 CLocalView* model = localElement_->getView(CElementView::MODEL) ; 1753 1754 CLocalConnector test1(model, local) ; 1755 test1.computeConnector() ; 1756 CLocalConnector test2(local, model) ; 1757 test2.computeConnector() ; 1758 CGridLocalConnector gridTest1(vector<CLocalConnector*>{&test1}) ; 1759 CGridLocalConnector gridTest2(vector<CLocalConnector*>{&test2}) ; 1760 1761 1762 CArray<int,1> out1 ; 1763 CArray<int,1> out2 ; 1764 test1.transfer(data_i_index,out1,-111) ; 1765 test2.transfer(out1,out2,-111) ; 1766 1767 out1 = 0 ; 1768 out2 = 0 ; 1769 gridTest1.transfer(data_i_index,out1,-111) ; 1770 gridTest2.transfer(out1, out2,-111) ; 1771 1736 1772 this->checkAttributes_done_ = true; 1737 1773 } 1738 1774 CATCH_DUMP_ATTR 1775 1776 1777 void CDomain::initializeLocalElement(void) 1778 { 1779 // after checkDomain i_index and j_index of size (ni*nj) 1780 int nij = ni*nj ; 1781 CArray<size_t, 1> ij_index(ni*nj) ; 1782 for(int ij=0; ij<nij ; ij++) ij_index(ij) = i_index(ij)+j_index(ij)*ni_glo ; 1783 int rank = CContext::getCurrent()->getIntraCommRank() ; 1784 localElement_ = new CLocalElement(rank, ni_glo*nj_glo, ij_index) ; 1785 } 1786 1787 void CDomain::addFullView(void) 1788 { 1789 CArray<int,1> index(ni*nj) ; 1790 int nij=ni*nj ; 1791 for(int ij=0; ij<nij ; ij++) index(ij)=ij ; 1792 localElement_ -> addView(CElementView::FULL, index) ; 1793 } 1794 1795 void CDomain::addWorkflowView(void) 1796 { 1797 // information for workflow view is stored in localMask 1798 int nij=ni*nj ; 1799 int nMask=0 ; 1800 for(int ij=0; ij<nij ; ij++) if (localMask(ij)) nMask++ ; 1801 CArray<int,1> index(nMask) ; 1802 1803 nMask=0 ; 1804 for(int ij=0; ij<nij ; ij++) 1805 if (localMask(ij)) 1806 { 1807 index(nMask)=ij ; 1808 nMask++ ; 1809 } 1810 localElement_ -> addView(CElementView::WORKFLOW, index) ; 1811 } 1812 1813 void CDomain::addModelView(void) 1814 { 1815 // information for model view is stored in data_i_index/data_j_index 1816 // very weird, do not mix data_i_index and data_i_begin => in future only keep data_i_index 1817 int dataSize = data_i_index.numElements() ; 1818 CArray<int,1> index(dataSize) ; 1819 int i,j ; 1820 for(int k=0;k<dataSize;k++) 1821 { 1822 i=data_i_index(k)+data_ibegin ; // bad 1823 j=data_j_index(k)+data_jbegin ; // bad 1824 if (i>=0 && i<ni && j>=0 && j<nj) index(k)=i+j*ni ; 1825 else index(k)=-1 ; 1826 } 1827 localElement_->addView(CElementView::MODEL, index) ; 1828 } 1829 1830 void CDomain::computeModelToWorkflowConnector(void) 1831 { 1832 CLocalView* srcView=getLocalView(CElementView::MODEL) ; 1833 CLocalView* dstView=getLocalView(CElementView::WORKFLOW) ; 1834 modelToWorkflowConnector_ = new CLocalConnector(srcView, dstView); 1835 modelToWorkflowConnector_->computeConnector() ; 1836 } 1837 1739 1838 1740 1839 //---------------------------------------------------------------- … … 2099 2198 this->sendArea(client); 2100 2199 this->sendDataIndex(client); 2200 2201 // test new connector functionnality 2202 this->sendDomainDistribution(client) ; 2101 2203 } 2102 2204 … … 2129 2231 this->createAlias(domainId) ; 2130 2232 } 2233 2234 2235 void CDomain::sendDomainDistribution(CContextClient* client, const string& domainId) 2236 TRY 2237 { 2238 string serverDomainId = domainId.empty() ? this->getId() : domainId ; 2239 CContext* context = CContext::getCurrent(); 2240 int nbServer = client->serverSize; 2241 std::vector<int> nGlobDomain(2); 2242 nGlobDomain[0] = this->ni_glo; 2243 nGlobDomain[1] = this->nj_glo; 2244 2245 CServerDistributionDescription serverDescription(nGlobDomain, nbServer); 2246 int distributedPosition ; 2247 if (isUnstructed_) distributedPosition = 0 ; 2248 else distributedPosition = 1 ; 2249 2250 serverDescription.computeServerDistribution(false, distributedPosition); 2251 2252 std::vector<std::vector<int> > serverIndexBegin = serverDescription.getServerIndexBegin(); 2253 std::vector<std::vector<int> > serverDimensionSizes = serverDescription.getServerDimensionSizes(); 2254 2255 vector<unordered_map<size_t,vector<int>>> indexServerOnElement ; 2256 CArray<int,1> axisDomainOrder(1) ; axisDomainOrder(0)=2 ; 2257 auto zeroIndex=serverDescription.computeServerGlobalByElement(indexServerOnElement, context->getIntraCommRank(), context->getIntraCommSize(), 2258 axisDomainOrder,distributedPosition) ; 2259 // distribution is very bad => to redo 2260 // convert indexServerOnElement => map<int,CArray<size_t,1>> - need to be changed later 2261 map<int, vector<size_t>> vectGlobalIndex ; 2262 for(auto& indexRanks : indexServerOnElement[0]) 2263 { 2264 size_t index=indexRanks.first ; 2265 auto& ranks=indexRanks.second ; 2266 for(int rank : ranks) vectGlobalIndex[rank].push_back(index) ; 2267 } 2268 map<int, CArray<size_t,1>> globalIndex ; 2269 for(auto& vect : vectGlobalIndex ) globalIndex.emplace(vect.first, CArray<size_t,1>(vect.second.data(), shape(vect.second.size()))) ; 2270 2271 CDistributedElement remoteElement(ni_glo*nj_glo, globalIndex) ; 2272 remoteElement.addFullView() ; 2273 2274 CRemoteConnector remoteConnector(localElement_->getView(CElementView::FULL), remoteElement.getView(CElementView::FULL),context->getIntraComm()) ; 2275 remoteConnector.computeConnector() ; 2276 CDistributedElement scatteredElement(remoteElement.getGlobalSize(), remoteConnector.getDistributedGlobalIndex()) ; 2277 scatteredElement.addFullView() ; 2278 CScattererConnector scatterConnector(localElement_->getView(CElementView::FULL), scatteredElement.getView(CElementView::FULL), context->getIntraComm()) ; 2279 scatterConnector.computeConnector() ; 2280 CGridScattererConnector gridScatter({&scatterConnector}) ; 2281 2282 CEventClient event0(getType(), EVENT_ID_DOMAIN_DISTRIBUTION); 2283 CMessage message0 ; 2284 message0<<serverDomainId<<0 ; 2285 remoteElement.sendToServer(client,event0,message0) ; 2286 2287 CEventClient event1(getType(), EVENT_ID_DOMAIN_DISTRIBUTION); 2288 CMessage message1 ; 2289 message1<<serverDomainId<<1<<localElement_->getView(CElementView::FULL)->getGlobalSize() ; 2290 scatterConnector.transfer(localElement_->getView(CElementView::FULL)->getGlobalIndex(),client,event1,message1) ; 2291 2292 CEventClient event2(getType(), EVENT_ID_DOMAIN_DISTRIBUTION); 2293 CMessage message2 ; 2294 message2<<serverDomainId<<2 ; 2295 // scatterConnector.transfer(localElement_->getView(CElementView::FULL)->getGlobalIndex(),client,event2,message2) ; 2296 scatterConnector.transfer(localElement_->getView(CElementView::FULL)->getGlobalIndex(),client,event2,message2) ; 2297 2298 /* 2299 localElement_->getView(CElementView::FULL)->sendRemoteElement(remoteConnector, client, event1, message1) ; 2300 CEventClient event2(getType(), EVENT_ID_DOMAIN_DISTRIBUTION); 2301 CMessage message2 ; 2302 message2<<serverDomainId<<2 ; 2303 remoteConnector.transferToServer(localElement_->getView(CElementView::FULL)->getGlobalIndex(),client,event2,message2) ; 2304 */ 2305 2306 } 2307 CATCH 2308 2309 2310 void CDomain::recvDomainDistribution(CEventServer& event) 2311 TRY 2312 { 2313 string domainId; 2314 int phasis ; 2315 for (auto& subEvent : event.subEvents) (*subEvent.buffer) >> domainId >> phasis ; 2316 get(domainId)->receivedDomainDistribution(event, phasis); 2317 } 2318 CATCH 2319 2320 void CDomain::receivedDomainDistribution(CEventServer& event, int phasis) 2321 TRY 2322 { 2323 CContext* context = CContext::getCurrent(); 2324 if (phasis==0) 2325 { 2326 localElement_ = new CLocalElement(context->getIntraCommRank(),event) ; 2327 localElement_->addFullView() ; 2328 } 2329 else if (phasis==1) 2330 { 2331 CContext* context = CContext::getCurrent(); 2332 CDistributedElement* elementFrom = new CDistributedElement(event) ; 2333 elementFrom->addFullView() ; 2334 gathererConnector_ = new CGathererConnector(elementFrom->getView(CElementView::FULL), localElement_->getView(CElementView::FULL)) ; 2335 gathererConnector_->computeConnector() ; 2336 } 2337 else if (phasis==2) 2338 { 2339 CArray<size_t,1> globalIndex ; 2340 //gathererConnector_->transfer(event,globalIndex) ; 2341 CGridGathererConnector gridGathererConnector({gathererConnector_}) ; 2342 gridGathererConnector.transfer(event, globalIndex) ; 2343 } 2344 else if (phasis==3) 2345 { 2346 2347 } 2348 } 2349 CATCH 2350 2351 2131 2352 2132 2353 /*! … … 2482 2703 return true; 2483 2704 break; 2705 case EVENT_ID_DOMAIN_DISTRIBUTION: 2706 recvDomainDistribution(event); 2707 return true; 2708 break; 2484 2709 default: 2485 2710 ERROR("bool CDomain::dispatchEvent(CEventServer& event)", -
XIOS/dev/dev_ym/XIOS_COUPLING/src/node/domain.hpp
r1875 r1918 18 18 #include "server_distribution_description.hpp" 19 19 #include "mesh.hpp" 20 #include "element.hpp" 21 #include "local_connector.hpp" 22 #include "gatherer_connector.hpp" 20 23 21 24 namespace xios { … … 50 53 EVENT_ID_INDEX, EVENT_ID_LON, EVENT_ID_LAT, 51 54 EVENT_ID_AREA, 52 EVENT_ID_DATA_INDEX, EVENT_ID_SERVER_ATTRIBUT 55 EVENT_ID_DATA_INDEX, EVENT_ID_SERVER_ATTRIBUT, 56 EVENT_ID_DOMAIN_DISTRIBUTION 53 57 } ; 54 58 … … 216 220 private: 217 221 222 static void recvDomainDistribution(CEventServer& event) ; 223 void receivedDomainDistribution(CEventServer& event, int phasis) ; 224 225 226 void sendDomainDistribution(CContextClient* client, const string& domainId="") ; //for testing 218 227 void sendAttributes(); // ym obsolete -> to be removed 219 228 void sendIndex(CContextClient* client, const string& domainId=""); … … 301 310 static bool _dummyTransformationMapList; 302 311 312 313 private: 314 CLocalElement* localElement_ = nullptr ; 315 void initializeLocalElement(void) ; 316 317 public: 318 CLocalElement* getLocalElement(void) { if (localElement_==nullptr) initializeLocalElement() ; return localElement_ ; } 319 CLocalView* getLocalView(CElementView::type type) { return getLocalElement()->getView(type) ;} 320 321 private: 322 void addFullView(void) ; 323 void addWorkflowView(void) ; 324 void addModelView(void) ; 325 326 private: 327 CLocalConnector* modelToWorkflowConnector_ ; 328 void computeModelToWorkflowConnector(void) ; 329 CGathererConnector* gathererConnector_ ; 330 331 public: 332 CLocalConnector* getModelToWorkflowConnector(void) { if (modelToWorkflowConnector_==nullptr) computeModelToWorkflowConnector() ; return modelToWorkflowConnector_ ;} 333 303 334 DECLARE_REF_FUNC(Domain,domain) 304 335 -
XIOS/dev/dev_ym/XIOS_COUPLING/src/node/grid.cpp
r1881 r1918 372 372 CATCH 373 373 374 375 CArray<bool,1>& CGrid::getMask(void) 376 { 377 378 if (mask_.isEmpty()) 379 { 380 if (!mask_0d.isEmpty()) mask_.reference(CArray<bool,1>(mask_0d.dataFirst(),shape(mask_0d.numElements()), neverDeleteData)) ; 381 if (!mask_1d.isEmpty()) mask_.reference(CArray<bool,1>(mask_1d.dataFirst(),shape(mask_1d.numElements()), neverDeleteData)) ; 382 if (!mask_2d.isEmpty()) mask_.reference(CArray<bool,1>(mask_2d.dataFirst(),shape(mask_2d.numElements()), neverDeleteData)) ; 383 if (!mask_3d.isEmpty()) mask_.reference(CArray<bool,1>(mask_3d.dataFirst(),shape(mask_3d.numElements()), neverDeleteData)) ; 384 if (!mask_4d.isEmpty()) mask_.reference(CArray<bool,1>(mask_4d.dataFirst(),shape(mask_4d.numElements()), neverDeleteData)) ; 385 if (!mask_5d.isEmpty()) mask_.reference(CArray<bool,1>(mask_5d.dataFirst(),shape(mask_5d.numElements()), neverDeleteData)) ; 386 if (!mask_6d.isEmpty()) mask_.reference(CArray<bool,1>(mask_6d.dataFirst(),shape(mask_6d.numElements()), neverDeleteData)) ; 387 if (!mask_7d.isEmpty()) mask_.reference(CArray<bool,1>(mask_7d.dataFirst(),shape(mask_7d.numElements()), neverDeleteData)) ; 388 } 389 return mask_ ; 390 } 374 391 /* 375 392 Create mask of grid from mask of its components … … 3044 3061 CATCH_DUMP_ATTR 3045 3062 3063 3064 void CGrid::computeGridLocalElements() 3065 { 3066 std::vector<CDomain*> domainList = this->getDomains(); 3067 std::vector<CAxis*> axisList = this->getAxis(); 3068 auto domain=domainList.begin() ; 3069 auto axis=axisList.begin() ; 3070 vector<CLocalElement*> elements; 3071 for(auto order : order_) 3072 { 3073 if (order==2) 3074 { 3075 elements.push_back((*domain)->getLocalElement()); 3076 domain++ ; 3077 } 3078 else if (order==1) 3079 { 3080 elements.push_back((*axis)->getLocalElement()); 3081 axis++ ; 3082 } 3083 else if (order==0) 3084 { 3085 } 3086 } 3087 if (hasMask()) 3088 { 3089 vector<bool> mask(getMask().getVector()) ; 3090 gridLocalElements_ = new CGridLocalElements(elements, mask) ; 3091 } 3092 else gridLocalElements_ = new CGridLocalElements(elements) ; 3093 } 3094 3095 void CGrid::computeModelToWorkflowConnector(void) 3096 { 3097 modelToWorkflowConnector_ = getGridLocalElements()->getConnector(CElementView::MODEL,CElementView::WORKFLOW) ; 3098 } 3046 3099 } // namespace xios -
XIOS/dev/dev_ym/XIOS_COUPLING/src/node/grid.hpp
r1881 r1918 16 16 #include "utils.hpp" 17 17 #include "transformation_enum.hpp" 18 #include "grid_local_connector.hpp" 19 #include "grid_elements.hpp" 18 20 19 21 namespace xios { … … 255 257 void modifyMask(const CArray<int,1>& indexToModify, bool valueToModify = false); 256 258 void modifyMaskSize(const std::vector<int>& newDimensionSize, bool newValue = false); 259 260 /** get mask pointer stored in mask_1d, or mask_2d, or..., or mask_7d */ 261 CArray<bool,1> mask_ ; 262 CArray<bool,1>& getMask(void) ; 257 263 258 264 void computeGridGlobalDimension(const std::vector<CDomain*>& domains, … … 289 295 const CArray<int,1>& axisDomainOrder, 290 296 bool createMask = false); 297 291 298 template<int N> 292 299 void modifyGridMask(CArray<bool,N>& gridMask, const CArray<int,1>& indexToModify, bool valueToModify); … … 500 507 /** List order of axis and domain in a grid, if there is a domain, it will take value 2, axis 1, scalar 0 */ 501 508 std::vector<int> order_; 509 510 private: 511 CGridLocalElements* gridLocalElements_= nullptr ; 512 void computeGridLocalElements(void) ; 513 public: 514 CGridLocalElements* getGridLocalElements(void) { if (gridLocalElements_==nullptr) computeGridLocalElements() ; return gridLocalElements_ ;} 515 516 private: 517 CGridLocalConnector* modelToWorkflowConnector_ ; 518 public: 519 void computeModelToWorkflowConnector(void) ; 520 CGridLocalConnector* getModelToWorkflowConnector(void) { if (modelToWorkflowConnector_==nullptr) computeModelToWorkflowConnector() ; return modelToWorkflowConnector_;} 502 521 503 522 }; // class CGrid … … 521 540 CATCH 522 541 542 /* obsolete 523 543 template <int n> 524 544 void CGrid::maskField(const CArray<double,n>& field, CArray<double,1>& stored) … … 534 554 this->maskField_arr(field.dataFirst(), stored); 535 555 } 556 */ 557 template <int n> 558 void CGrid::maskField(const CArray<double,n>& field, CArray<double,1>& stored) 559 { 560 auto connector = getModelToWorkflowConnector() ; 561 562 if (connector->getSrcSize() != field.numElements()) 563 ERROR("void CGrid::inputField(const CArray<double,n>& field, CArray<double,1>& stored) const", 564 << "[ Awaiting data of size = " << this->getDataSize() << ", " 565 << "Received data size = " << field.numElements() << " ] " 566 << "The data array does not have the right size! " 567 << "Grid = " << this->getId()) 568 const double nanValue = std::numeric_limits<double>::quiet_NaN(); 569 connector->transfer(field, stored, nanValue) ; 570 } 571 572 536 573 537 574 template <int n> -
XIOS/dev/dev_ym/XIOS_COUPLING/src/type/message.cpp
r1158 r1918 9 9 10 10 CMessage::CMessage(void) {} 11 12 CMessage::CMessage(const CMessage& msg) 13 { 14 for(auto type : msg.typeList) push(*type) ; 15 } 16 11 17 12 18 CMessage& CMessage::push(const CBaseType& type) -
XIOS/dev/dev_ym/XIOS_COUPLING/src/type/message.hpp
r591 r1918 17 17 18 18 CMessage(void) ; 19 CMessage(const CMessage& Msg) ; 20 19 21 list<CBaseType*> typeList ; 20 22 virtual bool fromBuffer(CBufferIn& buffer) const;
Note: See TracChangeset
for help on using the changeset viewer.