doc: Add serial to list of ci file reserved words
[charm.git] / src / ck-com / DirectMulticastStrategy.h
index 941f41ca4e6dbc778b3ad363dfb1997ddce870f7..65e83bbf6f5896267d22cc402ac21e44736c6c23 100644 (file)
@@ -1,52 +1,59 @@
+/**
+   @addtogroup ComlibCharmStrategy
+   @{
+   @file 
+   @brief Send a multicast by sending once directly to each processor owning destination elements.
+
+*/
+
 #ifndef DIRECT_MULTICAST_STRATEGY
 #define DIRECT_MULTICAST_STRATEGY
 
-#include "ComlibManager.h"
-#include "ComlibSectionInfo.h"
+#include "MulticastStrategy.h"
+
 
-void *DMHandler(void *msg);
+/** 
+  Send the multicast by sending once directly to each processor owning destination elements.
 
-class DirectMulticastStrategy: public CharmStrategy {
+  The definition of the section, as well as the location of all the elements in
+  the processors is determined by the sending processor. The other will obey to
+  it, even some elements have already migrated elsewhere.
+
+*/
+class DirectMulticastStrategy: public MulticastStrategy {
  protected:
-    CkQ <CharmMessageHolder*> *messageBuf;
-    
-    int ndestpes, *destpelist; //Destination processors
-    int handlerId;
-    
-    ComlibSectionInfo sinfo;
-    
-    //Array section support
-    CkHashtableT<ComlibSectionHashKey, void *> sec_ht; 
-    
-    //Common Initializer for group and array constructors
-    //Every substrategy should implement its own
-    void commonInit();
-    
+    ///Called when a new section multicast is called by the user locally.
+    ///The strategy should then create a topology for it and return a hash
+    ///object to store that topology.
+  virtual void createObjectOnSrcPe(ComlibSectionHashObject *obj, int npes, ComlibMulticastIndexCount *pelist);
+
+    /**   
+     * Similar to createHashObjectOnSrcPe, but that this call is made on the
+     * destination or intermediate processor. I receives all the information in
+     * the parameters, and it does not use ComlibLastKnown, since in some cases
+     * it can be incoherent.
+
+     * @param nindices number of local elements to multicast
+     * @param idxlist list of local elements
+     * @param npes number of processors involved in the multicast
+     * @param counts list of all the processors involved int the multicast
+     * @param srcpe processor which started the multicast
+     * @return a hash object describing the section
+     */
+    virtual void createObjectOnIntermediatePe(ComlibSectionHashObject *obj, int npes, ComlibMulticastIndexCount *counts, int srcpe);
+   
  public:
-    
-    //Group constructor
-    DirectMulticastStrategy(int ndestpes = 0, int *destpelist = 0);    
-    DirectMulticastStrategy(CkMigrateMessage *m): CharmStrategy(m){}
+    DirectMulticastStrategy(CkMigrateMessage *m): MulticastStrategy(m){}
                 
-    //Array constructor
-    DirectMulticastStrategy(CkArrayID aid);
-
-    //Array constructor
-    DirectMulticastStrategy(CkArrayID said, CkArrayID dest);
-        
-    //Destuctor
-    ~DirectMulticastStrategy();
-        
-    virtual void insertMessage(CharmMessageHolder *msg);
-    virtual void doneInserting();
-
-    //Called by the converse handler function
-    virtual void handleMulticastMessage(void *msg);
-    
-    virtual void pup(PUP::er &p);    
-    virtual void beginProcessing(int nelements);
-    
+    ///Array constructor
+    DirectMulticastStrategy(): MulticastStrategy() {}
+
     PUPable_decl(DirectMulticastStrategy);
+
+    virtual void pup(PUP::er &p){ MulticastStrategy::pup(p);}   
+    
 };
 #endif
 
+/*@}*/