namespace omega { template MapElement:: MapElement(const MapElement& M) { if (M.tail) tail = new MapElement(*M.tail); else tail = 0; k = M.k; v = M.v; } template MapElement & MapElement:: operator=(const MapElement& M) { if (this != &M) { if (tail) delete tail; if (M.tail) tail = new MapElement(*M.tail); else tail = 0; k = M.k; v = M.v; } return *this; } #if ! defined linux template Map ::Map(const V &default_value) #else template Map ::Map(V default_value) #endif : _default_value(default_value) { contents = 0; } template Map ::~Map() { delete contents; } template V Map::operator()(K k) const { MapElement * P = contents; while (P) { if (P->k == k) return P->v; P = P->tail; }; return _default_value; } template V & Map::operator[](K k) { MapElement * P = contents; while (P) { if (P->k == k) return P->v; P = P->tail; }; P = new MapElement ; P->k = k; P->v = _default_value; P->tail = contents; contents = P; return P->v; } } // namespace