00001 #ifndef KYRA_IMAGENODE_INCLUDED
00002 #define KYRA_IMAGENODE_INCLUDED
00003
00004 #include "../util/kyralist.h"
00005 #include "SDL.h"
00006 #include "../util/glmath.h"
00007
00008 /*
00009 class KrImage;
00010
00011
00012 class KrImageNode
00013 {
00014 friend class KrImageNodeIterator;
00015
00016 public:
00018 KrImageNode() { next = this; prev = this; image = 0; }
00019
00021 KrImageNode( KrImage* _image ) { next = this; prev = this; image = _image; }
00022
00023 virtual ~KrImageNode() {}
00024
00025 KrImageNode* Next() const { return next; }
00026 KrImageNode* Prev() const { return prev; }
00027 KrImage* Image() const { return image; }
00028 bool IsSentinel() const { return !image; }
00029 bool InList() const { return !(( next == this ) && ( prev == this )); }
00030
00032 void InsertBefore( KrImageNode* addMe )
00033 {
00034 GLASSERT( !addMe->IsSentinel() );
00035 addMe->prev = prev;
00036 prev->next = addMe;
00037 prev = addMe;
00038 addMe->next = this;
00039 }
00040
00042 void InsertAfter( KrImageNode* addMe )
00043 {
00044 GLASSERT( !addMe->IsSentinel() );
00045 addMe->prev = this;
00046 addMe->next = next;
00047 next->prev = addMe;
00048 next = addMe;
00049 }
00050
00052 void Remove()
00053 {
00054 prev->next = next;
00055 next->prev = prev;
00056 prev = next = this; // assume sentinel, again.
00057 }
00058
00059 private:
00060 // Adding data members really stinks -- it increases the size
00061 // of the sentinels, and a ScanList has a bunch of sentinels.
00062 KrImageNode* next;
00063 KrImageNode* prev;
00064 KrImage* image;
00065 };
00066
00067
00068 class KrImageNodeIterator
00069 {
00070 public:
00071 KrImageNodeIterator( KrImageNode& _sentinel ) : sentinel( &_sentinel ), current( 0 ) { GLASSERT( sentinel->IsSentinel() ); }
00072
00073 KrImageNode* CurrentNode() { return current; }
00074 KrImage* CurrentImage() { return current->image; }
00075 void SetCurrent( KrImageNode* c ) { current = c; }
00076
00077 void Begin() { current = sentinel->next; }
00078 void Next() { current = current->next; }
00079 void Prev() { current = current->prev; }
00080 bool Done() { return current->IsSentinel(); }
00081
00082 void InsertBefore( KrImageNode& addMe ) { current->InsertBefore( &addMe ); }
00083 void InsertAfter( KrImageNode& addMe ) { current->InsertAfter( &addMe ); }
00084
00085 private:
00086 KrImageNode* sentinel;
00087 KrImageNode* current;
00088 };
00089 */
00090
00091 #endif
1.2.11.1 written by Dimitri van Heesch,
© 1997-2001