Grafalgo
Library of useful data structures and algorithms
|
00001 00010 #ifndef SETPAIR_H 00011 #define SETPAIR_H 00012 00013 #include "stdinc.h" 00014 00015 #include "Adt.h" 00016 00017 namespace grafalgo { 00018 00027 class SetPair : public Adt { 00028 public: 00029 SetPair(int); 00030 ~SetPair(); 00031 00032 void clear(); 00033 void resize(int); 00034 void expand(int); 00035 void copyFrom(const SetPair&); 00036 00037 // predicates 00038 bool isIn(int) const; 00039 bool isOut(int) const; 00040 00041 // iteration methods 00042 int firstIn() const; 00043 int firstOut() const; 00044 int lastIn() const; 00045 int lastOut() const; 00046 int nextIn(int) const; 00047 int nextOut(int) const; 00048 int prevIn(int) const; 00049 int prevOut(int) const; 00050 00051 // getters 00052 int getNumIn() const; 00053 int getNumOut() const; 00054 00055 // modifiers 00056 void swap(int); 00057 00058 // produce string representation 00059 string& toString(string&) const; 00060 private: 00061 int numIn; 00062 int numOut; 00063 00064 int inHead; 00065 int inTail; 00066 int outHead; 00067 int outTail; 00068 00069 int *nxt; 00070 int *prv; 00071 00072 void makeSpace(int); 00073 void freeSpace(); 00074 }; 00075 00080 inline bool SetPair::isIn(int i) const { 00081 return 1 <= i && i <= nn && (nxt[i] > 0 || i == inTail); 00082 } 00083 00088 inline bool SetPair::isOut(int i) const { 00089 return 1 <= i && i <= nn && (nxt[i] < 0 || i == outTail); 00090 } 00091 00095 inline int SetPair::getNumIn() const { return numIn; } 00096 00100 inline int SetPair::getNumOut() const { return numOut; } 00101 00105 inline int SetPair::firstIn() const { return inHead; } 00106 00110 inline int SetPair::firstOut() const { return outHead; } 00111 00115 inline int SetPair::lastIn() const { return inTail; } 00116 00120 inline int SetPair::lastOut() const { return outTail; } 00121 00126 inline int SetPair::nextIn(int i) const { 00127 return (0 <= i && i <= nn && nxt[i] > 0 ? nxt[i] : 0); 00128 } 00129 00134 inline int SetPair::nextOut(int i) const { 00135 return (0 <= i && i <= nn && nxt[i] < 0 ? -nxt[i] : 0); 00136 } 00137 00142 inline int SetPair::prevIn(int i) const { 00143 return (0 <= i && i <= nn && prv[i] > 0 ? prv[i] : 0); 00144 } 00145 00150 inline int SetPair::prevOut(int i) const { 00151 return (0 <= i && i <= nn && prv[i] < 0 ? -prv[i] : 0); 00152 } 00153 00154 } // ends namespace 00155 00156 #endif 00157