Advertisement
Guest User

???

a guest
Feb 1st, 2017
27
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.37 KB | None | 0 0
  1. template <int N, typename T>
  2. class bucket_sketch
  3. {
  4. public:
  5.  
  6.     bucket_sketch()
  7.         :storage_n(0)
  8.     {
  9.         for (int i = 0; i < N; i++)
  10.         {
  11.             storage[i] = 0;
  12.         }
  13.     }
  14.  
  15. public:
  16.  
  17.     T storage[N];
  18.     int storage_n;
  19.  
  20. public:
  21.  
  22.     void* set(T value)
  23.     {
  24.         storage[storage_n] = value;
  25.  
  26.         return &storage[storage_n++];
  27.     }
  28.  
  29.     T get(void* address)
  30.     {
  31.         for (int i = 0; i < storage_n; i++)
  32.         {
  33.             if (address == (void*)&storage[i]) return storage[i];
  34.         }
  35.         return T();
  36.     }
  37. };
  38.  
  39. template <int N, typename T, typename... Ts>
  40. class bucket :public bucket_sketch<N, T>, public bucket_sketch<N, Ts>...
  41. {
  42. public:
  43.  
  44.     bucket()
  45.         :element_n(N), current(0), bucket_sketch<N, T>(), bucket_sketch<N, Ts>()...
  46.     {
  47.         for (int i = 0; i < N; i++)
  48.         {
  49.             element[i] = 0;
  50.         }
  51.     }
  52.  
  53. private:
  54.  
  55.     int element_n;
  56.     int current;
  57.  
  58.     void* element[N];
  59.  
  60. public:
  61.  
  62.     template <typename U>
  63.     U set(int n, U value)
  64.     {
  65.         typename element[n] = bucket_sketch<N, U>::set(value);
  66.  
  67.         return value;
  68.     }
  69.  
  70.     template <typename U>
  71.     U get(int n)
  72.     {
  73.         return typename bucket_sketch<N, U>::get(element[n]);
  74.     }
  75.  
  76. public:
  77.  
  78.     template <typename U>
  79.     operator U()
  80.     {
  81.         return this->get<U>(this->current);
  82.     }
  83.  
  84.     typename bucket<N, T, Ts...>& operator[] (int elem)
  85.     {
  86.         current = elem;
  87.         return *this;
  88.     }
  89.  
  90.     template <typename U>
  91.     U operator= (U value)
  92.     {
  93.         return this->set<U>(current, value);
  94.     }
  95.  
  96. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement