doc: Add serial to list of ci file reserved words
[charm.git] / src / ck-com / DirectMulticastStrategy.h
index 10634b1f2368d6b5f9cfe25369902b5cff8eb1d6..65e83bbf6f5896267d22cc402ac21e44736c6c23 100644 (file)
@@ -1,66 +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);
 
-class DirectMulticastStrategy: public CharmStrategy {
- protected:
-    //   int handlerId;    
-    ComlibSectionInfo sinfo;
+/** 
+  Send the multicast by sending once directly to each processor owning destination elements.
 
-    int isPersistent; 
-    
-    //Array section support
-    CkHashtableT<ComlibSectionHashKey, ComlibSectionHashObject *> sec_ht; 
-    
-    //Add this section to the hash table locally
-    void insertSectionID(CkSectionID *sid);
+  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.
 
-    //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 ComlibSectionHashObject *createObjectOnSrcPe
-        (int nindices, CkArrayIndexMax *idx_list);
+*/
+class DirectMulticastStrategy: public MulticastStrategy {
+ protected:
+    ///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);
    
-    //Similar to createHashObjectOnSrcPe, but that this call 
-    //is made on the destination or intermediate processor
-    virtual ComlibSectionHashObject *createObjectOnIntermediatePe
-        (int nindices, CkArrayIndexMax *idx_list, int srcpe);
-        
-    //Called to multicast the message to local array elements
-    void localMulticast(envelope *env, ComlibSectionHashObject *obj);
-    
-    //Called to send to message out to the remote destinations
-    //This method can be overridden to call converse level strategies 
-    virtual void remoteMulticast(envelope *env, ComlibSectionHashObject *obj);
-
-    //Process a new message by extracting the array elements 
-    //from it and creating a new hash object by calling createObjectOnIntermediatePe();
-    void handleNewMulticastMessage(envelope *env);
-
  public:
-
-    DirectMulticastStrategy(CkMigrateMessage *m): CharmStrategy(m){}
+    DirectMulticastStrategy(CkMigrateMessage *m): MulticastStrategy(m){}
                 
-    //Array constructor
-    DirectMulticastStrategy(CkArrayID aid, int isPersistent = 0);
-        
-    //Destuctor
-    ~DirectMulticastStrategy();
-        
-    virtual void insertMessage(CharmMessageHolder *msg);
-    virtual void doneInserting();
+    ///Array constructor
+    DirectMulticastStrategy(): MulticastStrategy() {}
 
-    //Called by the converse handler function
-    virtual void handleMessage(void *msg);    
+    PUPable_decl(DirectMulticastStrategy);
 
-    virtual void pup(PUP::er &p);    
-    virtual void beginProcessing(int nelements);
+    virtual void pup(PUP::er &p){ MulticastStrategy::pup(p);}   
     
-    PUPable_decl(DirectMulticastStrategy);
 };
 #endif
 
+/*@}*/