19b9d18dcSbeveloper #ifndef _MEDIA_T_MAP_H 29b9d18dcSbeveloper #define _MEDIA_T_MAP_H 352a38012Sejakowatz 452a38012Sejakowatz template<class key, class value> class Map 552a38012Sejakowatz { 652a38012Sejakowatz public: 752a38012Sejakowatz Map() : count(0) {} 852a38012Sejakowatz 9*1299bfb2Sbeveloper bool Insert(const key &k, const value &v) 1052a38012Sejakowatz { 1152a38012Sejakowatz value temp; 1252a38012Sejakowatz if (count == MAXENT) debugger("template Map out of memory"); 1352a38012Sejakowatz if (Get(k, &temp)) debugger("template Map inserting duplicate key"); 1452a38012Sejakowatz list[count].k = k; 1552a38012Sejakowatz list[count].v = v; 1652a38012Sejakowatz count++; 17*1299bfb2Sbeveloper return true; 1852a38012Sejakowatz } 1952a38012Sejakowatz 2052a38012Sejakowatz bool Get(const key &k, value *v) 2152a38012Sejakowatz { 2252a38012Sejakowatz for (int i = 0; i < count; i++) 2352a38012Sejakowatz if (list[i].k == k) { 2452a38012Sejakowatz *v = list[i].v; 2552a38012Sejakowatz return true; 2652a38012Sejakowatz } 2752a38012Sejakowatz return false; 2852a38012Sejakowatz } 2952a38012Sejakowatz 3052a38012Sejakowatz // you can't Remove() while iterating through the map using GetAt() 3152a38012Sejakowatz bool GetAt(int32 index, value *v) 3252a38012Sejakowatz { 3352a38012Sejakowatz if (index < 0 || index >= count) 3452a38012Sejakowatz return false; 3552a38012Sejakowatz *v = list[index].v; 3652a38012Sejakowatz return true; 3752a38012Sejakowatz } 3852a38012Sejakowatz 399b9d18dcSbeveloper bool GetPointer(const key &k, value **v) 409b9d18dcSbeveloper { 419b9d18dcSbeveloper for (int i = 0; i < count; i++) 429b9d18dcSbeveloper if (list[i].k == k) { 439b9d18dcSbeveloper *v = &(list[i].v); 449b9d18dcSbeveloper return true; 459b9d18dcSbeveloper } 469b9d18dcSbeveloper return false; 479b9d18dcSbeveloper } 489b9d18dcSbeveloper 499b9d18dcSbeveloper // you can't Remove() while iterating through the map using GetAt() 509b9d18dcSbeveloper bool GetPointerAt(int32 index, value **v) 519b9d18dcSbeveloper { 529b9d18dcSbeveloper if (index < 0 || index >= count) 539b9d18dcSbeveloper return false; 549b9d18dcSbeveloper *v = &(list[index].v); 559b9d18dcSbeveloper return true; 569b9d18dcSbeveloper } 579b9d18dcSbeveloper 5852a38012Sejakowatz // you can't Remove() while iterating through the map using GetAt() 5952a38012Sejakowatz bool Remove(const key &k) 6052a38012Sejakowatz { 6152a38012Sejakowatz for (int i = 0; i < count; i++) 6252a38012Sejakowatz if (list[i].k == k) { 6352a38012Sejakowatz count--; 6452a38012Sejakowatz if (count > 0) { 6552a38012Sejakowatz list[i].v = list[count].v; 6652a38012Sejakowatz list[i].k = list[count].k; 6752a38012Sejakowatz } 6852a38012Sejakowatz return true; 6952a38012Sejakowatz } 7052a38012Sejakowatz return false; 7152a38012Sejakowatz } 7252a38012Sejakowatz 7352a38012Sejakowatz private: 7452a38012Sejakowatz enum { MAXENT = 64 }; 7552a38012Sejakowatz struct ent { 7652a38012Sejakowatz key k; 7752a38012Sejakowatz value v; 7852a38012Sejakowatz }; 7952a38012Sejakowatz ent list[MAXENT]; 8052a38012Sejakowatz int count; 8152a38012Sejakowatz }; 8252a38012Sejakowatz 839b9d18dcSbeveloper #endif // _MEDIA_T_MAP_H 84