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