VR-Forces 4.0.4 Class Documentation
include/gdb/networkEdgeTraverser.h
Go to the documentation of this file.
00001 /*********************************************************************
00002 ** Copyright (c) 2004 MaK Technologies, Inc.
00003 ** All rights reserved.
00004 *********************************************************************/
00005 /*********************************************************************
00006 ** $RCSfile: networkEdgeTraverser.h,v $ $Revision: 1.5 $ $State: Exp $
00007 *********************************************************************/
00008 #ifndef networkEdgeTraverser_H_
00009 #define networkEdgeTraverser_H_
00010 
00011 //
00012 // \file networkEdgeTraverser.h
00013 // \brief Contains the DtNetworkEdgeTraverser class declaration.
00014 //
00015 
00016 #include "gdb/gdbDefines.h"
00017 #include "gdb/netwrkEdge.h"
00018 
00019 class DtNetworkNode;
00020 class DtNetworkEdgePointIter;
00021 class DtNetworkEdgePointConstIter;
00022 class DtNetworkEdgeSegmentIter;
00023 class DtNetworkEdgeSegmentConstIter;
00024 class DtPoint;
00025 class DtString;
00026 
00027 //
00028 // DtNetworkEdgeTraverser represents an object that knows how to traverse in the
00029 // specified direction over an DtNetworkEdge.  Used for traversing the 
00030 // vector network.
00031 class DT_DLL_gdb DtNetworkEdgeTraverser 
00032 {
00033 public:
00034 
00035    // constructor
00036    DtNetworkEdgeTraverser(DtNetworkEdge& edge, 
00037       DtNetworkEdge::DtTraversalDirection traversalDirection);
00038 
00039    // destructor
00040    virtual ~DtNetworkEdgeTraverser();
00041 
00042    // copy constructor
00043    DtNetworkEdgeTraverser(const DtNetworkEdgeTraverser& orig);
00044 
00045    // assignment operator
00046    DtNetworkEdgeTraverser& operator=(const DtNetworkEdgeTraverser& orig);
00047 
00048    
00049    // \return a const reference to the traverser's edge
00050    DtNetworkEdge& edge();
00051    const DtNetworkEdge& edge() const;
00052 
00053    DtNetworkNode& startNode();
00054    DtNetworkNode& endNode();
00055 
00056    const DtNetworkNode& startNode() const;
00057    const DtNetworkNode& endNode() const;
00058 
00059    const DtPoint startPoint() const;
00060    const DtPoint endPoint() const;
00061 
00062    // \return an iterator, const or non-const, to the beginning or 
00063    // the end of the segments
00064    // \note - These are not necessarily forward or reverse in the traditional interator sense. 
00065    // It depends on the direction of traversal.  If traversing in reverse, a reverse iterator request 
00066    // will return a *foward* iterator.
00067    std::auto_ptr<DtNetworkEdgeSegmentIter> segmentsBegin();
00068    std::auto_ptr<DtNetworkEdgeSegmentConstIter> segmentsBegin() const;
00069 
00070    std::auto_ptr<DtNetworkEdgeSegmentIter> segmentsEnd();
00071    std::auto_ptr<DtNetworkEdgeSegmentConstIter> segmentsEnd() const;
00072 
00073    std::auto_ptr<DtNetworkEdgeSegmentIter> getIterForSegment(const DtNetworkSegment& segment);
00074    std::auto_ptr<DtNetworkEdgeSegmentConstIter> getIterForSegment(const DtNetworkSegment& segment) const;
00075 
00076    // \return An auto_ptr to a DtNetworkEdgeSegmentIter that can be used to iterate over the segments
00077    // of the edge, in the specified traversal direction.  
00078    std::auto_ptr<DtNetworkEdgeSegmentIter> segmentIter(const DtNetworkSegment& segment);
00079    std::auto_ptr<DtNetworkEdgeSegmentConstIter> segmentIter(const DtNetworkSegment& segment) const;
00080 
00081 
00082    // \return an iterator, const or non-const, to the beginning or 
00083    // the end of the points in the edge.
00084    // \note - These are not necessarily beginning/end or forward/reverse in the traditional interator sense. 
00085    // It depends on the direction of traversal.  If traversing in reverse, a reverse iterator request 
00086    // will return a *foward* iterator.
00087    std::auto_ptr<DtNetworkEdgePointIter> pointsBegin();
00088    std::auto_ptr<DtNetworkEdgePointConstIter> pointsBegin() const;
00089 
00090    std::auto_ptr<DtNetworkEdgePointIter> pointsEnd();
00091    std::auto_ptr<DtNetworkEdgePointConstIter> pointsEnd() const;
00092 
00093    // \return a point iterator initialized to the point in the edge specified.  
00094    // If the point is NOT in the edge, the iterator will be initialized to the
00095    // starting point in the appropriate direction of traversal.
00096    std::auto_ptr<DtNetworkEdgePointIter> pointIter(const DtPoint& pointInEdge);
00097    std::auto_ptr<DtNetworkEdgePointConstIter> pointIter(const DtPoint& pointInEdge) const;
00098 
00099    // \return the DtString "DtNetworkEdgeTraverser"
00100    virtual DtString type();
00101 
00102    virtual DtNetworkEdge::DtTraversalDirection direction() const;
00103    virtual void setDirection(DtNetworkEdge::DtTraversalDirection newDirection);
00104    
00105 protected:
00106    // Tests to see if the class invariant is valid.
00107    // \return a boolean indicating whether or not the invariant
00108    // is valid.
00109    bool testInvariant() const;
00110 
00111    bool traversingForward() const;
00112    
00113    DtNetworkEdge::DtTraversalDirection myTraversalDirection;
00114 
00115    DtNetworkEdge* myEdge;
00116 
00117 };
00118 
00119 
00120 #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)