26 if (name_.length() < 2 || !std::isalpha(name_.front())) {
27 throw std::invalid_argument(
28 "Invalid column name: minimum length of two and start with alpha character.");
44 if (name_.length() < 2 || !std::isalpha(name_.front())) {
45 throw std::invalid_argument(
46 "Invalid column name: minimum length of two and start with alpha character.");
49 if (data_.size() != null_bitmap_.size()) {
50 throw std::out_of_range(
51 "Input vectors size mismatch, the data and valid vectors size must be the same.");
54 null_count_ = std::count(null_bitmap_.begin(), null_bitmap_.end(),
false);
65 bool is_null(std::size_t index)
const noexcept override {
67 if (index >=
size()) {
71 return !null_bitmap_.empty() && !null_bitmap_[index];
74 bool is_valid(std::size_t index)
const noexcept override {
76 if (index >=
size()) {
80 return null_bitmap_.empty() || null_bitmap_[index];
83 const std::any
value(std::size_t index)
const noexcept override {
94 const std::optional<value_type>
value_safe(
const std::size_t index)
const noexcept {
118 std::vector<TYPE> data_;
119 std::vector<bool> null_bitmap_{};
120 std::size_t null_count_ = 0;
DataTable column iterator data type class.
Definition column_iterator.h:29
DataTable column visitor interface.
Definition visitor.h:8
DataTable columns interface data type.
Definition column.h:11
Primitive data type DataTable columns class.
Definition column_primitive.h:14
IteratorType begin() const
Gets the iterator to the first element of the column.
Definition column_primitive.h:110
bool is_null(std::size_t index) const noexcept override
Determine whether a column value is null.
Definition column_primitive.h:65
const std::any value(std::size_t index) const noexcept override
Gets the column value at a given index.
Definition column_primitive.h:83
PrimitiveDataTableColumn(std::string &&name, std::vector< TYPE > &&data)
Initialises a new instance of the PrimitiveDataTableColumn class.
Definition column_primitive.h:24
std::string type() const noexcept override
Gets the column type name.
Definition column_primitive.h:57
const value_type value_unsafe(const std::size_t index) const
Gets the column value at a given index, unsafe without boundary checks.
Definition column_primitive.h:106
const std::optional< value_type > value_safe(const std::size_t index) const noexcept
Gets the column value at a given index.
Definition column_primitive.h:94
PrimitiveDataTableColumn(std::string &&name, std::vector< TYPE > &&data, std::vector< bool > &&null_bitmap)
Initialises a new instance of the PrimitiveDataTableColumn class.
Definition column_primitive.h:41
TYPE value_type
Definition column_primitive.h:16
DataTableColumnIterator< PrimitiveDataTableColumn< TYPE > > IteratorType
Definition column_primitive.h:17
std::size_t size() const noexcept override
The size of the column data, number of rows.
Definition column_primitive.h:63
IteratorType end() const
Gets the iterator element following the last element of the column.
Definition column_primitive.h:114
std::string name() const noexcept override
Gets the column name identifier.
Definition column_primitive.h:59
bool is_valid(std::size_t index) const noexcept override
Determine whether a column value is not null.
Definition column_primitive.h:74
std::size_t null_count() const noexcept override
Gets the number of null values in the column data.
Definition column_primitive.h:61
DataTable column for storing string data type class.
Definition column_primitive.h:124
void accept(DataTableColumnVisitor &visitor) const override
Double dispatch the column using a visitor implementation.
Definition column_primitive.h:130
std::string type() const noexcept override
Gets the column type name.
Definition column_primitive.h:128
Top-level namespace for Health-GPS Core C++ API.
Definition analysis.h:7