//--------------------------------------------------------------------------- #ifndef topologyH #define topologyH //--------------------------------------------------------------------------- class Topology; typedef Topology * pTopology; class Topology { public: virtual int nextNeigh(int i, int j)=0; /* returns: (i,i) - first neighbour i1 (i,i1) - second neighbour i2 ... (i,iLast) - i */ virtual int x(int i)=0; virtual int y(int i)=0; }; #define MeshX(i,size) ((i) % (size)) #define MeshY(i,size) ((i) / (size)) #define MeshXY(x,y,size) ((y)*(size)+(x)) class Toroid : public Topology { public: Toroid(int _size) {size=_size;}; virtual int nextNeigh(int i, int j) = 0; virtual int x(int i) { return MeshX(i,size); }; virtual int y(int i) { return MeshY(i,size); }; protected: int size; }; class Toroid4 : public Toroid { public: Toroid4(int _size) : Toroid(_size) {;}; virtual int nextNeigh(int i, int j); }; class Toroid8 : public Toroid { public: Toroid8(int _size) : Toroid(_size) {;}; virtual int nextNeigh(int i, int j); }; class RandomTopology : public Toroid { public: RandomTopology(int _size, float _NProbablity ) : Toroid(_size) { NProbablity=_NProbablity;}; virtual int nextNeigh(int i, int j); protected: float NProbablity; }; /* class Mesh4 : public Topology { public: Mesh4(int _size) {size=_size;}; virtual int nextNeigh(int i, int j); protected: int size; }; class Mesh8 : public Topology { public: virtual int nextNeigh(int i, int j); }; */ #endif