Advertisement
Guest User

Custom cache

a guest
Apr 4th, 2020
169
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.91 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.         U value;
  9.         Node* next = nullptr;
  10.         Node* prev = nullptr;
  11.     };
  12.  
  13.     std::unordered_map<T, Node*> addresses;
  14.     Node* begin = nullptr;
  15.     Node* end = nullptr;
  16.  
  17.     U get(T key) {
  18.         if (!begin || !end || addresses.count(key) == 0) {
  19.             return NULL;
  20.         }
  21.         addresses[key]->next->prev = addresses[key]->prev;
  22.         addresses[key]->prev->next = addresses[key]->next;
  23.         begin->next = addresses[key];
  24.         addresses[key]->next = nullptr;
  25.         addresses[key]->prev = begin;
  26.         begin = addresses[key];
  27.         return begin->value;
  28.     }
  29.  
  30.     void put(T key, U value) {
  31.         auto node = new Node();
  32.         node->value = value;
  33.         if (!begin || !end) {
  34.             begin = end = node;
  35.         } else {
  36.             node->prev = begin;
  37.             begin->next = node;
  38.             begin = node;
  39.             end->next->prev = nullptr;
  40.             end = end->next;
  41.         }
  42.     }
  43. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement