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.");
42 std::vector<bool> &&null_bitmap)
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);
57 std::string
type() const noexcept
override {
return typeid(TYPE).
name(); }
59 std::string
name() const noexcept
override {
return name_; }
61 std::size_t
null_count() const noexcept
override {
return null_count_; }
63 std::size_t
size() const noexcept
override {
return data_.size(); }
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;
128 std::string
type() const noexcept
override {
return "string"; }
DataTable column iterator data type class.
Definition: column_iterator.h:29
DataTable column visitor interface.
Definition: visitor.h:8
virtual void visit(const StringDataTableColumn &column)=0
Visits a column of StringDataTableColumn type.
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 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
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
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