00001 #ifndef __GIZZARD_H__
00002 #define __GIZZARD_H__
00003
00004 #include <map>
00005 #include <string>
00006 #include <vector>
00007
00008
00009
00010
00011 class OpqParameterPortFactory;
00012 class OpqConnectionEventService;
00013
00015 class Gizzard : public virtual ::ccafeopq::Services,
00016 public virtual KernelPort
00017 {
00018
00019 private:
00020 static bool countInitDone;
00021 static int pnameCount;
00022
00023
00025 bool debug;
00026
00032 ::ccafeopq::ComponentID_shared cid;
00033
00034
00035
00036 ::std::vector< ProviderPortData > pData;
00037
00038 ::std::vector< UserPortData > uData;
00039
00040 ::std::vector< ConnectionID_ptr > cData;
00041 int serial;
00042 int nextSerial();
00043
00044
00046 int findIndex( ::std::vector< ProviderPortData > & info, const std::string & name);
00047
00049 int findIndex( ::std::vector< UserPortData > & info, const std::string & name);
00050
00051 int getNextCount();
00052
00053 ::ccafeopq::TypeMap_shared compPropertyMap;
00054
00055 int64_t fortranMPIComm;
00056 bool hasComm;
00057
00058 public:
00062 Gizzard(const std::string & instanceName, int64_t fComm, bool useComm);
00063
00064 virtual ~Gizzard();
00065
00067 void dbug(bool tf) {
00068 debug = tf;
00069 }
00070
00071
00076 virtual void registerUsesPort(ccafeopq::PortInfo * pInfo) throw
00077 (ccafeopq::Exception);
00078
00079 virtual void registerUsesPort(const ::std::string & pName, const ::std::string & pType, ::ccafeopq::TypeMap_shared props) throw ( ::ccafeopq::Exception );
00080
00082 virtual void addProvidesPort(ccafeopq::Port * inPort,
00083 ccafeopq::PortInfo * name) throw (ccafeopq::Exception);
00084
00085
00088 ::ccafeopq::Port * getOpaquePort(const char* name, enum ccafeopq::ExceptionType &status);
00089 ::ccafeopq::Port * getOpaquePort(const ::std::string & name, enum ccafeopq::ExceptionType &status);
00090
00093 ::ccafeopq::Port * getPort(const std::string & name, enum ccafeopq::ExceptionType &status) throw (ccafeopq::Exception);
00094
00095
00097 virtual void releasePort(char *name);
00099 virtual void releasePort(const std::string & name) throw (ccafeopq::Exception);
00101 virtual void releasePort(const char *name);
00102
00103
00105 virtual ccafeopq::PortInfo *
00106 createPortInfo(const std::string & name, const std::string & type,
00107 const std::map<std::string, std::string> & properties)
00108 throw (ccafeopq::Exception);
00109
00112 virtual void destroyPortInfo(ccafeopq::PortInfo * pi);
00113
00115 virtual const char* getComponentInstanceName();
00116
00118 ::ccafeopq::ComponentID_shared getComponentID();
00119
00121 virtual void destroyComponentID( ::ccafeopq::ComponentID_shared cid_);
00122
00123 virtual void addProvidesPort(ccafeopq::Port*, const std::string& pname, const std::string& ptype, ::ccafeopq::TypeMap_shared t) throw ( ::ccafeopq::Exception );
00124
00125 virtual void addProvidesPort(ccafeopq::Port*, const std::string& pname, const std::string& ptype) throw ( ::ccafeopq::Exception );
00126
00127 static ::ccafeopq::TypeMap_shared createTypeMapStatic() throw ( ::ccafeopq::Exception );
00128
00129 virtual ::ccafeopq::TypeMap_shared createTypeMap() throw ( ::ccafeopq::Exception );
00130
00131 virtual ::ccafeopq::TypeMap_shared getPortProperties(const ::std::string& Name) throw ( ::ccafeopq::Exception );
00132
00133 virtual void setPortProperties(const ::std::string& Name, ::ccafeopq::TypeMap_shared tm) throw ( ::ccafeopq::Exception );
00134
00135 virtual ::std::string genUniquePortName(const ::std::string& baseName) throw ( ::ccafeopq::Exception );
00136
00138 ::ccafeopq::TypeMap_shared getPropertyMap();
00139
00141 void setPropertyMapData( ::ccafeopq::TypeMap_shared tm );
00142
00143
00144
00145
00146
00149 int connectUsesPort(::ccafeopq::PortInfo *info,
00150 ::ccafeopq::Port *up,
00151 ::ccafeopq::PortInfo *fromPI,
00152 Gizzard *fromG);
00154 int connectUsesPort(const ::std::string & userPortName,
00155 ::ccafeopq::Port *up,
00156 const ::std::string &providerPortName,
00157 Gizzard *fromG);
00158
00159
00160 int connectUsesPort(const ::std::string & pName, ::ccafeopq::Port *up);
00161
00162
00165 int disconnectProvidesPort(ConnectionID_ptr c);
00166
00167
00169 int connectProvidesPort(ConnectionID_ptr c);
00170
00171
00173 ::std::vector< ConnectionID_ptr > getConnections();
00174
00176 ::std::vector< ConnectionID_ptr > getUsesConnections();
00177
00179 int disconnectAllUsesPorts();
00180
00188 int disconnectUsesPort(int pindex);
00189
00194 const ::std::vector< UserPortData > & getUsesPortRegister();
00195
00198 virtual int unregisterUsesPort(const char * name);
00201 virtual void unregisterUsesPort(const std::string & name) throw (ccafeopq::Exception);
00204 virtual int unregisterUsesPort(char *name);
00205
00208 virtual ::ccafeopq::Port * removeProvidesPort(const char * name);
00209
00210
00213 virtual ::ccafeopq::Port * removeProvidesPort(const std::string & name) throw (ccafeopq::Exception);
00214
00215 bool usesThisPortType(const std::string& typeToTest);
00216 bool providesThisPortType(const std::string& typeToTest);
00217
00218 ::std::vector< ::std::string > getUsesPortTypes();
00219 ::std::vector< ::std::string > getUsesPortNames();
00220 ::std::vector< ::std::string > getProvidesPortTypes();
00221 ::std::vector< ::std::string > getProvidesPortNames();
00222
00225 virtual const ::std::vector< UserPortData > & getUsesPorts();
00226
00228 virtual const ::std::vector< ProviderPortData > & getProvidesPorts();
00229
00238 ::std::vector< ::std::string> getConnectionStrings();
00239
00240 OpqConnectionEventService * getOCES();
00241
00242 private:
00243 OpqParameterPortFactory *oppf;
00244 OpqConnectionEventService *oces;
00245
00246
00247
00248
00249
00250
00251 void checkInternalServices(const ::std::string & name, const ::std::string & type);
00252
00253 ::ccafeopq::SvcPortMap opaqueDelegates;
00254 ::std::vector< ::ccafeopq::ServicesHelper * > helpers;
00255
00256 public:
00257 void initDelegates();
00258
00260 void addServicesHelper( ::ccafeopq::ServicesHelper *sh);
00261
00262
00263 public:
00264 virtual void addComponentChangedListener(ComponentChangedListener* l) ;
00265 void fireComponentChangedEvent(ComponentChangedEvent* evt) ;
00266
00267 void setFrameData(std::map<std::string, void *> *fd);
00268
00269
00270 ::ccafeopq::TypeMap_shared getComponentInternalPropertyMap();
00271
00272 bool hasMPIComm(int64_t & fortranBorrowComm) ;
00273 private:
00275 ::std::vector< ComponentChangedListener * > cmptChgLsnrs;
00276
00277 private:
00278
00283 ::std::map<std::string, void *> *frame;
00284
00285
00286 };
00287
00288 #endif //__GIZZARD_H__