Advertisement
Guest User

Custom cache

a guest
Apr 4th, 2020
153
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.03 KB | None | 0 0
  1. #include <iostream>
  2. #include <unordered_map>
  3. #include <string>
  4.  
  5. template<typename T, typename U>
  6. struct custom_cache{
  7.     struct Node {
  8.         Node() = default;
  9.         Node(U value) : value(value) {}
  10.         U value;
  11.         Node* next = nullptr;
  12.         Node* prev = nullptr;
  13.     };
  14.  
  15.     std::unordered_map<T, Node*> addresses;
  16.     Node* begin = nullptr;
  17.     Node* end = nullptr;
  18.  
  19.     U get(T key) {
  20.         if (!begin || !end || addresses.count(key) == 0) {
  21.             return NULL;
  22.         }
  23.         addresses[key]->next->prev = addresses[key]->prev;
  24.         addresses[key]->prev->next = addresses[key]->next;
  25.         begin->next = addresses[key];
  26.         addresses[key]->next = nullptr;
  27.         addresses[key]->prev = begin;
  28.         begin = addresses[key];
  29.         return begin->value;
  30.     }
  31.  
  32.     void put(T key, U value) {
  33.         if (addresses.count(key) != 0) {
  34.             return;
  35.         }
  36.         auto node = new Node(value);
  37.         addresses[key] = node;
  38.         if (!begin || !end) {
  39.             begin = end = node;
  40.         } else {
  41.             node->prev = begin;
  42.             begin->next = node;
  43.             begin = node;
  44.             end->next->prev = nullptr;
  45.             end = end->next;
  46.         }
  47.     }
  48. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement