YARP
Yet Another Robot Platform
application.h
Go to the documentation of this file.
1 /*
2  * SPDX-FileCopyrightText: 2006-2021 Istituto Italiano di Tecnologia (IIT)
3  * SPDX-License-Identifier: BSD-3-Clause
4  */
5 
6 #ifndef YARP_MANAGER_APPLICATION
7 #define YARP_MANAGER_APPLICATION
8 
9 #include <map>
10 
11 #include <yarp/manager/ymm-types.h>
12 #include <yarp/manager/node.h>
13 #include <yarp/manager/module.h>
14 #include <yarp/manager/utility.h>
18 
19 
20 namespace yarp {
21 namespace manager {
22 
23 
27 class Portmap{
28 
29 public:
30  Portmap(const char* szOld, const char* szNew) {
31  if(szOld) { strOld = szOld; }
32  if(szNew) { strNew = szNew; }
33  }
34  virtual ~Portmap() = default;
35  const char* oldPort() { return strOld.c_str(); }
36  const char* newPort() { return strNew.c_str(); }
37  bool operator==(const Portmap& alt) const {
38  return ((strOld == alt.strOld) && (strNew == alt.strNew));
39  }
40 
41 protected:
42 
43 private:
44  std::string strOld;
45  std::string strNew;
46 };
47 
48 typedef std::vector<Portmap> PortmapContainer;
49 typedef std::vector<Portmap>::iterator PortmapIterator;
50 
51 
52 
57 {
58 public:
59  Connection() { Connection(nullptr, nullptr); }
60  Connection(const char* szFrom, const char* szTo, const char* szCr=nullptr) {
61  if(szFrom) { strFrom = szFrom; }
62  if(szTo) { strTo = szTo; }
63  if(szCr) { strCarrier = szCr; }
64  bWithPriority = false;
65  appOwner = nullptr;
66  bExternalFrom = false;
67  bExternalTo = false;
68  existsFrom = false;
69  existsTo = false;
70  bPersist = false;
71  input = nullptr;
72  output = nullptr;
73  model = nullptr;
74  }
75  virtual ~Connection() = default;
76  const char* from() { return strFrom.c_str();}
77  const char* to() { return strTo.c_str();}
78  const char* carrier() { return strCarrier.c_str(); }
79  const char* qosFrom() { return strQosFrom.c_str(); }
80  const char* qosTo() { return strQosTo.c_str(); }
81  void setFrom(const char* szFrom) { if(szFrom) { strFrom = szFrom; } }
82  void setTo(const char* szTo) { if(szTo) { strTo = szTo; } }
83  void setCarrier(const char* szCr) { if(szCr) { strCarrier = szCr; } }
84  void setFromExternal(bool ext) { bExternalFrom = ext;}
85  void setToExternal(bool ext) { bExternalTo = ext; }
86  void setFromExists(bool exists) { existsFrom = exists;}
87  void setToExists(bool exists) { existsTo = exists; }
88  bool getFromExists() const { return existsFrom; }
89  bool getToExists() const { return existsTo; }
90  void setPersistent(bool per) { bPersist = per; }
91  void setQosFrom(const char* szQos) { if(szQos) { strQosFrom = szQos; } }
92  void setQosTo(const char* szQos) { if(szQos) { strQosTo = szQos; } }
93  bool isExternalFrom() { return bExternalFrom; }
94  bool isExternalTo() { return bExternalTo; }
95  bool isPersistent() { return bPersist; }
96 
97 
98  void setId(const char* id) { if(id) { strId = id; } }
99  const char* getId() { return strId.c_str(); }
100 
101  void setOwner(Node* owner){ appOwner = owner; }
102  Node* owner() { return appOwner; }
103 
104  void setCorInputData(InputData* in) { input = in;}
105  InputData* getCorInputData() { return input;}
106  void setCorOutputData(OutputData* out) { output = out;}
107  OutputData* getCorOutputData() { return output;}
108 
109  void setPriority(bool withprio) { bWithPriority = withprio; }
110  bool withPriority() { return bWithPriority; }
111 
112  GraphicModel* getModel() { return model;}
113  void setModel(GraphicModel* mdl) { model = mdl; }
114 
115  // modelBased is used to keep the graphic and geometric
116  // information which is directly loaded from application
117  // description file.
118  GraphicModel& getModelBase() { return modelBase;}
119  void setModelBase(GraphicModel& mdl) { modelBase = mdl; }
120 
121 
122  bool operator==(const Connection& alt) const {
123  return ((strFrom == alt.strFrom) && (strTo == alt.strTo));
124  }
125 
126 protected:
127 
128 private:
129  std::string strFrom;
130  std::string strTo;
131  std::string strId;
132  bool bExternalTo;
133  bool bExternalFrom;
134  bool existsFrom;
135  bool existsTo;
136  std::string strCarrier;
137  std::string strQosFrom;
138  std::string strQosTo;
139  bool bPersist;
140  Node* appOwner;
141  bool bWithPriority;
142  InputData* input;
143  OutputData* output;
144  GraphicModel* model;
145  GraphicModel modelBase;
146 
147 };
148 
149 
150 typedef std::vector<Connection> CnnContainer;
151 typedef std::vector<Connection>::iterator CnnIterator;
152 
153 typedef std::vector<ResYarpPort> ResourceContainer;
154 typedef std::vector<ResYarpPort>::iterator ResourceIterator;
155 
156 
157 
162 
163 public:
164  ModuleInterface( const char* szName) {
165  if(szName) { strName = szName; }
166  iRank = -1;
167  waitStart = waitStop = 0.0;
168  }
169 
171 
172  virtual ~ModuleInterface() = default;
173 
174  void setHost(const char* szHost) { if(szHost) { strHost = szHost; } }
175  void setParam(const char* szParam) { if(szParam) { strParam = szParam; } }
176  void setRank(int irank) { iRank = irank; }
177  void setWorkDir(const char* szWDir) { if(szWDir) { strWorkDir = szWDir; } }
178  void setStdio(const char* szStdio) { if(szStdio) { strStdio = szStdio; } }
179  void setBroker(const char* szBroker) { if(szBroker) { strBroker = szBroker; } }
180  void setPrefix(const char* szPrefix) {if(szPrefix) { strPrefix = szPrefix; } }
181  void setEnvironment(const char* szEnv) {if(szEnv) { strEnvironment = szEnv; } }
182  void setTag(const char* szTag) {if(szTag) { strTag = szTag; } }
183  void setDisplay(const char* szDisplay) {if(szDisplay) { strDisplay = szDisplay; } }
184 
185  const char* getName() { return strName.c_str(); }
186  const char* getHost() { return strHost.c_str(); }
187  const char* getParam() { return strParam.c_str(); }
188  int getRank() { return iRank; }
189  const char* getWorkDir() { return strWorkDir.c_str(); }
190  const char* getStdio() { return strStdio.c_str(); }
191  const char* getBroker() { return strBroker.c_str(); }
192  const char* getPrefix() { return strPrefix.c_str(); }
193  const char* getEnvironment() { return strEnvironment.c_str(); }
194  const char* getTag() { return strTag.c_str(); }
195  const char* getDisplay() { return strDisplay.c_str(); }
196 
197  bool operator==(const ModuleInterface& modint) const {
198  return (strName == modint.strName);
199  }
200 
201  void addResource(ResYarpPort &res) { resources.push_back(res); }
202  ResourceContainer& getResources() { return resources; }
203 
204  void setPostExecWait(double t) { waitStart = t; }
205  double getPostExecWait() { return waitStart; }
206  void setPostStopWait(double t) { waitStop = t; }
207  double getPostStopWait() { return waitStop; }
208 
209 
210  int portmapCount() { return portmaps.size(); }
211  Portmap& getPortmapAt(int index){ return portmaps[index]; }
212  bool addPortmap(Portmap &portmap);
213  bool removePortmap(Portmap& portmap);
214 
215  //void setModule(Module* mod) { module = mod; }
216  //Module* getModule() { return module;}
217 
218  GraphicModel& getModelBase() { return modelBase;}
219  void setModelBase(GraphicModel& mdl) { modelBase = mdl; };
220 
221 
222 
223 protected:
224 
225 private:
226  std::string strName;
227  std::string strHost;
228  std::string strParam;
229  std::string strWorkDir;
230  std::string strStdio;
231  std::string strBroker;
232  std::string strPrefix;
233  std::string strEnvironment;
234  std::string strDisplay;
235  int iRank;
236  ResourceContainer resources;
237  double waitStart;
238  double waitStop;
239  PortmapContainer portmaps;
240  PortmapIterator findPortmap(Portmap& portmap);
241  std::string strTag;
242  GraphicModel modelBase;
243 };
244 
245 
246 typedef std::vector<ModuleInterface> IModuleContainer;
247 typedef std::vector<ModuleInterface>::iterator IModuleIterator;
248 
249 
254 
255 public:
256  ApplicationInterface(const char* szName) {
257  if(szName) { strName = szName; }
258  }
259  virtual ~ApplicationInterface() = default;
260  void setPrefix(const char* szPrefix) { if(szPrefix) { strPrefix = szPrefix; } }
261  const char* getName() { return strName.c_str(); }
262  const char* getPrefix() { return strPrefix.c_str(); }
263  bool operator==(const ApplicationInterface& alt) const {
264  return (strName == alt.strName);
265  }
266 
267  // modelBased is used to keep the graphic and geometric
268  // information which is directly loaded from application
269  // description file.
270  GraphicModel& getModelBase() { return modelBase;}
271  void setModelBase(GraphicModel& mdl) { modelBase = mdl; };
272 
273 
274 protected:
275 
276 private:
277  std::string strName;
278  std::string strPrefix;
279  GraphicModel modelBase;
280 };
281 
282 
283 typedef std::vector<ApplicationInterface> IApplicationContainer;
284 typedef std::vector<ApplicationInterface>::iterator IApplicationIterator;
285 
289 class Application : public Node{
290 
291 public:
292  Application();
293  Application(const char* szName);
294  Application(const Application &app);
295  ~Application() override;
296  void setName(const char* szName) {
297  if(szName){
298  strName = szName;
299  }
300  }
301  void setVersion(const char* szVersion) { if(szVersion) { strVersion = szVersion; } }
302  void setDescription(const char* szDesc) { if(szDesc) { strDescription = szDesc; } }
303  const char* getName() { return strName.c_str(); }
304  size_t getNameLenght() {return strName.length(); }
305  const char* getVersion() { return strVersion.c_str(); }
306  const char* getDescription() { return strDescription.c_str(); }
307  Node* clone() override;
308 
309  void addAuthor(Author& author) { authors.push_back(author); }
310  int authorCount() { return authors.size(); }
311  Author& getAuthorAt(int index) { return authors[index]; }
312  bool removeAuthor(Author& author);
313 
314  int imoduleCount() { return Imodules.size(); }
315  ModuleInterface& getImoduleAt(int index){ return Imodules[index]; }
316  bool addImodule(ModuleInterface &imod);
317  bool removeImodule(ModuleInterface& imod);
318  void removeAllImodules() { Imodules.clear(); }
319 
320  int iapplicationCount() { return Iapplications.size(); }
321  ApplicationInterface& getIapplicationAt(int index){ return Iapplications[index]; }
324  void removeAllIapplications() { Iapplications.clear(); }
325 
326  int resourcesCount() { return resources.size(); }
327  ResYarpPort& getResourceAt(int index){ return resources[index]; }
328  bool addResource(ResYarpPort &res);
329  bool removeResource(ResYarpPort& res);
330 
331  void setPrefix(const char* szPrefix) { if(szPrefix) { strPrefix = szPrefix; } }
332  const char* getPrefix() { return strPrefix.c_str(); }
333  void setBasePrefix(const char* szPrefix) { if(szPrefix) { strBasePrefix = szPrefix; } }
334  const char* getBasePrefix() { return strBasePrefix.c_str(); }
335 
336 
337  void setXmlFile(const char* szFilename) { if(szFilename) { strXmlFile = szFilename;} }
338  const char* getXmlFile() { return strXmlFile.c_str(); }
339 
340  int connectionCount() { return connections.size(); }
341  Connection& getConnectionAt(int index){ return connections[index]; }
343  bool removeConnection(Connection& cnn);
344  //void updateConnectionPrefix();
345 
346  int arbitratorCount() { return arbitrators.size(); }
347  Arbitrator& getArbitratorAt(int index){ return arbitrators[index]; }
349  bool removeArbitrator(Arbitrator& arb);
350 
351  void setOwner(Node* owner){ appOwner = owner; }
352  Node* owner() { return appOwner; }
353 
354 
355  bool operator==(const Application& app) const {
356  return (strName == app.strName);
357  }
358 
359  void clear() {
360  strName.clear();
361  strVersion.clear();
362  strDescription.clear();
363  strPrefix.clear();
364  strBasePrefix.clear();
365  authors.clear();
366  Imodules.clear();
367  connections.clear();
368  strXmlFile.clear();
369  Iapplications.clear();
370  resources.clear();
371  appOwner=nullptr;
372  }
373 
374  GraphicModel& getModelBase() { return modelBase;}
375  void setModelBase(GraphicModel& mdl) { modelBase = mdl; };
376 
377  std::map<std::string, int> modList;
378 
379 protected:
380 
381 private:
382  std::string strName;
383  std::string strVersion;
384  std::string strDescription;
385  AuthorContainer authors;
386  IModuleContainer Imodules;
387  IApplicationContainer Iapplications;
388  ResourceContainer resources;
389  CnnContainer connections;
390  ArbContainer arbitrators;
391  std::string strPrefix;
392  std::string strBasePrefix;
393  std::string strXmlFile;
394  Node* appOwner;
395 
396  GraphicModel modelBase;
397 
398  IModuleIterator findImodule(ModuleInterface& imod);
399  IApplicationIterator findIapplication(ApplicationInterface& iapp);
400  ResourceIterator findResource(ResYarpPort& res);
401  CnnIterator findConnection(Connection& cnn);
402  ArbIterator findArbitrator(Arbitrator& arb);
403 
404 };
405 
406 typedef std::vector<Application*> ApplicaitonPContainer;
407 typedef std::vector<Application*>::iterator ApplicationPIterator;
408 
409 } // namespace yarp
410 } // namespace manager
411 
412 
413 #endif // __YARP_MANAGER_APPLICATION__
float t
static RFModule * module
Definition: RFModule.cpp:231
Class ApplicationInterface.
Definition: application.h:253
bool operator==(const ApplicationInterface &alt) const
Definition: application.h:263
void setModelBase(GraphicModel &mdl)
Definition: application.h:271
void setPrefix(const char *szPrefix)
Definition: application.h:260
ApplicationInterface(const char *szName)
Definition: application.h:256
virtual ~ApplicationInterface()=default
Class Application.
Definition: application.h:289
std::map< std::string, int > modList
Definition: application.h:375
bool removeAuthor(Author &author)
Connection & getConnectionAt(int index)
Definition: application.h:341
ResYarpPort & getResourceAt(int index)
Definition: application.h:327
const char * getPrefix()
Definition: application.h:332
void setName(const char *szName)
Definition: application.h:296
bool operator==(const Application &app) const
Definition: application.h:355
Arbitrator & addArbitrator(Arbitrator &arb)
bool addIapplication(ApplicationInterface &iapp)
Node * clone() override
void setBasePrefix(const char *szPrefix)
Definition: application.h:333
const char * getBasePrefix()
Definition: application.h:334
bool removeImodule(ModuleInterface &imod)
bool removeConnection(Connection &cnn)
const char * getVersion()
Definition: application.h:305
void addAuthor(Author &author)
Definition: application.h:309
void setXmlFile(const char *szFilename)
Definition: application.h:337
bool removeResource(ResYarpPort &res)
void setModelBase(GraphicModel &mdl)
Definition: application.h:375
void setVersion(const char *szVersion)
Definition: application.h:301
ApplicationInterface & getIapplicationAt(int index)
Definition: application.h:321
void setDescription(const char *szDesc)
Definition: application.h:302
Connection & addConnection(Connection &cnn)
ModuleInterface & getImoduleAt(int index)
Definition: application.h:315
void setOwner(Node *owner)
Definition: application.h:351
const char * getDescription()
Definition: application.h:306
GraphicModel & getModelBase()
Definition: application.h:374
Arbitrator & getArbitratorAt(int index)
Definition: application.h:347
bool removeArbitrator(Arbitrator &arb)
bool addResource(ResYarpPort &res)
bool removeIapplication(ApplicationInterface &iapp)
bool addImodule(ModuleInterface &imod)
Author & getAuthorAt(int index)
Definition: application.h:311
const char * getXmlFile()
Definition: application.h:338
void setPrefix(const char *szPrefix)
Definition: application.h:331
Application()
Class Application.
Definition: application.cpp:77
Class port Arbitrator.
Definition: arbitrator.h:25
Class Connection.
Definition: application.h:57
void setPriority(bool withprio)
Definition: application.h:109
void setTo(const char *szTo)
Definition: application.h:82
bool operator==(const Connection &alt) const
Definition: application.h:122
const char * qosFrom()
Definition: application.h:79
bool getFromExists() const
Definition: application.h:88
GraphicModel * getModel()
Definition: application.h:112
void setFromExternal(bool ext)
Definition: application.h:84
void setCarrier(const char *szCr)
Definition: application.h:83
void setToExists(bool exists)
Definition: application.h:87
void setToExternal(bool ext)
Definition: application.h:85
void setPersistent(bool per)
Definition: application.h:90
void setQosFrom(const char *szQos)
Definition: application.h:91
void setOwner(Node *owner)
Definition: application.h:101
OutputData * getCorOutputData()
Definition: application.h:107
void setCorOutputData(OutputData *out)
Definition: application.h:106
GraphicModel & getModelBase()
Definition: application.h:118
bool getToExists() const
Definition: application.h:89
void setFromExists(bool exists)
Definition: application.h:86
void setModelBase(GraphicModel &mdl)
Definition: application.h:119
void setId(const char *id)
Definition: application.h:98
void setFrom(const char *szFrom)
Definition: application.h:81
void setModel(GraphicModel *mdl)
Definition: application.h:113
InputData * getCorInputData()
Definition: application.h:105
void setQosTo(const char *szQos)
Definition: application.h:92
const char * qosTo()
Definition: application.h:80
Connection(const char *szFrom, const char *szTo, const char *szCr=nullptr)
Definition: application.h:60
virtual ~Connection()=default
const char * carrier()
Definition: application.h:78
void setCorInputData(InputData *in)
Definition: application.h:104
const char * getId()
Definition: application.h:99
Class InputData.
Definition: data.h:22
Class ModuleInterface.
Definition: application.h:161
GraphicModel & getModelBase()
Definition: application.h:218
bool removePortmap(Portmap &portmap)
Definition: application.cpp:51
void setDisplay(const char *szDisplay)
Definition: application.h:183
void setHost(const char *szHost)
Definition: application.h:174
void setWorkDir(const char *szWDir)
Definition: application.h:177
virtual ~ModuleInterface()=default
bool addPortmap(Portmap &portmap)
Definition: application.cpp:44
void setParam(const char *szParam)
Definition: application.h:175
void setStdio(const char *szStdio)
Definition: application.h:178
void setTag(const char *szTag)
Definition: application.h:182
void setPrefix(const char *szPrefix)
Definition: application.h:180
Portmap & getPortmapAt(int index)
Definition: application.h:211
void addResource(ResYarpPort &res)
Definition: application.h:201
ModuleInterface(const char *szName)
Definition: application.h:164
ResourceContainer & getResources()
Definition: application.h:202
bool operator==(const ModuleInterface &modint) const
Definition: application.h:197
void setEnvironment(const char *szEnv)
Definition: application.h:181
void setBroker(const char *szBroker)
Definition: application.h:179
void setModelBase(GraphicModel &mdl)
Definition: application.h:219
Class Module.
Definition: module.h:100
a Node of a Graph
Definition: node.h:65
Class Portmap.
Definition: application.h:27
const char * newPort()
Definition: application.h:36
bool operator==(const Portmap &alt) const
Definition: application.h:37
const char * oldPort()
Definition: application.h:35
virtual ~Portmap()=default
Portmap(const char *szOld, const char *szNew)
Definition: application.h:30
std::vector< Portmap >::iterator PortmapIterator
Definition: application.h:49
std::vector< Application * >::iterator ApplicationPIterator
Definition: application.h:407
std::vector< Arbitrator > ArbContainer
Definition: arbitrator.h:91
std::vector< ResYarpPort > ResourceContainer
Definition: application.h:153
std::vector< ResYarpPort >::iterator ResourceIterator
Definition: application.h:154
std::vector< Portmap > PortmapContainer
Definition: application.h:48
std::vector< ModuleInterface >::iterator IModuleIterator
Definition: application.h:247
std::vector< Arbitrator >::iterator ArbIterator
Definition: arbitrator.h:92
std::vector< ApplicationInterface >::iterator IApplicationIterator
Definition: application.h:284
std::vector< Connection >::iterator CnnIterator
Definition: application.h:151
std::vector< ModuleInterface > IModuleContainer
Definition: application.h:246
std::vector< Author > AuthorContainer
Definition: module.h:90
std::vector< Application * > ApplicaitonPContainer
Definition: application.h:406
std::vector< Connection > CnnContainer
Definition: application.h:150
std::vector< ApplicationInterface > IApplicationContainer
Definition: application.h:283
The main, catch-all namespace for YARP.
Definition: dirs.h:16