00001 #ifndef SFBONEXTENSION_H
00002 #define SFBONEXTENSION_H
00003
00004 #include "BON.h"
00005 #include "BONImpl.h"
00006 #include "Extensions.h"
00007
00009
00011
00012 namespace SF_BON
00013 {
00014 class ProcessingImpl;
00015 DECLARE_ABSTRACT_BONEXTENSION( BON::Model, ProcessingImpl, Processing );
00016 class CompoundImpl;
00017 DECLARE_BONEXTENSION( Processing, CompoundImpl, Compound );
00018 class PrimitiveImpl;
00019 DECLARE_BONEXTENSION( Processing, PrimitiveImpl, Primitive );
00020 class ParameterBaseImpl;
00021 DECLARE_BONEXTENSION( BON::Atom, ParameterBaseImpl, ParameterBase );
00022 class InputParamImpl;
00023 DECLARE_BONEXTENSION( ParameterBase, InputParamImpl, InputParam );
00024 class ParamImpl;
00025 DECLARE_BONEXTENSION( ParameterBase, ParamImpl, Param );
00026 class SignalImpl;
00027 DECLARE_BONEXTENSION( BON::Atom, SignalImpl, Signal );
00028
00029 typedef std::map<std::string, Primitive> PrimitiveTable;
00030
00031
00032
00033
00034 class ProcessingImpl :
00035 virtual public BON::ModelImpl
00036 {
00037 public:
00038
00039
00040 virtual std::set<InputParam> getInputParameters();
00041 virtual std::set<Signal> getInputSignals();
00042 virtual std::set<ParameterBase> getOutputParameters();
00043 virtual std::set<Signal> getOutputSignals();
00044 virtual std::set<BON::Connection> getPC();
00045 virtual std::set<Param> getParameters();
00046 virtual std::set<ParameterBase> geteters();
00047 virtual std::set<Signal> gets();
00048
00050 public :
00051 void initialize() {}
00052 virtual void traverse(std::set<Primitive> &primitives) {}
00054 };
00055
00056
00057
00058
00059
00060 class CompoundImpl :
00061 public ProcessingImpl
00062 {
00063 public:
00064
00065
00066 virtual std::set<Compound> getCompoundParts();
00067 virtual std::set<BON::Connection> getDFC();
00068 virtual std::set<Processing> getParts();
00069 virtual std::set<Primitive> getPrimitiveParts();
00070
00072 public :
00073 void initialize();
00074 virtual void traverse(std::set<Primitive> &primitives);
00076 };
00077
00078
00079
00080
00081
00082 class PrimitiveImpl :
00083 public ProcessingImpl
00084 {
00085 public:
00086 typedef enum
00087 {
00088 IFALL_Firing_Type,
00089 IFANY_Firing_Type
00090 } Firing_Type;
00091
00092
00093 virtual PrimitiveImpl::Firing_Type getFiring();
00094 virtual long getPriority();
00095 virtual std::string getScript();
00096
00098
00099 private :
00100 int id;
00101 int outputPortNo;
00102 int inputPortNo;
00103 std::string actorName;
00104
00105 std::set<Param> parameters;
00106 std::set<InputParam> inputParameters;
00107 static PrimitiveTable contextTable;
00108 public :
00109 void initialize();
00110 void setActorName();
00111 std::string getActorName() { return actorName; }
00112 void setPorts(const std::set<BON::FCO> &ports);
00113 void writeActorCreate(FILE *fpt);
00114 void writeActorConnect(FILE *fpt);
00115 void writeContextDef(FILE *fpt);
00116 void writeContextCreate(FILE *fpt,bool ext = true);
00117 void writeSetContext(FILE *fpt);
00118
00119 static void writeContextDefs(FILE *fpt);
00120 static void writeScriptRegs(FILE *fpt);
00121 static void writeScriptProto(FILE *fpt);
00122
00123 virtual void traverse(std::set<Primitive> &primitives);
00124
00126 };
00127
00128
00129
00130
00131
00132 class ParameterBaseImpl :
00133 virtual public BON::AtomImpl
00134 {
00135 public:
00136 typedef enum
00137 {
00138 Integer_DataType_Type,
00139 Double_DataType_Type,
00140 Character_DataType_Type,
00141 Pointer_DataType_Type
00142 } DataType_Type;
00143
00144
00145 virtual ParameterBaseImpl::DataType_Type getDataType();
00146 virtual long getSize();
00147
00149 public :
00150 int size;
00151 virtual void initialize();
00153 };
00154
00155
00156
00157
00158
00159 class InputParamImpl :
00160 public ParameterBaseImpl
00161 {
00162 public:
00163
00165 friend class PrimitiveImpl;
00166
00167 protected:
00168 Param source;
00169 public :
00170 virtual void initialize();
00172 };
00173
00174
00175
00176
00177
00178 class ParamImpl :
00179 public ParameterBaseImpl
00180 {
00181 public:
00182
00183
00184 virtual std::string getInitValue();
00185 virtual bool isGlobal();
00186
00188 friend class PrimitiveImpl;
00189 public :
00190 std::string longName;
00191 bool listed;
00192 static std::set<Param> instances;
00193
00194 public :
00195 void addToList();
00196 void writeContextDef(FILE *fpt,const std::string &fieldName);
00197 void writeGlobal(FILE *fpt,bool ext = true);
00198 void writeContextInit(FILE *fpt,std::string &actorName,const std::string &fieldName);
00199
00200 virtual void initialize();
00201
00202 static void writeGlobals(FILE *fpt,bool ext = true);
00204 };
00205
00206
00207
00208
00209
00210 class SignalImpl :
00211 virtual public BON::AtomImpl
00212 {
00213 public:
00214
00216 friend class PrimitiveImpl;
00217 public :
00218 virtual void initialize() { port = 0; }
00219 protected:
00220 std::set<Signal> connections;
00221 int yloc;
00222 int port;
00223 public:
00224 void addConnection(Signal signal) { connections.insert(signal); }
00225 void incrementPort() { port++; }
00226 void setLocation();
00228 };
00229
00230
00231
00232 };
00233
00235
00237
00238 #endif // SFBONEXTENSION_H