Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- template <int N, typename T>
- class bucket_sketch
- {
- public:
- bucket_sketch()
- :storage_n(0)
- {
- for (int i = 0; i < N; i++)
- {
- storage[i] = 0;
- }
- }
- public:
- T storage[N];
- int storage_n;
- public:
- void* set(T value)
- {
- storage[storage_n] = value;
- return &storage[storage_n++];
- }
- T get(void* address)
- {
- for (int i = 0; i < storage_n; i++)
- {
- if (address == (void*)&storage[i]) return storage[i];
- }
- return T();
- }
- };
- template <int N, typename T, typename... Ts>
- class bucket :public bucket_sketch<N, T>, public bucket_sketch<N, Ts>...
- {
- public:
- bucket()
- :element_n(N), current(0), bucket_sketch<N, T>(), bucket_sketch<N, Ts>()...
- {
- for (int i = 0; i < N; i++)
- {
- element[i] = 0;
- }
- }
- private:
- int element_n;
- int current;
- void* element[N];
- public:
- template <typename U>
- U set(int n, U value)
- {
- typename element[n] = bucket_sketch<N, U>::set(value);
- return value;
- }
- template <typename U>
- U get(int n)
- {
- return typename bucket_sketch<N, U>::get(element[n]);
- }
- public:
- template <typename U>
- operator U()
- {
- return this->get<U>(this->current);
- }
- typename bucket<N, T, Ts...>& operator[] (int elem)
- {
- current = elem;
- return *this;
- }
- template <typename U>
- U operator= (U value)
- {
- return this->set<U>(current, value);
- }
- };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement