@@ -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