Ignore:
Timestamp:
11/15/17 15:21:13 (6 years ago)
Author:
oabramkina
Message:

Adding buffer evaluation in case of reading.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • XIOS/dev/XIOS_DEV_CMIP6/src/object_template_impl.hpp

    r1283 r1330  
    181181 
    182182   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()) 
    190188     { 
    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) 
    196193       { 
    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()) 
    201195         { 
    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; 
    218199         } 
    219200       } 
    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       } 
    221211     } 
    222    } 
     212     return minimumSizes; 
     213   } 
     214 
    223215 
    224216   template<typename T> 
Note: See TracChangeset for help on using the changeset viewer.