From: <den...@us...> - 2009-06-20 22:52:25
|
Revision: 18 http://air-sched.svn.sourceforge.net/air-sched/?rev=18&view=rev Author: denis_arnaud Date: 2009-06-20 22:52:17 +0000 (Sat, 20 Jun 2009) Log Message: ----------- [Dev] Much simplified the interface through the use of type definitions and template parameter type deduction. Modified Paths: -------------- trunk/airsched/airsched/bom/FlightDate.cpp trunk/airsched/airsched/bom/FlightDate.hpp trunk/airsched/airsched/bom/SegmentDate.cpp trunk/airsched/airsched/bom/SegmentDate.hpp trunk/airsched/airsched/command/Simulator.cpp trunk/airsched/stdair/bom/BomContentRoot.cpp trunk/airsched/stdair/bom/BomContentRoot.hpp trunk/airsched/stdair/bom/BomStructureRoot.cpp trunk/airsched/stdair/bom/BomStructureRoot.hpp trunk/airsched/stdair/bom/BomStructureRootKey.hpp trunk/airsched/stdair/bom/FlightDate.cpp trunk/airsched/stdair/bom/FlightDate.hpp trunk/airsched/stdair/bom/FlightDateKey.hpp trunk/airsched/stdair/bom/SegmentDate.cpp trunk/airsched/stdair/bom/SegmentDate.hpp trunk/airsched/stdair/bom/SegmentDateKey.hpp trunk/airsched/stdair/factory/FacBomContent.cpp trunk/airsched/stdair/factory/FacBomContent.hpp trunk/airsched/stdair/factory/FacBomStructure.hpp Modified: trunk/airsched/airsched/bom/FlightDate.cpp =================================================================== --- trunk/airsched/airsched/bom/FlightDate.cpp 2009-06-18 22:24:40 UTC (rev 17) +++ trunk/airsched/airsched/bom/FlightDate.cpp 2009-06-20 22:52:17 UTC (rev 18) @@ -14,7 +14,7 @@ namespace AIRSCHED { // //////////////////////////////////////////////////////////////////// - FlightDate::FlightDate (const STDAIR::FlightDate& iFlightStructure) + FlightDate::FlightDate (const BomStructure_T& iFlightStructure) : _flightStructure (iFlightStructure) { } Modified: trunk/airsched/airsched/bom/FlightDate.hpp =================================================================== --- trunk/airsched/airsched/bom/FlightDate.hpp 2009-06-18 22:24:40 UTC (rev 17) +++ trunk/airsched/airsched/bom/FlightDate.hpp 2009-06-20 22:52:17 UTC (rev 18) @@ -9,6 +9,7 @@ // Forward declarations namespace STDAIR { + class BomContentRoot; class FlightDate; class FacBomContent; } @@ -18,10 +19,21 @@ /** Class representing the actual functional/business content for a flight-date. */ class FlightDate : public STDAIR::BomContent { - friend class FacFlightDate; friend class STDAIR::FacBomContent; + + private: + // Type definitions + /** Definition allowing to retrieve the associated parent + BOM content type. */ + typedef STDAIR::BomContentRoot ParentBomContent_T; + + /** Definition allowing to retrieve the associated BOM structure type. */ + typedef STDAIR::FlightDate BomStructure_T; + + /** Definition allowing to retrieve the associated BOM key type. */ + typedef STDAIR::FlightDateKey BomKey_T; + public: - // /////////// Display support methods ///////// /** Dump a Business Object into an output stream. @param ostream& the output stream. */ @@ -48,7 +60,7 @@ /** Default constructors. */ FlightDate (); FlightDate (const FlightDate&); - FlightDate (const STDAIR::FlightDate&); + FlightDate (const BomStructure_T&); /** Destructor. */ virtual ~FlightDate(); @@ -56,7 +68,7 @@ private: // Attributes /** Reference structure. */ - const STDAIR::FlightDate& _flightStructure; + const BomStructure_T& _flightStructure; }; } Modified: trunk/airsched/airsched/bom/SegmentDate.cpp =================================================================== --- trunk/airsched/airsched/bom/SegmentDate.cpp 2009-06-18 22:24:40 UTC (rev 17) +++ trunk/airsched/airsched/bom/SegmentDate.cpp 2009-06-20 22:52:17 UTC (rev 18) @@ -11,8 +11,8 @@ namespace AIRSCHED { // //////////////////////////////////////////////////////////////////// - SegmentDate::SegmentDate (const STDAIR::SegmentDate& iSegmentStructure) - : _segmentStructure (iSegmentStructure) { + SegmentDate::SegmentDate (const BomStructure_T& iSegmentStructure) + : _bomStructure (iSegmentStructure) { } // //////////////////////////////////////////////////////////////////// @@ -43,12 +43,12 @@ // ////////////////////////////////////////////////////////////////////// const std::string SegmentDate::describeKey() const { - return _segmentStructure.describeKey(); + return _bomStructure.describeKey(); } // ////////////////////////////////////////////////////////////////////// const std::string SegmentDate::describeShortKey() const { - return _segmentStructure.describeShortKey(); + return _bomStructure.describeShortKey(); } } Modified: trunk/airsched/airsched/bom/SegmentDate.hpp =================================================================== --- trunk/airsched/airsched/bom/SegmentDate.hpp 2009-06-18 22:24:40 UTC (rev 17) +++ trunk/airsched/airsched/bom/SegmentDate.hpp 2009-06-20 22:52:17 UTC (rev 18) @@ -15,11 +15,26 @@ namespace AIRSCHED { + // Forward declarations + class FlightDate; + /** Class representing the actual functional/business content for a segment-date. */ class SegmentDate : public STDAIR::BomContent { - friend class FacSegmentDate; friend class STDAIR::FacBomContent; + + private: + // Type definitions + /** Definition allowing to retrieve the associated parent + BOM content type. */ + typedef FlightDate ParentBomContent_T; + + /** Definition allowing to retrieve the associated BOM structure type. */ + typedef STDAIR::SegmentDate BomStructure_T; + + /** Definition allowing to retrieve the associated BOM key type. */ + typedef STDAIR::SegmentDateKey BomKey_T; + public: // /////////// Display support methods ///////// @@ -48,7 +63,7 @@ /** Default constructors. */ SegmentDate (); SegmentDate (const SegmentDate&); - SegmentDate (const STDAIR::SegmentDate&); + SegmentDate (const BomStructure_T&); /** Destructor. */ virtual ~SegmentDate(); @@ -56,7 +71,7 @@ private: // Attributes /** Reference structure. */ - const STDAIR::SegmentDate& _segmentStructure; + const BomStructure_T& _bomStructure; }; } Modified: trunk/airsched/airsched/command/Simulator.cpp =================================================================== --- trunk/airsched/airsched/command/Simulator.cpp 2009-06-18 22:24:40 UTC (rev 17) +++ trunk/airsched/airsched/command/Simulator.cpp 2009-06-20 22:52:17 UTC (rev 18) @@ -36,10 +36,9 @@ const STDAIR::Date_T lDate (2010, 6, 10); const STDAIR::FlightDateKey lFlightDateKey (lFlightNumber, lDate); - FlightDate& lFlightDate = STDAIR::FacBomContent::instance(). - create<STDAIR::FlightDateKey, STDAIR::BomStructureRoot,STDAIR::FlightDate, - STDAIR::FlightDateList_T, STDAIR::BomContentRoot, - FlightDate> (lBomContentRoot, lFlightDateKey); + FlightDate& lFlightDate = + STDAIR::FacBomContent::instance().create<FlightDate> (lBomContentRoot, + lFlightDateKey); // Display the flight-date AIRSCHED_LOG_DEBUG ("FlightDate: " << lFlightDate); @@ -51,10 +50,9 @@ const STDAIR::AirportCode_T lSYD ("SYD"); STDAIR::SegmentDateKey lSegmentDateKey (lLHR, lSYD); - SegmentDate& lLHRSYDSegment = STDAIR::FacBomContent::instance(). - create<STDAIR::SegmentDateKey, STDAIR::FlightDate, STDAIR::SegmentDate, - STDAIR::SegmentDateList_T, FlightDate, - SegmentDate> (lFlightDate, lSegmentDateKey); + SegmentDate& lLHRSYDSegment = + STDAIR::FacBomContent::instance().create<SegmentDate> (lFlightDate, + lSegmentDateKey); // SegmentDate& lLHRSYDSegment = // FacSegmentDate::instance().create (lFlightDate, lSegmentDateKey); @@ -66,10 +64,9 @@ const STDAIR::AirportCode_T lBKK ("BKK"); lSegmentDateKey = STDAIR::SegmentDateKey (lLHR, lBKK); - SegmentDate& lLHRBKKSegment = STDAIR::FacBomContent::instance(). - create<STDAIR::SegmentDateKey, STDAIR::FlightDate, STDAIR::SegmentDate, - STDAIR::SegmentDateList_T, FlightDate, - SegmentDate> (lFlightDate, lSegmentDateKey); + SegmentDate& lLHRBKKSegment = + STDAIR::FacBomContent::instance().create<SegmentDate> (lFlightDate, + lSegmentDateKey); // SegmentDate& lLHRBKKSegment = // FacSegmentDate::instance().create (lFlightDate, lSegmentDateKey); @@ -80,10 +77,9 @@ // Create a third SegmentDate (BKK-SYD) lSegmentDateKey = STDAIR::SegmentDateKey (lBKK, lSYD); - SegmentDate& lBKKSYDSegment = STDAIR::FacBomContent::instance(). - create<STDAIR::SegmentDateKey, STDAIR::FlightDate, STDAIR::SegmentDate, - STDAIR::SegmentDateList_T, FlightDate, - SegmentDate> (lFlightDate, lSegmentDateKey); + SegmentDate& lBKKSYDSegment = + STDAIR::FacBomContent::instance().create<SegmentDate> (lFlightDate, + lSegmentDateKey); // SegmentDate& lBKKSYDSegment = // FacSegmentDate::instance().create (lFlightDate, lSegmentDateKey); Modified: trunk/airsched/stdair/bom/BomContentRoot.cpp =================================================================== --- trunk/airsched/stdair/bom/BomContentRoot.cpp 2009-06-18 22:24:40 UTC (rev 17) +++ trunk/airsched/stdair/bom/BomContentRoot.cpp 2009-06-20 22:52:17 UTC (rev 18) @@ -12,7 +12,7 @@ namespace STDAIR { // //////////////////////////////////////////////////////////////////// - BomContentRoot::BomContentRoot (const BomStructureRoot& iBomStructure) + BomContentRoot::BomContentRoot (const BomStructure_T& iBomStructure) : _bomStructure (iBomStructure) { } Modified: trunk/airsched/stdair/bom/BomContentRoot.hpp =================================================================== --- trunk/airsched/stdair/bom/BomContentRoot.hpp 2009-06-18 22:24:40 UTC (rev 17) +++ trunk/airsched/stdair/bom/BomContentRoot.hpp 2009-06-20 22:52:17 UTC (rev 18) @@ -18,8 +18,16 @@ of the Bom tree. */ class BomContentRoot : public BomContent { friend class FacBomContent; + + private: + // Type definitions + /** Definition allowing to retrieve the associated BOM structure type. */ + typedef BomStructureRoot BomStructure_T; + + /** Definition allowing to retrieve the associated BOM key type. */ + typedef BomStructureRootKey BomKey_T; + public: - // /////////// Display support methods ///////// /** Dump a Business Object into an output stream. @param ostream& the output stream. */ @@ -46,7 +54,7 @@ /** Default constructors. */ BomContentRoot (); BomContentRoot (const BomContentRoot&); - BomContentRoot (const BomStructureRoot&); + BomContentRoot (const BomStructure_T&); /** Destructor. */ virtual ~BomContentRoot(); @@ -54,7 +62,7 @@ private: // Attributes /** Reference structure. */ - const BomStructureRoot& _bomStructure; + const BomStructure_T& _bomStructure; }; } Modified: trunk/airsched/stdair/bom/BomStructureRoot.cpp =================================================================== --- trunk/airsched/stdair/bom/BomStructureRoot.cpp 2009-06-18 22:24:40 UTC (rev 17) +++ trunk/airsched/stdair/bom/BomStructureRoot.cpp 2009-06-20 22:52:17 UTC (rev 18) @@ -9,7 +9,7 @@ namespace STDAIR { // //////////////////////////////////////////////////////////////////// - BomStructureRoot::BomStructureRoot (const BomStructureRootKey& iKey) + BomStructureRoot::BomStructureRoot (const BomKey_T& iKey) : _key (iKey) { } Modified: trunk/airsched/stdair/bom/BomStructureRoot.hpp =================================================================== --- trunk/airsched/stdair/bom/BomStructureRoot.hpp 2009-06-18 22:24:40 UTC (rev 17) +++ trunk/airsched/stdair/bom/BomStructureRoot.hpp 2009-06-20 22:52:17 UTC (rev 18) @@ -18,11 +18,21 @@ by a specific BomContentRoot class. */ class BomStructureRoot : public BomStructure { friend class FacBomStructure; + friend class FacBomContent; + + private: + // Type definitions + /** Definition allowing to retrieve the associated BOM key type. */ + typedef BomStructureRootKey BomKey_T; + + /** Definition allowing to retrieve the associated children BOM type. */ + typedef FlightDateList_T ChildrenBomList_T; + public: // /////////// Getters ///////////// /** Get the BomStructureRoot key. */ - const BomStructureRootKey& getKey() const { + const BomKey_T& getKey() const { return _key; } @@ -59,7 +69,7 @@ /** Default constructors. */ BomStructureRoot (); BomStructureRoot (const BomStructureRoot&); - BomStructureRoot (const BomStructureRootKey&); + BomStructureRoot (const BomKey_T&); /** Destructor. */ virtual ~BomStructureRoot(); @@ -67,7 +77,7 @@ private: // Attributes /** The key of both the structure and content objects. */ - BomStructureRootKey _key; + BomKey_T _key; /** List of flight-dates. */ FlightDateList_T _childrenList1; Modified: trunk/airsched/stdair/bom/BomStructureRootKey.hpp =================================================================== --- trunk/airsched/stdair/bom/BomStructureRootKey.hpp 2009-06-18 22:24:40 UTC (rev 17) +++ trunk/airsched/stdair/bom/BomStructureRootKey.hpp 2009-06-20 22:52:17 UTC (rev 18) @@ -10,10 +10,20 @@ namespace STDAIR { + // Forward declarations + class BomStructureRoot; + /** Key of the BOM structure root. */ class BomStructureRootKey : public BomKey { + friend class FacBomStructure; + friend class FacBomContent; + + private: + // Type definitions + /** Definition allowing to retrieve the associated BOM structure type. */ + typedef BomStructureRoot BomStructure_T; + public: - // /////////// Construction /////////// /** Constructor. */ BomStructureRootKey () {} Modified: trunk/airsched/stdair/bom/FlightDate.cpp =================================================================== --- trunk/airsched/stdair/bom/FlightDate.cpp 2009-06-18 22:24:40 UTC (rev 17) +++ trunk/airsched/stdair/bom/FlightDate.cpp 2009-06-20 22:52:17 UTC (rev 18) @@ -9,7 +9,7 @@ namespace STDAIR { // //////////////////////////////////////////////////////////////////// - FlightDate::FlightDate (const FlightDateKey& iKey) + FlightDate::FlightDate (const BomKey_T& iKey) : _parent (NULL), _key (iKey) { } @@ -18,7 +18,7 @@ } // ////////////////////////////////////////////////////////////////////// - BomStructureRoot& FlightDate::getParent() const { + FlightDate::ParentBomStructure_T& FlightDate::getBomStructureRoot() const { assert (_parent != NULL); return *_parent; } Modified: trunk/airsched/stdair/bom/FlightDate.hpp =================================================================== --- trunk/airsched/stdair/bom/FlightDate.hpp 2009-06-18 22:24:40 UTC (rev 17) +++ trunk/airsched/stdair/bom/FlightDate.hpp 2009-06-20 22:52:17 UTC (rev 18) @@ -19,19 +19,32 @@ in the AIRSCHED library). */ class FlightDate : public BomStructure { friend class FacBomStructure; + friend class FacBomContent; + + private: + // Type definitions + /** Definition allowing to retrieve the associated BOM key type. */ + typedef FlightDateKey BomKey_T; + + /** Definition allowing to retrieve the associated parent + BOM structure type. */ + typedef BomStructureRoot ParentBomStructure_T; + + /** Definition allowing to retrieve the associated children BOM type. */ + typedef SegmentDateList_T ChildrenBomList_T; + public: - // /////////// Getters ///////////// /** Get the (parent) BomStructureRoot object. */ - BomStructureRoot* getParentPtr() const { + ParentBomStructure_T* getBomStructureRootPtr() const { return _parent; } /** Get the (parent) BomStructureRoot object. */ - BomStructureRoot& getParent() const; + ParentBomStructure_T& getBomStructureRoot() const; /** Get the flight-date key. */ - const FlightDateKey& getKey() const { + const BomKey_T& getKey() const { return _key; } @@ -47,7 +60,7 @@ That attribute (_parent) and method exist only for the template methods to compile correctly, but that code should never be called. So, obviously, do not use that method. */ - void setParent (BomStructureRoot& ioParent) { + void setBomStructureRoot (ParentBomStructure_T& ioParent) { _parent = &ioParent; } @@ -79,7 +92,7 @@ /** Default constructors. */ FlightDate (); FlightDate (const FlightDate&); - FlightDate (const FlightDateKey&); + FlightDate (const BomKey_T&); /** Destructor. */ virtual ~FlightDate(); @@ -87,10 +100,10 @@ private: // Attributes /** Parent root. */ - BomStructureRoot* _parent; + ParentBomStructure_T* _parent; /** The key of both the structure and content objects. */ - FlightDateKey _key; + BomKey_T _key; /** List of segment-dates. */ SegmentDateList_T _childrenList1; Modified: trunk/airsched/stdair/bom/FlightDateKey.hpp =================================================================== --- trunk/airsched/stdair/bom/FlightDateKey.hpp 2009-06-18 22:24:40 UTC (rev 17) +++ trunk/airsched/stdair/bom/FlightDateKey.hpp 2009-06-20 22:52:17 UTC (rev 18) @@ -10,10 +10,20 @@ namespace STDAIR { + // Forward declarations + class FlightDate; + /** Key of flight-date. */ class FlightDateKey : public BomKey { + friend class FacBomStructure; + friend class FacBomContent; + + private: + // Type definitions + /** Definition allowing to retrieve the associated BOM structure type. */ + typedef FlightDate BomStructure_T; + public: - // /////////// Construction /////////// /** Constructor. */ FlightDateKey (const FlightNumber_T& iFlightNumber, Modified: trunk/airsched/stdair/bom/SegmentDate.cpp =================================================================== --- trunk/airsched/stdair/bom/SegmentDate.cpp 2009-06-18 22:24:40 UTC (rev 17) +++ trunk/airsched/stdair/bom/SegmentDate.cpp 2009-06-20 22:52:17 UTC (rev 18) @@ -9,7 +9,7 @@ namespace STDAIR { // //////////////////////////////////////////////////////////////////// - SegmentDate::SegmentDate (const SegmentDateKey& iKey) + SegmentDate::SegmentDate (const BomKey_T& iKey) : _parent (NULL), _key (iKey) { } @@ -18,7 +18,7 @@ } // ////////////////////////////////////////////////////////////////////// - FlightDate& SegmentDate::getParent() const { + SegmentDate::ParentBomStructure_T& SegmentDate::getFlightDate() const { assert (_parent != NULL); return *_parent; } Modified: trunk/airsched/stdair/bom/SegmentDate.hpp =================================================================== --- trunk/airsched/stdair/bom/SegmentDate.hpp 2009-06-18 22:24:40 UTC (rev 17) +++ trunk/airsched/stdair/bom/SegmentDate.hpp 2009-06-20 22:52:17 UTC (rev 18) @@ -18,19 +18,29 @@ in the AIRSCHED library). */ class SegmentDate : public BomStructure { friend class FacBomStructure; + friend class FacBomContent; + + private: + // Type definitions + /** Definition allowing to retrieve the associated BOM key type. */ + typedef SegmentDateKey BomKey_T; + + /** Definition allowing to retrieve the associated parent + BOM structure type. */ + typedef FlightDate ParentBomStructure_T; + public: - // /////////// Getters ///////////// /** Get the (parent) FlightDate object. */ - FlightDate* getParentPtr() const { + ParentBomStructure_T* getFlightDatePtr() const { return _parent; } /** Get the (parent) FlightDate object. */ - FlightDate& getParent() const; + ParentBomStructure_T& getFlightDate() const; /** Get the segment-date key. */ - const SegmentDateKey& getKey() const { + const BomKey_T& getKey() const { return _key; } @@ -38,7 +48,7 @@ private: // /////////// Setters ///////////// /** Set the (parent) FlightDate object. */ - void setParent (FlightDate& ioFlightDate) { + void setFlightDate (ParentBomStructure_T& ioFlightDate) { _parent = &ioFlightDate; } @@ -70,7 +80,7 @@ /** Default constructors. */ SegmentDate (); SegmentDate (const SegmentDate&); - SegmentDate (const SegmentDateKey&); + SegmentDate (const BomKey_T&); /** Destructor. */ virtual ~SegmentDate(); @@ -78,10 +88,10 @@ private: // Attributes /** Parent flight-date. */ - FlightDate* _parent; + ParentBomStructure_T* _parent; /** The key of both the structure and content objects. */ - SegmentDateKey _key; + BomKey_T _key; }; } Modified: trunk/airsched/stdair/bom/SegmentDateKey.hpp =================================================================== --- trunk/airsched/stdair/bom/SegmentDateKey.hpp 2009-06-18 22:24:40 UTC (rev 17) +++ trunk/airsched/stdair/bom/SegmentDateKey.hpp 2009-06-20 22:52:17 UTC (rev 18) @@ -10,10 +10,20 @@ namespace STDAIR { + // Forward declarations + class SegmentDate; + /** Key of segment-date. */ class SegmentDateKey : public BomKey { + friend class FacBomStructure; + friend class FacBomContent; + + private: + // Type definitions + /** Definition allowing to retrieve the associated BOM structure type. */ + typedef SegmentDate BomStructure_T; + public: - // /////////// Construction /////////// /** Constructor. */ SegmentDateKey (const AirportCode_T& iBoardPoint, Modified: trunk/airsched/stdair/factory/FacBomContent.cpp =================================================================== --- trunk/airsched/stdair/factory/FacBomContent.cpp 2009-06-18 22:24:40 UTC (rev 17) +++ trunk/airsched/stdair/factory/FacBomContent.cpp 2009-06-20 22:52:17 UTC (rev 18) @@ -64,12 +64,11 @@ // is actually (only) a marker. BomStructureRootKey lBomStructureRootKey; BomContentRoot& lBomContentRoot = - createInternal<BomStructureRootKey, BomStructureRoot, - BomContentRoot> (lBomStructureRootKey); + createInternal<BomContentRoot> (lBomStructureRootKey); // Retrieve the BOM root structure object BomStructureRoot* lBomStructureRoot_ptr = - getBomStructure<BomStructureRoot, BomContentRoot> (lBomContentRoot); + getBomStructure<BomContentRoot> (lBomContentRoot); assert (lBomStructureRoot_ptr != NULL); return lBomContentRoot; Modified: trunk/airsched/stdair/factory/FacBomContent.hpp =================================================================== --- trunk/airsched/stdair/factory/FacBomContent.hpp 2009-06-18 22:24:40 UTC (rev 17) +++ trunk/airsched/stdair/factory/FacBomContent.hpp 2009-06-20 22:52:17 UTC (rev 18) @@ -34,34 +34,42 @@ /** Create a (child) content object, given a key. <br>A structure object is created, under the hood, with the given key. That structure object then gets a pointer on the content object. */ - template <typename BOM_KEY, - typename BOM_STRUCTURE_PARENT, typename BOM_STRUCTURE_CHILD, - typename BOM_CHILDREN_LIST, - typename BOM_CONTENT_PARENT, typename BOM_CONTENT_CHILD> - BOM_CONTENT_CHILD& create (BOM_CONTENT_PARENT& ioContentChild, - const BOM_KEY& iKey) { + template <typename BOM_CONTENT_CHILD> + BOM_CONTENT_CHILD& create (typename BOM_CONTENT_CHILD::ParentBomContent_T& ioContentParent, + const typename BOM_CONTENT_CHILD::BomKey_T& iKey) { + // Create the child structure object for the given key BOM_CONTENT_CHILD& lBomContentChild = - createInternal<BOM_KEY, BOM_STRUCTURE_CHILD, BOM_CONTENT_CHILD> (iKey); + createInternal<BOM_CONTENT_CHILD> (iKey); // Retrieve the child structure object - BOM_STRUCTURE_CHILD* lBomStructureChild_ptr = - getBomStructure<BOM_STRUCTURE_CHILD, - BOM_CONTENT_CHILD> (lBomContentChild); + typename BOM_CONTENT_CHILD::BomStructure_T* lBomStructureChild_ptr = + getBomStructure<BOM_CONTENT_CHILD> (lBomContentChild); assert (lBomStructureChild_ptr != NULL); + // Type for the parent Bom content + typedef typename BOM_CONTENT_CHILD::ParentBomContent_T PARENT_CONTENT_T; + + // Type for the parent Bom structure + typedef typename PARENT_CONTENT_T::BomStructure_T PARENT_STRUCTURE_T; + // Retrieve the parent structure object - BOM_STRUCTURE_PARENT* lBomStructureParent_ptr = - getBomStructure<BOM_STRUCTURE_PARENT, - BOM_CONTENT_PARENT> (ioContentChild); + PARENT_STRUCTURE_T* lBomStructureParent_ptr = + getBomStructure<PARENT_CONTENT_T> (ioContentParent); assert (lBomStructureParent_ptr != NULL); + // Type for the children Bom structure + typedef typename PARENT_STRUCTURE_T::ChildrenBomList_T CHILDREN_LIST_T; + + // Type for the child Bom structure + typedef typename BOM_CONTENT_CHILD::BomStructure_T CHILD_STRUCTURE_T; + // Link both the parent and child structure objects const bool hasLinkBeenSuccessful = FacBomStructure:: - linkBomParentWithBomChild<BOM_STRUCTURE_PARENT, BOM_STRUCTURE_CHILD, - BOM_KEY, BOM_CHILDREN_LIST> (*lBomStructureParent_ptr, - *lBomStructureChild_ptr); + linkBomParentWithBomChild<CHILD_STRUCTURE_T, + CHILDREN_LIST_T> (*lBomStructureParent_ptr, + *lBomStructureChild_ptr); if (hasLinkBeenSuccessful == false) { throw new MemoryAllocationException(); @@ -75,12 +83,13 @@ /** Create a content object, given a key. <br>A structure object is created, under the hood, with the given key. That structure object then gets a pointer on the content object. */ - template <typename BOM_KEY, typename BOM_STRUCTURE, typename BOM_CONTENT> - BOM_CONTENT& createInternal (const BOM_KEY& iKey) { + template <typename BOM_CONTENT> + BOM_CONTENT& createInternal (const typename BOM_CONTENT::BomKey_T& iKey) { // Create the structure/holder object - BOM_STRUCTURE& lBomStructure = - FacBomStructure::instance().create<BOM_KEY, BOM_STRUCTURE> (iKey); + typename BOM_CONTENT::BomStructure_T& lBomStructure = + FacBomStructure::instance(). + create<typename BOM_CONTENT::BomKey_T> (iKey); // The created flight-date content (BomContent) object gets a constant // reference on its corresponding flight-date structure/holder object @@ -102,14 +111,15 @@ } /** Retrieve the structure object associated to the given content object. */ - template <typename BOM_STRUCTURE, typename BOM_CONTENT> - BOM_STRUCTURE* getBomStructure (const BOM_CONTENT& iBomContent) { - BOM_STRUCTURE* oBomStructure_ptr = NULL; + template <typename BOM_CONTENT> + typename BOM_CONTENT::BomStructure_T* getBomStructure (const BOM_CONTENT& iBomContent) { + typename BOM_CONTENT::BomStructure_T* oBomStructure_ptr = NULL; StructureMapFromContent_T::iterator itBomStructure = _structureMap.find (&iBomContent); if (itBomStructure != _structureMap.end()) { - oBomStructure_ptr= dynamic_cast<BOM_STRUCTURE*> (itBomStructure->second); + oBomStructure_ptr = + dynamic_cast<typename BOM_CONTENT::BomStructure_T*> (itBomStructure->second); } return oBomStructure_ptr; } Modified: trunk/airsched/stdair/factory/FacBomStructure.hpp =================================================================== --- trunk/airsched/stdair/factory/FacBomStructure.hpp 2009-06-18 22:24:40 UTC (rev 17) +++ trunk/airsched/stdair/factory/FacBomStructure.hpp 2009-06-20 22:52:17 UTC (rev 18) @@ -40,11 +40,11 @@ static FacBomStructure& instance(); /** Create a structure object with the given key. */ - template <typename BOM_KEY, typename BOM_STRUCTURE> - BOM_STRUCTURE& create (const BOM_KEY& iKey) { - BOM_STRUCTURE* aBomStructure_ptr = NULL; + template <typename BOM_KEY> + typename BOM_KEY::BomStructure_T& create (const BOM_KEY& iKey) { + typename BOM_KEY::BomStructure_T* aBomStructure_ptr = NULL; - aBomStructure_ptr = new BOM_STRUCTURE (iKey); + aBomStructure_ptr = new typename BOM_KEY::BomStructure_T (iKey); assert (aBomStructure_ptr != NULL); // The new object is added to the pool of structure objects @@ -59,16 +59,18 @@ <br>The child structure object is added to the dedicated list within the parent structure object. . @return bool Whether or not the operation succeeded. */ - template <typename BOM_STRUCTURE_PARENT, typename BOM_STRUCTURE_CHILD, - typename BOM_KEY_CHILD, typename BOM_CHILDREN_LIST> - static bool linkBomParentWithBomChild (BOM_STRUCTURE_PARENT& ioBomParent, + template <typename BOM_STRUCTURE_CHILD, + typename BOM_CHILDREN_LIST> + static bool linkBomParentWithBomChild (typename BOM_STRUCTURE_CHILD::ParentBomStructure_T& ioBomParent, BOM_STRUCTURE_CHILD& ioBomChild) { + // Set the parent of the child structure object - ioBomChild.setParent (ioBomParent); + ioBomChild._parent = &ioBomParent; // Retrieve the short key - const BOM_KEY_CHILD& lBomChildKey = ioBomChild.getKey(); + const typename BOM_STRUCTURE_CHILD::BomKey_T& lBomChildKey = + ioBomChild.getKey(); const std::string& lBomChildKeyStr = lBomChildKey.toString(); // Insert the child structure object in the dedicated list This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |