VR-Forces 4.7 Class Documentation
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
simComponent.h
Go to the documentation of this file.
1 /*******************************************************************************
2 ** Copyright (c) 2012 MAK Technologies, Inc.
3 ** All rights reserved.
4 *******************************************************************************/
5 
6 #pragma once
7 
11 
15 
16 #include <vlutil/vlString.h>
17 #include <vlutil/vlList.h>
21 #include <vlutil/vlHashlist.h>
29 #include "vrfutil/itt.h"
30 #include <list>
31 
32 class DtSimManager;
33 class DtVrfObject;
35 class DtInputPort;
36 class DtOutputPort;
37 class DtInputPortGroup;
38 class DtOutputPortGroup;
39 class DtAttachedTerrain;
40 class DtPhysicalWorld;
41 class Coordinate_System;
42 class DtComponentSystem;
45 class DtCriticalSection;
47 
78  , public DtObjectDebugger<DtSimComponent>
79 {
80 public:
81 
86  {
87  public:
89  explicit ComponentCriticalSection(
91 
92  explicit ComponentCriticalSection(
94 
97 
99 
101  void reset(DtParallelTickManager::AccessType access);
102 
104  void unlock();
105 
107  void lockShared();
108 
110  void lock();
111 
112  private:
115  };
116 
122  static DtSimComponent* MarkThreadSafe(DtSimComponent*);
123 
131  DtSimComponent(const DtString& name,
132  DtVrfObject* owner,
133  DtSimManager* simManager,
134  DtComponentDescriptor* desc = 0,
135  DtReaderWriterRegistry* parentRegistry = 0);
136 
138  virtual ~DtSimComponent();
139 
144  void setParentSystem(DtComponentSystem* system);
145 
148  virtual bool init();
149 
153  virtual bool postAddComponentsInit() { return true; }
154 
158  virtual void registerAttributeFunctions(){}
159 
163  virtual void enable();
164  virtual void disable();
165  virtual bool isEnabled();
166  virtual void setIsEnabled(bool yesNo);
168 
172  virtual void preFirstTickInit();
173 
177  virtual void tick();
178 
182  virtual void postTick();
183 
191  virtual void timedTick();
192 
195  virtual void setMinTickPeriod(double minTickPeriod);
196 
198  virtual double minTickPeriod() const;
199 
201  virtual void setMinTickPeriodVariance(double minTickPeriodVariance);
202 
204  virtual double minTickPeriodVariance() const;
205 
209  virtual void setNextTickTime(double nextTickTime);
210 
212  virtual double nextTickTime() const;
213 
219  virtual double calculateNextTickTime() const;
220 
225  virtual double calculateFirstTickTime() const;
226 
233  virtual const char* type() const = 0;
234 
241  virtual void setEntity(DtVrfObject* entity);
242 
244  virtual DtSimComponent* nextComponent();
245  virtual DtSimComponent* prevComponent();
246 
248  virtual void setListItem(DtListItem* item);
249  virtual DtListItem* listItem();
250 
253  virtual void putData(std::string& fp, int indentLevel = 0);
254 
257  virtual DtlObjPtr getData(DtlObjPtr args, const DtReaderWriter::SearchPaths& searchPaths,
258  const DtVariableBindingsList& variableBindings);
259 
262  virtual void addInputPort(DtInputPort* port);
263  virtual void removeInputPort(DtInputPort* port);
264 
270  virtual DtInputPort* lookupInputPort(const DtString& portName);
271 
273  virtual DtList inputPortList() const;
274 
277  virtual void addOutputPort(DtOutputPort* port);
278  virtual void removeOutputPort(DtOutputPort* port);
279 
285  virtual DtOutputPort* lookupOutputPort(const DtString& portName);
286 
288  virtual DtList outputPortList() const;
289 
292  virtual void addInputPortGroup(DtInputPortGroup* group);
293  virtual void removeInputPortGroup(DtInputPortGroup* group);
294 
297  virtual DtInputPortGroup* lookupInputPortGroup(const DtString& groupName);
298 
300  virtual DtList inputPortGroupList() const;
301 
304  virtual void addOutputPortGroup(DtOutputPortGroup* group);
305  virtual void removeOutputPortGroup(DtOutputPortGroup* group);
306 
309  virtual DtOutputPortGroup* lookupOutputPortGroup(const DtString& groupName);
310 
312  virtual DtList outputPortGroupList() const;
313 
320  virtual int priority() const;
326  virtual void setPriority(int priority);
327 
331  double dT() const;
332 
337  virtual void setDT(double deltaT);
338 
342  virtual void setComponentDescriptor(DtComponentDescriptor* componentDescriptor);
343  virtual const DtComponentDescriptor* componentDescriptor() const;
344 
349  virtual bool tickWhileDestroyed() const;
350 
353  virtual DtOutputStream& objectConsoleDebug(const DtString& channel = "") const;
354  virtual DtOutputStream& objectConsoleVerbose(const DtString& channel = "") const;
355  virtual DtOutputStream& objectConsoleInfo(const DtString& channel = "") const;
356  virtual DtOutputStream& objectConsoleWarn(const DtString& channel = "") const;
357  virtual DtOutputStream& objectConsoleError(const DtString& channel = "") const;
359 
365 
368 
369  virtual DtSimResourceManager& resourceManager();
370  virtual const DtSimResourceManager& resourceManager() const;
372 
376  virtual DtString componentFullName() const;
377 
381  static DtSimComponentFactory* factory();
382  static void setFactory(DtSimComponentFactory* factory);
383 
386  static DtSimComponent* createComponent(const DtString& name,
387  const DtString& type, DtVrfObject* owner, DtSimManager* simManager,
388  DtComponentSystem* parentSystem,
389  DtComponentDescriptor* desc = 0,
390  DtReaderWriterRegistry* parentRegistry = 0);
391 
397  static void addSimComponentCreatorFcn(const DtString& type,
399 
401  virtual DtPhysicalWorld* physicalWorld();
402  virtual const DtPhysicalWorld* physicalWorld() const;
403 
405  virtual DtAttachedTerrain* terrainAttachedTo();
406  virtual const DtAttachedTerrain* terrainAttachedTo() const;
407 
409  virtual DtVrfObject* entity();
410  virtual const DtVrfObject* entity() const;
411 
413  virtual DtSimManager* simManager();
414  virtual const DtSimManager* simManager() const;
415 
420  virtual const Coordinate_System* coordinateSystem() const;
421  virtual Coordinate_System* coordinateSystem();
422 
424  virtual DtVrfObjectStateRepository* localStateRepository();
425  virtual const DtVrfObjectStateRepository* localStateRepository() const;
426 
428  virtual DtTaskVisualizationMap& taskVisualizations();
429 
433  virtual bool taskVisualizationsActive() const;
434 
440  virtual bool taskVisualizationsEnabled() const;
441 
443  virtual bool isThreadSafe() const;
444 
448  virtual void addVRLinkDeferredJob(const boost::function<void()>& callback);
449 
451  virtual void onRestore();
452 
453 protected:
454 
456  virtual double computeCurrentTime();
457 
462  bool testInvariant() const;
463 
467  virtual bool createPortGroups();
468 
472  virtual bool createPorts();
473 
482  DtVrfProcessStateRepository* createComponentPsr(const DtString& defaultPsrType,
483  const DtString& defaultPsrName, bool useDescriptorParams = true);
484 
487  virtual void updateTaskVisualizations() {};
488 
490  virtual void destroyTaskVisualizations();
491 
493  virtual void destroyTaskVisualization(const DtString& name);
494 
496  virtual DtPointTaskVisualizationPtr pointTaskVisualization(const DtString& name);
497 
499  virtual DtLineTaskVisualizationPtr lineTaskVisualization(const DtString& name);
500 
502  virtual DtAreaTaskVisualizationPtr areaTaskVisualization(const DtString& name);
503 
505  virtual DtTextTaskVisualizationPtr textTaskVisualization(const DtString& name);
506 
508  double calculateNextTaskVisTickTime() const;
509 
510 private:
513  DtSimComponent();
514 
516  DtSimComponent(const DtSimComponent& orig);
517 
519  DtSimComponent& operator=(const DtSimComponent& orig);
520 
521 
522 protected:
528  DtListItem* myListItem;
529 
530  typedef std::map<DtString, DtInputPort*> DtInputPortMap;
531  typedef std::map<DtString, DtOutputPort*> DtOutputPortMap;
532  typedef std::map<DtString, DtInputPortGroup*> DtInputPortGroupMap;
533  typedef std::map<DtString, DtOutputPortGroup*> DtOutputPortGroupMap;
534 
539 
541 
543 
548  double myDT;
549 
553 
557 
562 
564 
567  std::list<DtVrfProcessStateRepository*> myComponentPsrs;
568 
571 
574 
577 
579 };
580 
581 inline double DtSimComponent::dT() const
582 {
583  return myDT;
584 }
585 

Document ID: Generated on Fri Apr 26 21:53:14 EDT 2019 from SVN revision 197883
Copyright © 2005-2019 VT MAK. All Rights Reserved (www.mak.com)