Grafalgo
Library of useful data structures and algorithms
/Users/jst/src/grafalgo/cpp/include/SetPair.h
Go to the documentation of this file.
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 
 All Classes Files Functions Variables Typedefs Friends