#ifndef GRID_H
#define GRID_H
#include "cdt.h"
#include "common/derivable_dt.h"
#include "common/freelist.h"
#include <list>
struct gridpt {
int i, j;
};
typedef std::list<FDPModel::Node*> node_list;
struct PODCell {
gridpt p;
Dtlink_t link;
};
struct Cell : PODCell {
node_list nodes;
};
struct Grid : derivable_dt { Freelist<Cell> cells; Grid(int size);
~Grid() {
close();
}
Cell *getCell();
void clear() {
dtclear(this);
cells.clear();
}
void add(int i, int j, FDPModel::Node*);
Cell* find(int i, int j);
void walk(int(*walkf)(Dt_t *dt,void *cell,void *grid));
struct Visitor {
virtual int VisitCell(Cell *cell,Grid *grid) = 0;
};
void walk(Visitor *visitor);
};
extern int gLength (Cell* p);
#endif