IC_EndPointSet.h

Go to the documentation of this file.
00001 
00011 #ifndef IC_ENDPOINTSET_H
00012 #define IC_ENDPOINTSET_H
00013 
00014 #ifndef IC_ENDPOINT_H
00015 #include "IC_EndPoint.h"
00016 #endif
00017 
00018 #include "../ezxml/ezxml.h"
00019 #include <map>
00020 #include <string>
00021 
00022 /* reserved define for ezxml */
00023 #define XJDVERSION "version"
00024 #define COMPLIST "components"
00025 #define COMP     "component"
00026 #define CONNLIST "connections"
00027 #define CONN     "connection"
00028 /* reserved define for IC_XJDRegion */
00029 #define EXPORTER "exporter"
00030 #define IMPORTER "importer"
00031 #define EXPPORT  "exportport"
00032 #define IMPPORT  "importport"
00033 #define DATATYPE "type"
00034 #define TAG      "msgtag"
00035 #define COMMTYPE "commtype"
00036 /* reserved define for IC_XJDComponent */
00037 #define COMPID   "id"
00038 #define COMPNAME "comp_id"
00039 #define N_NODE   "nNode"
00040 
00041 #define ARRAYORDER "arrayorder"
00042 
00043 using namespace std;
00044 
00045 
00052 class IC_EndPointSet
00053 {
00054   public:
00055 
00060   /* the declarations below must be in sync with
00061      ../FortranInterface/intercomm_interface.h */
00062 
00063     enum
00064       {
00065       IC_OK                      = 0,
00066       IC_EPSET_INIT_FAILURE      = -13,
00067       IC_ARRAY_REGISTER_FAILURE  = -14,
00068       IC_COMMIT_ARRAY_FAILURE    = -15,
00069     };
00070     static const char * const IC_epset_errors[];
00071 
00079     IC_EndPointSet(const char* xjdfile, const char* compname, int& status);
00080 
00084     virtual ~IC_EndPointSet();
00085 
00090     void commitArrays(int& status);
00091 
00097     void exportArray(char* arrname, int& status);
00098 
00104     void importArray(char* arrname, int& status);
00105 
00106     static void printErrorMessage(const char* msg, const int ic_err);
00107 
00108 #ifdef PPLUSPLUS
00109   private:
00110     /* maps portname onto P++ array*/
00111     map<string, const intArray*> ppp_int_arrmap; /* map portname : intArray*/
00112     map<string, const floatArray*> ppp_float_arrmap; /* map portname : floatArray*/
00113     map<string, const doubleArray*> ppp_double_arrmap; /* map portname : doubleArray*/
00114 
00115   public:  
00116     virtual void registerArray(const char*, const intArray&, int& );
00117     virtual void bcastLocalArray(const char*, const intArray&, int, int&);
00118     virtual void recvLocalArray(const char*, const intArray&, int, int&);
00119 
00120     virtual void registerArray(const char*, const floatArray&, int& );
00121     virtual void bcastLocalArray(const char*, const floatArray&, int, int&);
00122     virtual void recvLocalArray(const char*, const floatArray&, int, int&);
00123 
00124     virtual void registerArray(const char*, const doubleArray&, int& );
00125     virtual void bcastLocalArray(const char*, const doubleArray&, int, int&);
00126     virtual void recvLocalArray(const char*, const doubleArray&, int, int&);
00127 #endif
00128 
00129 #ifdef FORTRAN90
00130   private:
00131     /* maps portname onto F90 arraydesc*/
00132     map<string, const F90_charArray*>   f90_char_arrmap;
00133     map<string, const F90_shortArray*>  f90_short_arrmap;
00134     map<string, const F90_intArray*>    f90_int_arrmap;
00135     map<string, const F90_floatArray*>  f90_float_arrmap;
00136     map<string, const F90_doubleArray*> f90_double_arrmap;
00137 
00138   public:  
00139     virtual void registerArray(const char* , const F90_charArray& , int& );
00140     virtual void bcastLocalArray(const char*, const F90_charArray&, int, int&);
00141     virtual void recvLocalArray(const char*, const F90_charArray&, int, int&);
00142 
00143     virtual void registerArray(const char* , const F90_shortArray& , int& );
00144     virtual void bcastLocalArray(const char*, const F90_shortArray&, int, int&);
00145     virtual void recvLocalArray(const char*, const F90_shortArray&, int, int&);
00146 
00147     virtual void registerArray(const char* , const F90_intArray& , int& );
00148     virtual void bcastLocalArray(const char*, const F90_intArray&, int, int&);
00149     virtual void recvLocalArray(const char*, const F90_intArray&, int, int&);
00150 
00151     virtual void registerArray(const char* , const F90_floatArray& , int& );
00152     virtual void bcastLocalArray(const char*, const F90_floatArray&, int, int&);
00153     virtual void recvLocalArray(const char*, const F90_floatArray&, int, int&);
00154 
00155     virtual void registerArray(const char* , const F90_doubleArray& , int& );
00156     virtual void bcastLocalArray(const char*, const F90_doubleArray&, int, int&);
00157     virtual void recvLocalArray(const char*, const F90_doubleArray&, int, int&);
00158    
00159 #endif
00160 
00161   private:
00162     const char* myprogname;
00163     char* cid;
00164     unsigned mynproc; 
00165     unsigned myao;
00166     
00167     char* xjdversion;
00168     map<string, IC_EndPoint*> epmap; /* map endpoint name : endpoint*/
00169     map<string, IC_EndPoint*> port2ep; /* map portname : endpoint*/
00170     map<string, IC_Desc*> port2desc; /* map portname : descriptor*/
00171     map<string, IC_Region**> port2regionset; /* map portname : regionset*/
00172     map<string, IC_Sched*> port2sched; /* map portname : schedule*/
00173     map<string, int> port2tag; /* map portname : tag*/
00174 
00175     void addep(const char* myname, unsigned mynproc, unsigned myao,
00176                char* othername, unsigned onproc, unsigned oao,
00177                char* portname, char* commtype, char* datatype, int tag);
00178                
00179     IC_EndPoint* findep(string epname);
00180     void registerPort(IC_EndPoint* ep, char* ptname, char* ctype, char* dtype, int tag, int& stat);
00181     
00182     /* Methods for parsing*/
00183     ezxml_t read_xjd(const char* xjdname);
00184     char* get_version(ezxml_t xmlRoot);
00185     int epset_init_1_5(ezxml_t xmlRoot, int& stat);
00186     int epset_init_2_0(ezxml_t xmlRoot, int& stat);
00187     int register_program(ezxml_t xmlRoot);
00188     int inspect_connections(ezxml_t xmlRoot);
00189 
00190     int XJD_Validate(ezxml_t xmlRoot);
00191     ezxml_t get_first_comp(ezxml_t xmlRoot);
00192     ezxml_t get_first_conn(ezxml_t xmlRoot);
00193     char* get_field_byID(char* id, ezxml_t xmlRoot, char* fieldname);
00194 };
00195 
00196 #endif /*_IC_ENDPOINTSET_H_*/

Generated on Thu May 4 15:30:22 2006 for InterComm by  doxygen 1.4.6