00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00024
00025
00026
00027
00028 #ifndef GRID_INCLUDED
00029 #define GRID_INCLUDED
00030
00031 #include <map>
00032 #include <algorithm>
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050 template <class N,class pT> class Grid{
00051 private:
00052 typedef std::map<N,pT> horizontalVector;
00053 typedef std::map<N,horizontalVector> verticalVector;
00054
00055 verticalVector _grid;
00056
00057 public:
00058 void insert(N xPosition,N yPosition,pT pointerToObjectOfTypeT);
00059 pT find (N xPosition,N yPosition);
00060
00061
00062 void printNames();
00063 };
00064
00065
00066
00067
00068
00069 template<class N,class pT> void Grid<N,pT>::insert(N xPosition,N yPosition,pT pointerToObjectOfTypeT){
00070
00071
00072
00073 typename verticalVector::iterator tempY = _grid.find(yPosition);
00074
00075 if(tempY == _grid.end()){
00076 horizontalVector hV;
00077 tempY = _grid.insert( std::pair <N,horizontalVector>(yPosition,hV)).first;
00078 }
00079
00080 tempY->second.insert(std::pair<N,pT>(xPosition,pointerToObjectOfTypeT));
00081
00082 }
00083
00084
00085
00086
00087
00088
00089
00090
00091
00092
00093 template<class N,class pT> pT Grid<N,pT>::find(N xPosition,N yPosition){
00094
00095
00096
00097 typename verticalVector::iterator tempY = _grid.find(yPosition);
00098
00099
00100
00101 if(tempY == _grid.end()){
00102
00103 return (pT) 0;
00104
00105 }
00106
00107
00108
00109 typename horizontalVector::iterator tempX = tempY->second.find(xPosition);
00110 if(tempX != tempY->second.end()){
00111 return tempX->second;
00112 }
00113 return (pT) 0;
00114
00115 }
00116
00117
00118
00119
00120 template<class N,class pT> void Grid<N,pT>::printNames(){
00121
00122 typename verticalVector::const_iterator y;
00123 typename horizontalVector::const_iterator x;
00124
00125
00126 std::cout << "Y\tX\tObject" << "\n";
00127
00128 for(y = _grid.begin(); y != _grid.end() ; y++ ){
00129
00130 for(x = y->second.begin() ; x != y->second.end() ; x++ ){
00131 std::cout << y->first << "\t" << x->first << "\t";
00132
00133 x->second->display();
00134 std::cout << "\n";
00135 }
00136 }
00137 }
00138 #endif