![]() |
VR-Forces 4.0.4 Class Documentation
|
00001 /********************************************************************* 00002 ** Copyright (c) 2004 MaK Technologies, Inc. 00003 ** All rights reserved. 00004 *********************************************************************/ 00005 /********************************************************************* 00006 ** $RCSfile: networkEdgeSegmentIter.h,v $ $Revision: 1.5 $ $State: Exp $ 00007 *********************************************************************/ 00008 #ifndef networkEdgeSegmentIter_H_ 00009 #define networkEdgeSegmentIter_H_ 00010 00011 // 00012 // \file networkEdgeSegmentIter.h 00013 // \brief Contains the DtNetworkEdgeSegmentIter class declaration. 00014 // 00015 00016 #include "gdb/gdbDefines.h" 00017 #include "gdb/netwrkEdge.h" 00018 00019 class DtSegment; 00020 class DtString; 00021 00022 00023 // 00024 // DtNetworkEdgeSegmentIter is an ABC representing 00025 // an iterator over the segments of a DtNetworkEdge. 00026 // \invariant At all times, this iterator must point to a valid DtNetworkEdge. 00027 class DT_DLL_gdb DtNetworkEdgeSegmentIter 00028 { 00029 public: 00030 // \param an edge to iterate over. 00031 DtNetworkEdgeSegmentIter(DtNetworkEdge& edge); 00032 00033 // copy constructor 00034 DtNetworkEdgeSegmentIter(const DtNetworkEdgeSegmentIter& orig); 00035 00036 // destructor 00037 virtual ~DtNetworkEdgeSegmentIter(); 00038 00039 // \return A DtPoint representing the starting or ending point of 00040 // the segment as defined in the direction of iteration. 00041 virtual DtPoint startPoint() const = 0; 00042 virtual DtPoint endPoint() const = 0; 00043 00044 virtual const DtNetworkEdge& edge() const; 00045 00046 // Increments/Decrements to the next/previous segment in the edge as defined 00047 // by the direction of iteration. 00048 virtual void operator++() = 0; 00049 virtual void operator--() = 0; 00050 virtual DtNetworkSegment& operator*() const = 0; 00051 virtual DtNetworkSegment& operator->() const = 0; 00052 00053 virtual bool operator==(const DtNetworkEdgeSegmentIter& other) const; 00054 virtual bool operator!=(const DtNetworkEdgeSegmentIter& other) const; 00055 00056 // \return The DtString "DtNetworkEdgeSegmentIter" 00057 virtual const DtString type() const; 00058 00059 protected: 00060 // Tests the invariant of the iterator as defined above. 00061 // \return a boolean signifying true if the invariant is valid 00062 // and false otherwise. 00063 bool testInvariant() const; 00064 00065 // default constructor 00066 DtNetworkEdgeSegmentIter(); 00067 00068 DtNetworkEdge* myEdge; 00069 }; 00070 00071 00072 inline DtNetworkEdgeSegmentIter::DtNetworkEdgeSegmentIter(DtNetworkEdge& edge): 00073 myEdge(&edge) 00074 { 00075 assert(testInvariant()); 00076 } 00077 00078 inline DtNetworkEdgeSegmentIter::~DtNetworkEdgeSegmentIter() 00079 { 00080 } 00081 00082 inline DtNetworkEdgeSegmentIter::DtNetworkEdgeSegmentIter(const DtNetworkEdgeSegmentIter& orig) 00083 { 00084 assert(testInvariant()); 00085 00086 myEdge = orig.myEdge; 00087 00088 assert(testInvariant()); 00089 } 00090 00091 00092 inline const DtString DtNetworkEdgeSegmentIter::type() const 00093 { 00094 assert(testInvariant()); 00095 00096 return "DtNetworkEdgeSegmentIter"; 00097 } 00098 00099 00100 #endif