1*52a38012Sejakowatz 2*52a38012Sejakowatz template<class key, class value> class Map 3*52a38012Sejakowatz { 4*52a38012Sejakowatz public: 5*52a38012Sejakowatz Map() : count(0) {} 6*52a38012Sejakowatz 7*52a38012Sejakowatz void Insert(const key &k, const value &v) 8*52a38012Sejakowatz { 9*52a38012Sejakowatz value temp; 10*52a38012Sejakowatz if (count == MAXENT) debugger("template Map out of memory"); 11*52a38012Sejakowatz if (Get(k, &temp)) debugger("template Map inserting duplicate key"); 12*52a38012Sejakowatz list[count].k = k; 13*52a38012Sejakowatz list[count].v = v; 14*52a38012Sejakowatz count++; 15*52a38012Sejakowatz } 16*52a38012Sejakowatz 17*52a38012Sejakowatz bool Get(const key &k, value *v) 18*52a38012Sejakowatz { 19*52a38012Sejakowatz for (int i = 0; i < count; i++) 20*52a38012Sejakowatz if (list[i].k == k) { 21*52a38012Sejakowatz *v = list[i].v; 22*52a38012Sejakowatz return true; 23*52a38012Sejakowatz } 24*52a38012Sejakowatz return false; 25*52a38012Sejakowatz } 26*52a38012Sejakowatz 27*52a38012Sejakowatz // you can't Remove() while iterating through the map using GetAt() 28*52a38012Sejakowatz bool GetAt(int32 index, value *v) 29*52a38012Sejakowatz { 30*52a38012Sejakowatz if (index < 0 || index >= count) 31*52a38012Sejakowatz return false; 32*52a38012Sejakowatz *v = list[index].v; 33*52a38012Sejakowatz return true; 34*52a38012Sejakowatz } 35*52a38012Sejakowatz 36*52a38012Sejakowatz // you can't Remove() while iterating through the map using GetAt() 37*52a38012Sejakowatz bool Remove(const key &k) 38*52a38012Sejakowatz { 39*52a38012Sejakowatz for (int i = 0; i < count; i++) 40*52a38012Sejakowatz if (list[i].k == k) { 41*52a38012Sejakowatz count--; 42*52a38012Sejakowatz if (count > 0) { 43*52a38012Sejakowatz list[i].v = list[count].v; 44*52a38012Sejakowatz list[i].k = list[count].k; 45*52a38012Sejakowatz } 46*52a38012Sejakowatz return true; 47*52a38012Sejakowatz } 48*52a38012Sejakowatz return false; 49*52a38012Sejakowatz } 50*52a38012Sejakowatz 51*52a38012Sejakowatz private: 52*52a38012Sejakowatz enum { MAXENT = 64 }; 53*52a38012Sejakowatz struct ent { 54*52a38012Sejakowatz key k; 55*52a38012Sejakowatz value v; 56*52a38012Sejakowatz }; 57*52a38012Sejakowatz ent list[MAXENT]; 58*52a38012Sejakowatz int count; 59*52a38012Sejakowatz }; 60*52a38012Sejakowatz 61