00001 #ifndef PATCHSEQUENCEENUMERATOR_H 00002 #define PATCHSEQUENCEENUMERATOR_H 00003 00011 #include <vector> 00012 00013 struct Triangle; 00014 class TriangleSet; 00015 00021 class PatchSequenceEnumerator { 00022 public: 00023 virtual ~PatchSequenceEnumerator(); 00024 00030 virtual Triangle* nextPatch() =0; 00031 00035 virtual void reset() =0; 00036 }; 00037 00042 class DirectPatchSequenceEnumerator: public PatchSequenceEnumerator { 00043 public: 00048 DirectPatchSequenceEnumerator(TriangleSet *tset); 00049 virtual Triangle* nextPatch(); 00050 virtual void reset(); 00051 00052 private: 00053 TriangleSet &tset_; 00054 int current_; 00055 int size_; 00056 }; 00057 00062 class IndirectPatchSequenceEnumerator: public PatchSequenceEnumerator { 00063 public: 00064 IndirectPatchSequenceEnumerator(); 00065 virtual ~IndirectPatchSequenceEnumerator(); 00066 virtual Triangle* nextPatch(); 00067 virtual void reset(); 00068 00073 void add(PatchSequenceEnumerator *patchEnumerator); 00074 00075 private: 00076 typedef std::vector<PatchSequenceEnumerator *> TContainer; 00077 TContainer container_; 00078 int current_; 00079 }; 00080 00081 #endif // PATCHSEQUENCEENUMERATOR_H