source: XIOS3/branches/xios-3.0-beta/src/event_client.hpp @ 2530

Last change on this file since 2530 was 2343, checked in by ymipsl, 2 years ago
  • Implement new infrastructure for transfert protocol.
  • new purelly one sided protocol is now available, the previous protocol (legacy, mix send/recv and one sided) is still available. Other specific protocol could be implemented more easilly in future.
  • switch can be operate with "transport_protocol" variable in XIOS context :

ex:
<variable id="transport_protocol" type="string">one_sided</variable>

Available protocols are : one_sided, legacy or default. The default protocol is "legacy".

YM

  • Property copyright set to
    Software name : XIOS (Xml I/O Server)
    http://forge.ipsl.jussieu.fr/ioserver
    Creation date : January 2009
    Licence : CeCCIL version2
    see license file in root directory : Licence_CeCILL_V2-en.txt
    or http://www.cecill.info/licences/Licence_CeCILL_V2-en.html
    Holder : CEA/LSCE (Laboratoire des Sciences du CLimat et de l'Environnement)
    CNRS/IPSL (Institut Pierre Simon Laplace)
    Project Manager : Yann Meurdesoif
    yann.meurdesoif@cea.fr
File size: 2.2 KB
Line 
1#ifndef __EVENT_CLIENT_HPP__
2#define __EVENT_CLIENT_HPP__
3
4#include "xios_spl.hpp"
5#include "buffer_out.hpp"
6#include "message.hpp"
7
8namespace xios
9{
10  class CEventClient
11  {
12    public:
13      static const size_t headerSize;
14
15      CEventClient(int classId, int typeId);
16
17      void push(int rank, int nbSender, CMessage& msg);
18      void send(size_t timeLine, const std::list<int>& sizes, std::list<CBufferOut*>&); 
19      bool isEmpty(void);
20      std::list<int> getRanks(void);
21      std::list<int> getSizes(void);
22      int getClassId(void) { return classId; }
23      int getTypeId(void) { return typeId; }
24     
25      void setFirst(void)
26      {
27        itRanks=ranks.begin() ;
28        itNbSenders=nbSenders.begin() ;
29        itMessages=messages.begin() ;
30      }
31
32      bool isFirst(void)
33      {
34        return itRanks==ranks.begin() ;
35      }
36
37      void next(void)
38      {
39        itRanks++ ;
40        if (itRanks==ranks.end()) itRanks=ranks.begin() ;
41        itNbSenders++ ;
42        if (itNbSenders==nbSenders.end()) itNbSenders=nbSenders.begin() ;
43        itMessages++ ;
44        if (itMessages==messages.end()) itMessages=messages.begin() ;
45      }
46     
47      void remove(void)
48      {
49        auto removedRank = itRanks;
50        itRanks++ ;
51        ranks.erase(removedRank) ;
52        if (itRanks==ranks.end()) itRanks=ranks.begin() ;
53
54        auto removedNbSender = itNbSenders ;
55        itNbSenders++ ;
56        nbSenders.erase(removedNbSender) ;
57        if (itNbSenders==nbSenders.end()) itNbSenders=nbSenders.begin() ;
58
59        auto removedMessage = itMessages ;
60        itMessages++ ;
61        messages.erase(removedMessage) ;
62        if (itMessages==messages.end()) itMessages=messages.begin() ;
63      }
64
65      int getRank(void) { return *itRanks ;}
66      int getNbSender(void) { return *itNbSenders ;}
67      int getSize(void) { return (*itMessages)->size() + headerSize;}
68      void send(size_t timeLine, int size, CBufferOut* buffer) ;
69    private:
70      int classId;
71      int typeId;
72      std::list<int> ranks;
73      std::list<int> nbSenders;
74      std::list<CMessage*> messages;
75     
76      std::list<int>::iterator       itRanks;
77      std::list<int>::iterator       itNbSenders;
78      std::list<CMessage*>::iterator itMessages;
79  };
80}
81
82#endif
Note: See TracBrowser for help on using the repository browser.