mutable
A Database System for Research and Fast Prototyping
Loading...
Searching...
No Matches
DataLayoutFactory.hpp
Go to the documentation of this file.
1#pragma once
2
5#include <vector>
6
7
8namespace m {
9
10struct Type;
11
12namespace storage {
13
17{
18 virtual ~DataLayoutFactory() { }
19
21 virtual std::unique_ptr<DataLayoutFactory> clone() const = 0;
22
24 DataLayout make(const Schema &schema, std::size_t num_tuples = 0) const {
25 view v(schema.cbegin(), schema.cend(), [](auto it) -> auto & { return it->type; });
26 return make(v.begin(), v.end(), num_tuples);
27 }
28
30 template<typename It>
31 DataLayout make(It begin, It end, std::size_t num_tuples = 0) const {
32 return make(std::vector<const Type*>(begin, end), num_tuples);
33 }
34
36 virtual DataLayout make(std::vector<const Type*> types, std::size_t num_tuples = 0) const = 0;
37
38 friend M_EXPORT std::ostream & operator<<(std::ostream &out, const DataLayoutFactory &factory);
39
40 void dump(std::ostream &out) const;
41 void dump() const;
42
43 private:
44 virtual void print(std::ostream &out) const = 0;
45};
46
48{
49 std::unique_ptr<DataLayoutFactory> clone() const override { return std::make_unique<RowLayoutFactory>(); }
50
52 DataLayout make(std::vector<const Type*> types, std::size_t num_tuples = 0) const override;
53
54 private:
55 void print(std::ostream &out) const override { out << "Row"; }
56};
57
59{
60 static constexpr uint64_t DEFAULT_NUM_TUPLES = 16;
61 static constexpr uint64_t DEFAULT_NUM_BYTES = 1UL << 12;
62
64
65 private:
67 union {
68 uint64_t num_tuples_;
69 uint64_t num_bytes_;
70 };
71
72 public:
74 : option_(option)
75 {
76 if (NTuples == option_)
78 else
80 }
81 PAXLayoutFactory(block_size_t option, uint64_t num)
82 : option_(option)
83 {
84 M_insist(num != 0, "number of tuples or rather number of bytes must at least be 1");
85 if (NTuples == option_)
86 num_tuples_ = num;
87 else
88 num_bytes_ = num;
89 }
90
91 std::unique_ptr<DataLayoutFactory> clone() const override {
92 return std::make_unique<PAXLayoutFactory>(option_, NTuples == option_ ? num_tuples_ : num_bytes_);
93 }
94
96 DataLayout make(std::vector<const Type*> types, std::size_t num_tuples = 0) const override;
97
98 private:
99 void print(std::ostream &out) const override {
100 out << "PAX(";
101 if (NTuples == option_)
102 out << "#tuples=" << num_tuples_;
103 else
104 out << "#bytes=" << num_bytes_;
105 out << ")";
106 }
107};
108
109}
110
111}
#define M_insist(...)
Definition: macro.hpp:129
‍mutable namespace
Definition: Backend.hpp:10
const Type
Definition: Type.hpp:498
A Schema represents a sequence of identifiers, optionally with a prefix, and their associated types.
Definition: Schema.hpp:39
const_iterator cend() const
Definition: Schema.hpp:121
const_iterator cbegin() const
Definition: Schema.hpp:120
This is an interface for factories that compute particular DataLayouts for a given sequence of Types,...
virtual void print(std::ostream &out) const =0
virtual std::unique_ptr< DataLayoutFactory > clone() const =0
Creates and returns a deep copy of this.
virtual DataLayout make(std::vector< const Type * > types, std::size_t num_tuples=0) const =0
Returns a DataLayout for the given types and length num_tuples (0 means infinite layout).
DataLayout make(It begin, It end, std::size_t num_tuples=0) const
Returns a DataLayout for the given Types in the range from begin to end and length num_tuples.
friend M_EXPORT std::ostream & operator<<(std::ostream &out, const DataLayoutFactory &factory)
DataLayout make(const Schema &schema, std::size_t num_tuples=0) const
Returns a DataLayout for the given Types contained in schema and length num_tuples.
Models how data is laid out in a linear address space.
Definition: DataLayout.hpp:29
PAXLayoutFactory(block_size_t option, uint64_t num)
static constexpr uint64_t DEFAULT_NUM_TUPLES
PAXLayoutFactory(block_size_t option=NBytes)
void print(std::ostream &out) const override
std::unique_ptr< DataLayoutFactory > clone() const override
Creates and returns a deep copy of this.
static constexpr uint64_t DEFAULT_NUM_BYTES
4 KiB
DataLayout make(std::vector< const Type * > types, std::size_t num_tuples=0) const override
Returns a DataLayout for the given types and length num_tuples (0 means infinite layout).
DataLayout make(std::vector< const Type * > types, std::size_t num_tuples=0) const override
Returns a DataLayout for the given types and length num_tuples (0 means infinite layout).
void print(std::ostream &out) const override
std::unique_ptr< DataLayoutFactory > clone() const override
Creates and returns a deep copy of this.
Definition: ADT.hpp:750