Changeset 1330 for XIOS/dev/XIOS_DEV_CMIP6/src/object_template_impl.hpp
- Timestamp:
- 11/15/17 15:21:13 (6 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
XIOS/dev/XIOS_DEV_CMIP6/src/object_template_impl.hpp
r1283 r1330 181 181 182 182 template<typename T> 183 std::map<int, size_t> CObjectTemplate<T>::getMinimumBufferSizeForAttributes() 184 { 185 // Use correct context client to send message 186 CContext* context = CContext::getCurrent(); 187 // int nbSrvPools = (context->hasServer) ? context->clientPrimServer.size() : 1; 188 int nbSrvPools = (context->hasServer) ? (context->hasClient ? context->clientPrimServer.size() : 1) : 1; 189 for (int i = 0; i < nbSrvPools; ++i) 183 std::map<int, size_t> CObjectTemplate<T>::getMinimumBufferSizeForAttributes(CContextClient* client) 184 { 185 std::map<int, size_t> minimumSizes; 186 187 if (client->isServerLeader()) 190 188 { 191 CContextClient* contextClientTmp = (context->hasServer) ? context->clientPrimServer[i] : context->client; 192 193 std::map<int, size_t> minimumSizes; 194 195 if (contextClientTmp->isServerLeader()) 189 size_t minimumSize = 0; 190 CAttributeMap& attrMap = *this; 191 CAttributeMap::const_iterator it = attrMap.begin(), itE = attrMap.end(); 192 for (; it != itE; ++it) 196 193 { 197 size_t minimumSize = 0; 198 CAttributeMap& attrMap = *this; 199 CAttributeMap::const_iterator it = attrMap.begin(), itE = attrMap.end(); 200 for (; it != itE; ++it) 194 if (!it->second->isEmpty()) 201 195 { 202 if (!it->second->isEmpty()) 203 { 204 size_t size = it->second->getName().size() + sizeof(size_t) + it->second->size(); 205 if (size > minimumSize) 206 minimumSize = size; 207 } 208 } 209 210 if (minimumSize) 211 { 212 // Account for extra header info 213 minimumSize += CEventClient::headerSize + getIdServer().size() + sizeof(size_t); 214 215 const std::list<int>& ranks = contextClientTmp->getRanksServerLeader(); 216 for (std::list<int>::const_iterator itRank = ranks.begin(), itRankEnd = ranks.end(); itRank != itRankEnd; ++itRank) 217 minimumSizes.insert(std::make_pair(*itRank, minimumSize)); 196 size_t size = it->second->getName().size() + sizeof(size_t) + it->second->size(); 197 if (size > minimumSize) 198 minimumSize = size; 218 199 } 219 200 } 220 return minimumSizes; 201 202 if (minimumSize) 203 { 204 // Account for extra header info 205 minimumSize += CEventClient::headerSize + getIdServer().size() + sizeof(size_t); 206 207 const std::list<int>& ranks = client->getRanksServerLeader(); 208 for (std::list<int>::const_iterator itRank = ranks.begin(), itRankEnd = ranks.end(); itRank != itRankEnd; ++itRank) 209 minimumSizes.insert(std::make_pair(*itRank, minimumSize)); 210 } 221 211 } 222 } 212 return minimumSizes; 213 } 214 223 215 224 216 template<typename T>
Note: See TracChangeset
for help on using the changeset viewer.