Skip to content

Commit 027432d

Browse files
committed
bug fix: geoframe type erased layer accessor exposes correct number of rows even if no data is supplied (point-pattern layer)
1 parent 00e5312 commit 027432d

File tree

1 file changed

+5
-3
lines changed

1 file changed

+5
-3
lines changed

fdaPDE/src/geoframe/geoframe.h

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,8 @@ template <typename... Triangulation_> struct GeoFrame {
4545
layer_t(const std::string& name, const CategoryType& category, const LayerType& geo_data) :
4646
geo_data_(std::make_shared<LayerType>(geo_data)),
4747
data_(std::addressof(reinterpret_cast<LayerType*>(geo_data_.get())->data())),
48-
name_(name) {
48+
name_(name),
49+
n_rows_(geo_data.rows()) {
4950
geoframe_assert(category.size() == Order, "bad layer construction, no matching order.");
5051
std::copy(category.begin(), category.end(), category_.begin());
5152
// store pointers to spatial indexes
@@ -62,9 +63,9 @@ template <typename... Triangulation_> struct GeoFrame {
6263
const void* geo_data() const { return geo_data_.get(); }
6364
const std::array<ltype, Order>& category() const { return category_; }
6465
bool contains(const std::string& colname) const { return data_->contains(colname); }
65-
int rows() const { return data_->rows(); }
66+
int rows() const { return n_rows_; }
6667
int cols() const { return data_->cols(); }
67-
int size() const { return data_->size(); }
68+
int size() const { return rows() * cols(); }
6869
std::vector<std::string> colnames() const { return data_->colnames(); }
6970
void* geo_index(int n) const { return geo_index_.at(n); }
7071
// accessors
@@ -94,6 +95,7 @@ template <typename... Triangulation_> struct GeoFrame {
9495
storage_t* data_;
9596
std::array<ltype, Order> category_;
9697
std::string name_;
98+
int n_rows_;
9799
};
98100
private:
99101
template <typename T> constexpr auto ltype_from_layer_tag() const {

0 commit comments

Comments
 (0)