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
00023 #define XJDVERSION "version"
00024 #define COMPLIST "components"
00025 #define COMP "component"
00026 #define CONNLIST "connections"
00027 #define CONN "connection"
00028
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
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
00061
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
00111 map<string, const intArray*> ppp_int_arrmap;
00112 map<string, const floatArray*> ppp_float_arrmap;
00113 map<string, const doubleArray*> ppp_double_arrmap;
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
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;
00169 map<string, IC_EndPoint*> port2ep;
00170 map<string, IC_Desc*> port2desc;
00171 map<string, IC_Region**> port2regionset;
00172 map<string, IC_Sched*> port2sched;
00173 map<string, int> port2tag;
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
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