VR-Forces 4.0.4 Class Documentation
include/vrfobjcore/embarkationSlotManager.h
Go to the documentation of this file.
00001 /*******************************************************************************
00002 ** Copyright (c) 2005 MAK Technologies, Inc.
00003 ** All rights reserved.
00004 *******************************************************************************/
00005 /*******************************************************************************
00006 ** $RCSfile: embarkationSlotManager.h,v $ $Revision: 1.8 $ $State: Exp $
00007 *******************************************************************************/
00008 
00011 
00012 #ifndef DtEmbarkationSlotManager_H_
00013 #define DtEmbarkationSlotManager_H_
00014 
00015 #include <vlutil/vlConfig.h>
00016 #include <map>
00017 #include "vrfobjparam/loadPoint.h"
00018 #include "vrfobjparam/slotExclusion.h"
00019 #include "vrfutil/rwTemplatedList.h"
00020 #include "vrfutil/rwString.h"
00021 #include "vrfutil/rwInt.h"
00022 
00023 class DtEmbarkationSlotEntry;
00024 class DtVrfObject;
00025 class DtSimManager;
00026 
00027 #include "vrfobjcore/vrfobjcoreDefines.h"
00028 class DT_DLL_vrfobjcore DtReservedEmbarkationSlotEntry
00029 {
00030 public:
00031    const DtEmbarkationSlotEntry* myEntry;
00032    std::list<DtString>           myReservedBy;
00033 
00034    void addReservedBy(const DtString&);
00035    void removeReservedBy(const DtString&);
00036    bool reservedBy(const DtString&) const;
00037 
00038 };
00039 
00040 class DT_DLL_vrfobjcore DtEmbarkationSlotInformation
00041 {
00042 public:
00043    DtEmbarkationSlotInformation() : myEntry(NULL), mySlot(-1) {};
00044 
00045    DtEmbarkationSlotInformation& operator=(const DtEmbarkationSlotInformation& orig)
00046    {
00047       myEntry = orig.myEntry;
00048       mySlot = orig.mySlot;
00049       myLoadPath = orig.myLoadPath;
00050 
00051       return *this;
00052    }
00053 
00054 public:
00055    const DtEmbarkationSlotEntry* myEntry;
00056    int                           mySlot;
00057    std::vector<DtVector>         myLoadPath;
00058 };
00059 
00060 class DT_DLL_vrfobjcore DtReservedSlot : public DtReaderWriter
00061 {
00062 public:
00063    DtReservedSlot(const DtString& name, DtReaderWriterRegistry* 
00064       parentRegistry = NULL);
00065    DtReservedSlot(const DtSymbolString& name, DtReaderWriterRegistry* 
00066       parentRegistry = NULL);
00067 
00069    DtReservedSlot(const DtString& name, const 
00070       DtReservedSlot& orig, DtReaderWriterRegistry* 
00071       parentRegistry = NULL);
00072 
00073    DtReservedSlot(const DtSymbolString& name, const 
00074       DtReservedSlot& orig, DtReaderWriterRegistry* 
00075       parentRegistry = NULL);
00076 
00077    virtual ~DtReservedSlot();
00078 
00079    int reservedSlot() const;
00080    void setReservedSlot(int);
00081 
00082    const DtRwTemplatedListPtr<DtRwString>& reservedBy() const;
00083    void addReservedBy(const DtString&);
00084 
00085 protected:
00086    DtRwInt                          myReservedSlot;
00087    DtRwTemplatedListPtr<DtRwString> myReservedBy;
00088 };
00089 
00090 typedef std::map<int, DtReservedEmbarkationSlotEntry>   DtEmbarkationSlotEntryMap;
00091 typedef std::vector<DtLoadPoint> DtLoadPathPoints;
00092 
00093 class DT_DLL_vrfobjcore DtEmbarkationSlotManager : public DtReaderWriter
00094 {
00095 public:
00096    DtEmbarkationSlotManager(const DtString& name, DtReaderWriterRegistry* 
00097       parentRegistry = NULL);
00098    DtEmbarkationSlotManager(const DtSymbolString& name, DtReaderWriterRegistry* 
00099       parentRegistry = NULL);
00100 
00102    DtEmbarkationSlotManager(const DtString& name, const 
00103       DtEmbarkationSlotManager& orig, DtReaderWriterRegistry* 
00104       parentRegistry = NULL);
00105 
00106    DtEmbarkationSlotManager(const DtSymbolString& name, const 
00107       DtEmbarkationSlotManager& orig, DtReaderWriterRegistry* 
00108       parentRegistry = NULL);
00109 
00110    virtual ~DtEmbarkationSlotManager();
00111 
00112    virtual void addSlot(int iSlot, const DtEmbarkationSlotEntry*);
00115    virtual DtEmbarkationSlotInformation slotFor(const DtVrfObject* embarkingObject,
00116       const DtVrfObject* hostObject) const;
00117 
00119    virtual DtEmbarkationSlotInformation entityEmbarkationSlotInformation(const DtVrfObject*) const;
00120 
00123    virtual bool blocked(int iSlot) const;
00124    virtual void addSlotExclusion(const DtSlotExclusion&);
00125 
00127    virtual bool canEmbark(const DtEmbarkationSlotEntry*, const DtVrfObject*) const;
00128 
00130    virtual bool reserveSlot(int iSlot, const DtString&);
00131 
00132    virtual void addIngressPoint(const DtLoadPoint&);
00134    virtual void ingressPoints(int iSlot, const DtVrfObject* embarkingObject,
00135       const DtVrfObject* hostObject, DtEmbarkationSlotInformation& info) const;
00136 
00137    virtual void addEgressPoint(const DtLoadPoint&);
00138    virtual void egressPoints(int iSlot, DtEmbarkationSlotInformation& info) const;
00139 
00141    virtual void giveUpSlot(int, const DtString&);
00142 
00144    virtual DtEmbarkationSlotManager* clone(const DtString& name, DtReaderWriterRegistry* 
00145       parentRegistry = NULL);
00146 
00150    virtual void calculateDisembarkPositions(const std::list<DtString>&, DtSimManager*);
00151 
00157    virtual DtVector nextDisembarkPosition(const DtVrfObject* parent, const DtVrfObject* disembarking,
00158       const DtSimManager* simMgr, const DtVector& lastBodyPos, bool tasked);
00159 
00162    virtual void setScalingFactor(double);
00163    virtual double scalingFactor() const;
00164 
00165 protected:
00168    virtual void calculateGridSize(const std::list<DtString>&, DtSimManager*);
00169 
00172    virtual void calculateGridCellSize(const std::list<DtString>&, DtSimManager*);
00173 
00176    virtual DtDcm finalPositionTransformationMatrix(const DtVrfObject* parent, const DtVector& lastBodyPos) const;
00177 
00178 protected:
00180    virtual bool slotMatches(const DtLoadPoint*, int iSlot) const;
00181 
00183    virtual void putData(FILE *fp, int indentLevel = 0);
00184 
00185    virtual bool blocked(int iSlot, const DtSlotExclusion&) const;
00186 
00193    virtual const DtLoadPoint* bestIngressFor(const DtLoadPoint* ingressA, 
00194       const DtLoadPoint* ingressB, const DtVrfObject* embarkingObject,
00195       const DtVrfObject* hostObject) const;
00196 
00199    virtual DtVector bodyPositionToLocalPosition(const DtVector& bodyPosition,
00200       const DtVrfObject* body) const;
00201 
00202 protected:
00203    DtEmbarkationSlotEntryMap              mySlots;
00204    DtRwTemplatedListPtr<DtLoadPoint>      myIngressPoints;
00205    DtRwTemplatedListPtr<DtLoadPoint>      myEgressPoints;
00206    DtRwTemplatedListPtr<DtSlotExclusion>  mySlotExclusions;
00207 
00210    DtRwVector                             myDisembarkGridSize;
00211 
00213    DtRwVector                             myDisembarkGridCellSize;
00214 
00216    DtRwInt                                myDisembarkGridCell;
00217 
00219    DtRwTemplatedListPtr<DtReservedSlot>   myReservedSlots;
00220 
00222    double                                 myScalingFactor;
00223 };
00224 
00225 inline int DtReservedSlot::reservedSlot() const
00226 {
00227    return myReservedSlot;
00228 }
00229 
00230 inline void DtReservedSlot::setReservedSlot(int s)
00231 {
00232    myReservedSlot = s;
00233 }
00234 
00235 inline void DtReservedSlot::addReservedBy(const DtString& s)
00236 {
00237    myReservedBy.add(new DtRwString("reserved-by", s));
00238 }
00239 
00240 inline const DtRwTemplatedListPtr<DtRwString>& DtReservedSlot::reservedBy() const
00241 {
00242    return myReservedBy;
00243 }
00244 
00245 #endif

Document ID: Generated on Fri Jun 29 16:33:32 EDT 2012 from SVN revision 116588
Copyright © 2005-2012 VT MÄK Inc. All Rights Reserved (www.mak.com)