Remove unused Utils/HashMap.h

Signed-off-by: Henner Zeller <h.zeller@acm.org>
diff --git a/src/Utils/HashMap.h b/src/Utils/HashMap.h
deleted file mode 100644
index cbb2635..0000000
--- a/src/Utils/HashMap.h
+++ /dev/null
@@ -1,361 +0,0 @@
-
-#ifndef HASHMAP_H
-#define HASHMAP_H
-#include <iostream>
-#include <iomanip>
-#include <exception>
-#include <mutex>
-#include <condition_variable>
-
-/*
- *  wrapper for items stored in the map
- */
-template <typename K, typename V>
-class HashItem {
- public:
-  HashItem(K key, V value) {
-    this->key = key;
-    this->value = value;
-    this->nextItem = nullptr;
-  }
-
-  /*
-   * copy constructor
-   */
-  HashItem(const HashItem &item) {
-    this->key = item.getKey();
-    this->value = item.getValue();
-    this->nextItem = nullptr;
-  }
-
-  void setNext(HashItem<K, V> *item) { this->nextItem = item; }
-
-  HashItem *getNext() { return nextItem; }
-
-  K getKey() { return key; }
-
-  V getValue() { return value; }
-
-  void setValue(V value) { this->value = value; }
-
- private:
-  K key;
-  V value;
-  HashItem *nextItem;
-};
-
-/*
- * template HashMap for storing items
- * default hash function HF = std::hash<K>
- */
-template <typename K, typename V, typename HF = std::hash<K>>
-class HashMap {
- public:
-  /*
-   * constructor
-   * @mSize specifies the bucket size og the map
-   */
-  HashMap(std::size_t mSize) {
-    // lock initialization for single thread
-    std::lock_guard<std::mutex> lock(mtx);
-    // if (mSize < 1)
-    // throw std::exception("Number of buckets ust be greater than zero.");
-
-    mapSize = mSize;
-    numOfItems = 0;
-    // initialize
-    hMap = new HashItem<K, V> *[mapSize]();
-  }
-
-  /*
-   * for simplicity no copy constructor
-   * anyway we want test how different threads
-   * use same instance of the map
-   */
-  // HashMap(const HashMap & hmap) = delete;
-
-  /*
-   * inserts item
-   * replaces old value with the new one when item already exists
-   * @key key of the item
-   * @value value of the item
-   */
-  void insert(const K &key, const V &value) {
-    std::lock_guard<std::mutex> lock(mtx);
-    insertHelper(this->hMap, this->mapSize, numOfItems, key, value);
-    condVar.notify_all();
-  }
-
-  /*
-   * erases item with key when siúch item exists
-   * @key of item to erase
-   */
-  void erase(const K &key) {
-    std::lock_guard<std::mutex> lock(mtx);
-    // calculate the bucket where item must be inserted
-    std::size_t hVal = hashFunc(key) % mapSize;
-    HashItem<K, V> *prev = nullptr;
-    HashItem<K, V> *item = hMap[hVal];
-
-    while ((item != nullptr) && (item->getKey() != key)) {
-      prev = item;
-      item = item->getNext();
-    }
-    // no item found with the given key
-    if (item == nullptr) {
-      return;
-    } else {
-      if (prev == nullptr) {
-        // item found is the first item in the bucket
-        hMap[hVal] = item->getNext();
-      } else {
-        // item found in one of the entries in the bucket
-        prev->setNext(item->getNext());
-      }
-      delete item;
-      numOfItems--;
-    }
-    condVar.notify_all();
-  }
-
-  /*
-   * get element with the given key by reference
-   * @key is the key of item that has to be found
-   * @value is the holder where the value of item with key will be copied
-   */
-  bool getItem(const K &key, V &value) const {
-    std::lock_guard<std::mutex> lock(mtx);
-    // calculate the bucket where item must be inserted
-    std::size_t hVal = hashFunc(key) % mapSize;
-    HashItem<K, V> *item = hMap[hVal];
-
-    while ((item != nullptr) && (item->getKey() != key)) item = item->getNext();
-    // item not found
-    if (item == nullptr) {
-      return false;
-    }
-
-    value = item->getValue();
-    return true;
-  }
-
-  /*
-   * get element with the given key by reference
-   * @key is the key of item that has to be found
-   * shows an example of thread waitung for some condition
-   * @value is the holder where the value of item with key will be copied
-   */
-  bool getWithWait(const K &key, V &value) {
-    std::unique_lock<std::mutex> ulock(mtxForWait);
-    condVar.wait(ulock, [this] { return !this->empty(); });
-    // calculate the bucket where item must be inserted
-    std::size_t hVal = hashFunc(key) % mapSize;
-    HashItem<K, V> *item = hMap[hVal];
-
-    while ((item != nullptr) && (item->getKey() != key)) item = item->getNext();
-    // item not found
-    if (item == nullptr) {
-      return false;
-    }
-
-    value = item->getValue();
-    return true;
-  }
-
-  /*
-   * resizes the map
-   * creates new map on heap
-   * copies the elements into new map
-   * @newSize specifies new bucket size
-   */
-  void resize(std::size_t newSize) {
-    std::lock_guard<std::mutex> lock(mtx);
-    if (newSize < 1)
-      throw std::exception("Number of buckets must be greater than zero.");
-
-    resizeHelper(newSize);
-    condVar.notify_all();
-  }
-
-  /*
-   * outputs all items of the map
-   */
-  void outputMap() const {
-    std::lock_guard<std::mutex> lock(mtx);
-    if (numOfItems == 0) {
-      std::cout << "Map is empty." << std::endl << std::endl;
-      return;
-    }
-    std::cout << "Map contains " << numOfItems << " items." << std::endl;
-    for (std::size_t i = 0; i < mapSize; i++) {
-      HashItem<K, V> *item = hMap[i];
-      while (item != nullptr) {
-        std::cout << "Bucket: " << std::setw(3) << i
-                  << ", key: " << std::setw(3) << item->getKey()
-                  << ", value:" << std::setw(3) << item->getValue()
-                  << std::endl;
-        item = item->getNext();
-      }
-    }
-    std::cout << std::endl;
-  }
-
-  /*
-   * returns true when map has no items
-   */
-  bool empty() const {
-    std::lock_guard<std::mutex> lock(mtx);
-    return numOfItems == 0;
-  }
-
-  void clear() {
-    std::lock_guard<std::mutex> lock(mtx);
-    deleteMap(hMap, mapSize);
-    numOfItems = 0;
-    hMap = new HashItem<K, V> *[mapSize]();
-  }
-
-  void deleteDeep() {
-    std::lock_guard<std::mutex> lock(mtx);
-    deleteMapDeep(hMap, mapSize);
-    numOfItems = 0;
-    hMap = new HashItem<K, V> *[mapSize]();
-  }
-
-  /*
-   * returns number of items stored in the map
-   */
-  std::size_t size() const {
-    std::lock_guard<std::mutex> lock(mtx);
-    return numOfItems;
-  }
-
-  /*
-   * returns number of buckets
-   */
-  std::size_t bucket_count() const {
-    std::lock_guard<std::mutex> lock(mtx);
-    return mapSize;
-  }
-
-  /*
-   * desctructor
-   */
-  ~HashMap() {
-    std::lock_guard<std::mutex> lock(mtx);
-    deleteMap(hMap, mapSize);
-  }
-
- private:
-  std::size_t mapSize;
-  std::size_t numOfItems;
-  HF hashFunc;
-  HashItem<K, V> **hMap;
-  mutable std::mutex mtx;
-  mutable std::mutex mtxForWait;
-  std::condition_variable condVar;
-
-  /*
-   * help method for inserting key, value item into the map hm
-   * mapSize specifies the size of the map, items - the number
-   * of stored items, will be incremented when insertion is completed
-   * @hm HashMap
-   * @mSize specifies number of buckets
-   * @items holds the number of items in hm, will be incremented when insertion
-   * successful
-   * @key - key of item to insert
-   * @value - value of item to insert
-   */
-  void insertHelper(HashItem<K, V> **hm, const std::size_t &mSize,
-                    std::size_t &items, const K &key, const V &value) {
-    std::size_t hVal = hashFunc(key) % mSize;
-    HashItem<K, V> *prev = nullptr;
-    HashItem<K, V> *item = hm[hVal];
-
-    while ((item != nullptr) && (item->getKey() != key)) {
-      prev = item;
-      item = item->getNext();
-    }
-
-    // inserting new item
-    if (item == nullptr) {
-      item = new HashItem<K, V>(key, value);
-      items++;
-      if (prev == nullptr) {
-        // insert new value as first item in the bucket
-        hm[hVal] = item;
-      } else {
-        // append new item on previous in the same bucket
-        prev->setNext(item);
-      }
-    } else {
-      // replace existing value
-      item->setValue(value);
-    }
-  }
-
-  /*
-   * help method to resize the map
-   * @newSize specifies new number of buckets
-   */
-  void resizeHelper(std::size_t newSize) {
-    HashItem<K, V> **newMap = new HashItem<K, V> *[newSize]();
-    std::size_t items = 0;
-    for (std::size_t i = 0; i < mapSize; i++) {
-      HashItem<K, V> *item = hMap[i];
-      while (item != nullptr) {
-        insertHelper(newMap, newSize, items, item->getKey(), item->getValue());
-        item = item->getNext();
-      }
-    }
-
-    deleteMap(hMap, mapSize);
-    hMap = newMap;
-    mapSize = newSize;
-    numOfItems = items;
-    newMap = nullptr;
-  }
-
-  /*
-   * help function for deleting the map hm
-   * @hm HashMap
-   * @mSize number of buckets in hm
-   */
-  void deleteMap(HashItem<K, V> **hm, std::size_t mSize) {
-    // delete all nodes
-    for (std::size_t i = 0; i < mSize; ++i) {
-      HashItem<K, V> *item = hm[i];
-      while (item != nullptr) {
-        HashItem<K, V> *prev = item;
-        item = item->getNext();
-        delete prev;
-      }
-      hm[i] = nullptr;
-    }
-    // delete the map
-    delete[] hm;
-  }
-
-  /*
-   * help function for deleting the map hm
-   * @hm HashMap
-   * @mSize number of buckets in hm
-   */
-  void deleteMapDeep(HashItem<K, V> **hm, std::size_t mSize) {
-    // delete all nodes
-    for (std::size_t i = 0; i < mSize; ++i) {
-      HashItem<K, V> *item = hm[i];
-      while (item != nullptr) {
-        HashItem<K, V> *prev = item;
-        item = item->getNext();
-        delete prev->getValue();
-        delete prev;
-      }
-      hm[i] = nullptr;
-    }
-    // delete the map
-    delete[] hm;
-  }
-};
-
-#endif /* HASHMAP_H */