#pragma once /************************************************************************ MeOS - Orienteering Software Copyright (C) 2009-2023 Melin Software HB This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . Melin Software HB - software@melin.nu - www.melin.nu Eksoppsvägen 16, SE-75646 UPPSALA, Sweden ************************************************************************/ template class intkeymap { private: const static KEY NoKey = -1013; struct keypair { KEY key; T value; }; T dummy; T tmp; keypair *keys; unsigned siz; unsigned used; intkeymap *next; intkeymap *parent; double allocFactor; T noValue; unsigned hash1; unsigned hash2; int level; static int optsize(int arg); T &rehash(int size, KEY key, const T &value); T &get(const KEY key); void *lookup(KEY key) const; public: virtual ~intkeymap(); intkeymap(int size); intkeymap(); intkeymap(const intkeymap &co); const intkeymap &operator=(const intkeymap &co); bool empty() const; int size() const; int getAlloc() const {return siz;} void clear(); void resize(int size); int count(KEY key) { return lookup(key, dummy) ? 1:0; } bool lookup(KEY key, T &value) const; void insert(KEY key, const T &value); void remove(KEY key); void erase(KEY key) {remove(key);} const T operator[](KEY key) const {if (lookup(key,tmp)) return tmp; else return T();} T &operator[](KEY key) { return get(key); } };