tatami_chunked
Helpers to create custom chunked tatami matrices
Loading...
Searching...
No Matches
DenseSlabFactory.hpp
Go to the documentation of this file.
1#ifndef TATAMI_CHUNKED_DENSE_SLAB_FACTORY_HPP
2#define TATAMI_CHUNKED_DENSE_SLAB_FACTORY_HPP
3
4#include "SlabCacheStats.hpp"
5
6#include <vector>
7#include <cstddef>
8
9#include "sanisizer/sanisizer.hpp"
10
16namespace tatami_chunked {
17
28template<typename Value_>
35 template<typename MaxSlabs_>
36 DenseSlabFactory(std::size_t slab_size, MaxSlabs_ max_slabs) :
37 my_slab_size(slab_size),
38 my_pool(sanisizer::product<decltype(my_pool.size())>(max_slabs, slab_size))
39 {}
40
45 template<typename MaxSlabs_>
46 DenseSlabFactory(const SlabCacheStats<MaxSlabs_>& stats) : DenseSlabFactory(stats.slab_size_in_elements, stats.max_slabs_in_cache) {}
47
51 // Delete the copy constructors as we're passing out pointers.
52 DenseSlabFactory(const DenseSlabFactory&) = delete;
53 DenseSlabFactory& operator=(const DenseSlabFactory&) = delete;
54
55 // Move constructors are okay though.
57 DenseSlabFactory& operator=(DenseSlabFactory&&) = default;
62private:
63 typedef std::vector<Value_> Pool;
64 typename Pool::size_type my_offset = 0, my_slab_size;
65 Pool my_pool;
66
67public:
71 struct Slab {
75 Value_* data = NULL;
76 };
77
85 Slab output;
86 output.data = my_pool.data() + my_offset;
87 my_offset += my_slab_size;
88 return output;
89 }
90};
91
92}
93
94#endif
Slab cache statistics.
Methods to handle chunked tatami matrices.
Definition ChunkDimensionStats.hpp:4
Dense slab.
Definition DenseSlabFactory.hpp:71
Value_ * data
Definition DenseSlabFactory.hpp:75
Factory for dense slabs.
Definition DenseSlabFactory.hpp:29
DenseSlabFactory(std::size_t slab_size, MaxSlabs_ max_slabs)
Definition DenseSlabFactory.hpp:36
DenseSlabFactory(const SlabCacheStats< MaxSlabs_ > &stats)
Definition DenseSlabFactory.hpp:46
Slab create()
Definition DenseSlabFactory.hpp:84
Statistics for slab caching.
Definition SlabCacheStats.hpp:26