![]() |
VR-Forces 4.0.4 Class Documentation
|
00001 /********************************************************************* 00002 ** Copyright (c) 2004 MAK Technologies, Inc. 00003 ** All rights reserved. 00004 *********************************************************************/ 00005 /********************************************************************* 00006 ** $RCSfile: networkEdgePointIter.h,v $ $Revision: 1.5 $ $State: Exp $ 00007 *********************************************************************/ 00008 #ifndef networkEdgePointIter_H_ 00009 #define networkEdgePointIter_H_ 00010 00011 // 00012 // \file networkEdgePointIter.h 00013 // \brief Contains the DtNetworkEdgePointIter class declaration. 00014 // 00015 00016 #include "gdb/gdbDefines.h" 00017 #include "gdb/netwrkEdge.h" 00018 00019 class DtPoint; 00020 class DtString; 00021 00022 // 00023 // DtNetworkEdgePointIter is an ABC representing 00024 // an iterator over the points representing a DtNetworkEdge. 00025 // \invariant At all times, this iterator must point to a valid DtNetworkEdge. 00026 class DT_DLL_gdb DtNetworkEdgePointIter 00027 { 00028 public: 00029 00030 // constructor 00031 // \param edge The DtNetworkEdge to iterate over 00032 DtNetworkEdgePointIter(DtNetworkEdge& edge); 00033 00034 // constructor that allows the user to specify that 00035 // the iterator is initialized to the end of the 00036 // points of the edge. 00037 // \param edge The DtNetworkEdge to iterate over 00038 // \param isEnd Is the iterator at the end or not. 00039 DtNetworkEdgePointIter(DtNetworkEdge& edge, bool isEnd); 00040 00041 // destructor 00042 virtual ~DtNetworkEdgePointIter(); 00043 00044 // copy constructor 00045 DtNetworkEdgePointIter(const DtNetworkEdgePointIter& orig); 00046 00047 // assignment operator 00048 virtual DtNetworkEdgePointIter& operator=(const DtNetworkEdgePointIter& orig); 00049 00050 // Increment/Decrement to the next/previous points. 00051 // \note Incrementing is defined as moving to the next point in the direction 00052 // in which the iterator is iterating over the edge, NOT necessarily the 00053 // next point in the order in which they are defined in the edge itself. 00054 virtual void operator++() = 0; 00055 virtual void operator--() = 0; 00056 00057 // \return A reference to a const DtPoint in the edge 00058 virtual const DtPoint& operator*() const = 0; 00059 // \return A pointer to a const DtPoint in the edge 00060 virtual const DtPoint* operator->() const = 0; 00061 00062 // \return A boolean signifying whether the iteration is equal to the other 00063 // iterator or not. 00064 virtual bool operator==(const DtNetworkEdgePointIter& other) const; 00065 virtual bool operator!=(const DtNetworkEdgePointIter& other) const; 00066 00067 // \return The DtString "DtNetworkEdgePointIter" 00068 virtual const DtString type() const; 00069 00070 protected: 00071 // Tests the invariant for the class (described above) 00072 // \return true if the invariant is valid. 00073 // false otherwise. 00074 bool testInvariant() const; 00075 00076 DtNetworkEdge* myEdge; 00077 bool myIsEnd; 00078 00079 private: 00080 // default constructor 00081 DtNetworkEdgePointIter(); 00082 }; 00083 00084 00085 inline DtNetworkEdgePointIter::DtNetworkEdgePointIter(DtNetworkEdge& edge): 00086 myEdge(&edge), 00087 myIsEnd(false) 00088 { 00089 } 00090 00091 inline DtNetworkEdgePointIter::DtNetworkEdgePointIter(DtNetworkEdge& edge, bool isEnd): 00092 myEdge(&edge), 00093 myIsEnd(isEnd) 00094 { 00095 } 00096 00097 00098 inline DtNetworkEdgePointIter::~DtNetworkEdgePointIter() 00099 { 00100 } 00101 00102 inline DtNetworkEdgePointIter::DtNetworkEdgePointIter(const DtNetworkEdgePointIter& orig) 00103 { 00104 myEdge = orig.myEdge; 00105 myIsEnd = orig.myIsEnd; 00106 } 00107 00108 inline DtNetworkEdgePointIter& DtNetworkEdgePointIter::operator=(const DtNetworkEdgePointIter& orig) 00109 { 00110 if (*this != orig) 00111 { 00112 myEdge = orig.myEdge; 00113 myIsEnd = orig.myIsEnd; 00114 } 00115 00116 return *this; 00117 } 00118 00119 inline const DtString DtNetworkEdgePointIter::type() const 00120 { 00121 return "DtNetworkEdgePointIter"; 00122 } 00123 00124 00125 #endif