table: cleanup dependencies in prep for new iterator

Change-Id: Ibef9256878fb26ab1eb15ff38453d18a005cde8c
diff --git a/python/generators/trace_processor_table/serialize.py b/python/generators/trace_processor_table/serialize.py
index fed0766..24c243b 100644
--- a/python/generators/trace_processor_table/serialize.py
+++ b/python/generators/trace_processor_table/serialize.py
@@ -175,17 +175,6 @@
     }}
     '''
 
-  def iterator_setter(self) -> Optional[str]:
-    if self.is_implicit_id or self.is_implicit_type:
-      return None
-    return f'''
-      void set_{self.name}(ColumnType::{self.name}::non_optional_type v) {{
-        auto* col = mutable_table_->mutable_{self.name}();
-        col->SetAtIdx(
-          iterator_.StorageIndexForColumn(col->index_in_table()), v);
-      }}
-    '''
-
   def static_schema(self) -> Optional[str]:
     if self.is_implicit_id or self.is_implicit_type:
       return None
@@ -242,7 +231,7 @@
     if self.is_ancestor:
       return None
     return f'''
-  RefPtr<column::DataLayer> {self.name}_storage_layer_;
+  RefPtr<column::StorageLayer> {self.name}_storage_layer_;
   '''
 
   def null_layer(self) -> Optional[str]:
@@ -251,7 +240,7 @@
     if not self.is_optional or self.is_string:
       return f''
     return f'''
-  RefPtr<column::DataLayer> {self.name}_null_layer_;
+  RefPtr<column::OverlayLayer> {self.name}_null_layer_;
   '''
 
   def storage_layer_create(self) -> str:
@@ -502,13 +491,9 @@
       '''
 
   def iterator(self) -> str:
-    iterator_setters = self.foreach_col(
-        ColumnSerializer.iterator_setter, delimiter='\n')
     return f'''
   class Iterator : public ConstIterator {{
     public:
-     {iterator_setters}
-
      RowReference row_reference() const {{
        return RowReference(mutable_table_, CurrentRowNumber());
      }}
@@ -586,7 +571,7 @@
     {self.foreach_col(ColumnSerializer.static_assert_flags)}
     {self.foreach_col(ColumnSerializer.extend_nullable_vector)}
 
-    std::vector<RefPtr<column::DataLayer>> overlay_layers(OverlayCount(&parent) + 1);
+    std::vector<RefPtr<column::OverlayLayer>> overlay_layers(OverlayCount(&parent) + 1);
     for (uint32_t i = 0; i < overlay_layers.size(); ++i) {{
       if (overlays()[i].row_map().IsIndexVector()) {{
         overlay_layers[i].reset(new column::ArrangementOverlay(
diff --git a/src/trace_processor/db/runtime_table.cc b/src/trace_processor/db/runtime_table.cc
index 102f003..9019d00 100644
--- a/src/trace_processor/db/runtime_table.cc
+++ b/src/trace_processor/db/runtime_table.cc
@@ -18,6 +18,7 @@
 
 #include <algorithm>
 #include <cinttypes>
+#include <cstddef>
 #include <cstdint>
 #include <limits>
 #include <memory>
@@ -30,6 +31,7 @@
 #include "perfetto/base/logging.h"
 #include "perfetto/base/status.h"
 #include "perfetto/ext/base/status_or.h"
+#include "perfetto/trace_processor/basic_types.h"
 #include "perfetto/trace_processor/ref_counted.h"
 #include "src/trace_processor/containers/bit_vector.h"
 #include "src/trace_processor/containers/string_pool.h"
@@ -38,7 +40,9 @@
 #include "src/trace_processor/db/column/id_storage.h"
 #include "src/trace_processor/db/column/null_overlay.h"
 #include "src/trace_processor/db/column/numeric_storage.h"
+#include "src/trace_processor/db/column/overlay_layer.h"
 #include "src/trace_processor/db/column/selector_overlay.h"
+#include "src/trace_processor/db/column/storage_layer.h"
 #include "src/trace_processor/db/column/string_storage.h"
 #include "src/trace_processor/db/column/types.h"
 #include "src/trace_processor/db/column_storage.h"
@@ -65,8 +69,8 @@
     uint32_t col_idx,
     const char* col_name,
     ColumnStorage<int64_t>* ints_storage,
-    std::vector<RefPtr<column::DataLayer>>& storage_layers,
-    std::vector<RefPtr<column::DataLayer>>& overlay_layers,
+    std::vector<RefPtr<column::StorageLayer>>& storage_layers,
+    std::vector<RefPtr<column::OverlayLayer>>& overlay_layers,
     std::vector<ColumnLegacy>& legacy_columns,
     std::vector<ColumnStorageOverlay>& legacy_overlays) {
   const std::vector<int64_t>& values = ints_storage->vector();
@@ -137,9 +141,9 @@
     uint32_t row_count,
     std::vector<ColumnLegacy> columns,
     std::vector<ColumnStorageOverlay> overlays,
-    std::vector<RefPtr<column::DataLayer>> storage_layers,
-    std::vector<RefPtr<column::DataLayer>> null_layers,
-    std::vector<RefPtr<column::DataLayer>> overlay_layers)
+    std::vector<RefPtr<column::StorageLayer>> storage_layers,
+    std::vector<RefPtr<column::OverlayLayer>> null_layers,
+    std::vector<RefPtr<column::OverlayLayer>> overlay_layers)
     : Table(pool, row_count, std::move(columns), std::move(overlays)) {
   OnConstructionCompleted(std::move(storage_layers), std::move(null_layers),
                           std::move(overlay_layers));
@@ -367,8 +371,8 @@
 
 base::StatusOr<std::unique_ptr<RuntimeTable>> RuntimeTable::Builder::Build(
     uint32_t rows) && {
-  std::vector<RefPtr<column::DataLayer>> storage_layers(col_names_.size() + 1);
-  std::vector<RefPtr<column::DataLayer>> null_layers(col_names_.size() + 1);
+  std::vector<RefPtr<column::StorageLayer>> storage_layers(col_names_.size() + 1);
+  std::vector<RefPtr<column::OverlayLayer>> null_layers(col_names_.size() + 1);
 
   std::vector<ColumnLegacy> legacy_columns;
   std::vector<ColumnStorageOverlay> legacy_overlays;
@@ -380,7 +384,7 @@
   // one overlay per column.
   legacy_overlays.reserve(col_names_.size() + 1);
   legacy_overlays.emplace_back(rows);
-  std::vector<RefPtr<column::DataLayer>> overlay_layers(1);
+  std::vector<RefPtr<column::OverlayLayer>> overlay_layers(1);
 
   for (uint32_t i = 0; i < col_names_.size(); ++i) {
     auto* col = storage_[i].get();
diff --git a/src/trace_processor/db/runtime_table.h b/src/trace_processor/db/runtime_table.h
index 42fdb60..3dd2a78 100644
--- a/src/trace_processor/db/runtime_table.h
+++ b/src/trace_processor/db/runtime_table.h
@@ -29,7 +29,8 @@
 #include "perfetto/trace_processor/ref_counted.h"
 #include "src/trace_processor/containers/string_pool.h"
 #include "src/trace_processor/db/column.h"
-#include "src/trace_processor/db/column/data_layer.h"
+#include "src/trace_processor/db/column/overlay_layer.h"
+#include "src/trace_processor/db/column/storage_layer.h"
 #include "src/trace_processor/db/column_storage.h"
 #include "src/trace_processor/db/column_storage_overlay.h"
 #include "src/trace_processor/db/table.h"
@@ -90,13 +91,14 @@
     std::vector<std::unique_ptr<VariantStorage>> storage_;
   };
 
-  explicit RuntimeTable(StringPool*,
-                        uint32_t row_count,
-                        std::vector<ColumnLegacy>,
-                        std::vector<ColumnStorageOverlay>,
-                        std::vector<RefPtr<column::DataLayer>> storage_layers,
-                        std::vector<RefPtr<column::DataLayer>> null_layers,
-                        std::vector<RefPtr<column::DataLayer>> overlay_layers);
+  explicit RuntimeTable(
+      StringPool*,
+      uint32_t row_count,
+      std::vector<ColumnLegacy>,
+      std::vector<ColumnStorageOverlay>,
+      std::vector<RefPtr<column::StorageLayer>> storage_layers,
+      std::vector<RefPtr<column::OverlayLayer>> null_layers,
+      std::vector<RefPtr<column::OverlayLayer>> overlay_layers);
   ~RuntimeTable() override;
 
   RuntimeTable(RuntimeTable&&) = default;
diff --git a/src/trace_processor/db/table.cc b/src/trace_processor/db/table.cc
index 45625d8..75988fc 100644
--- a/src/trace_processor/db/table.cc
+++ b/src/trace_processor/db/table.cc
@@ -32,8 +32,10 @@
 #include "src/trace_processor/db/column.h"
 #include "src/trace_processor/db/column/arrangement_overlay.h"
 #include "src/trace_processor/db/column/data_layer.h"
+#include "src/trace_processor/db/column/overlay_layer.h"
 #include "src/trace_processor/db/column/range_overlay.h"
 #include "src/trace_processor/db/column/selector_overlay.h"
+#include "src/trace_processor/db/column/storage_layer.h"
 #include "src/trace_processor/db/column/types.h"
 #include "src/trace_processor/db/column_storage_overlay.h"
 #include "src/trace_processor/db/query_executor.h"
@@ -142,8 +144,7 @@
 
   // Prework - use indexes if possible and decide which one.
   std::vector<uint32_t> maybe_idx_cols;
-  for (uint32_t i = 0; i < c_vec.size(); i++) {
-    const Constraint& c = c_vec[i];
+  for (const auto& c : c_vec) {
     // Id columns shouldn't use index.
     if (columns()[c.col_idx].IsId()) {
       break;
@@ -152,7 +153,6 @@
     if (!IsSortingOp(c.op)) {
       break;
     }
-
     maybe_idx_cols.push_back(c.col_idx);
 
     // For the next col to be able to use index, all previous constraints have
@@ -178,24 +178,20 @@
 
   for (uint32_t i = 0; i < maybe_idx_cols.size(); i++) {
     const Constraint& c = c_vec[i];
-
     Range r =
         ChainForColumn(c.col_idx).OrderedIndexSearch(c.op, c.value, o_idxs);
     o_idxs.data += r.start;
     o_idxs.size = r.size();
   }
+  c_vec.erase(c_vec.begin(),
+              c_vec.begin() + static_cast<uint32_t>(maybe_idx_cols.size()));
 
   std::vector<uint32_t> res_vec(o_idxs.data, o_idxs.data + o_idxs.size);
   if (res_vec.size() < kIndexVectorThreshold) {
     std::sort(res_vec.begin(), res_vec.end());
-    rm = RowMap(std::move(res_vec));
-  } else {
-    rm = RowMap(BitVector::FromUnsortedIndexVector(res_vec));
+    return RowMap(std::move(res_vec));
   }
-
-  c_vec.erase(c_vec.begin(),
-              c_vec.begin() + static_cast<uint32_t>(maybe_idx_cols.size()));
-  return rm;
+  return RowMap(BitVector::FromUnsortedIndexVector(res_vec));
 }
 
 RowMap Table::QueryToRowMap(const Query& q) const {
@@ -270,7 +266,8 @@
     table.columns_[ob.front().col_idx].flags_ |= ColumnLegacy::Flag::kSorted;
   }
 
-  std::vector<RefPtr<column::DataLayer>> overlay_layers(table.overlays_.size());
+  std::vector<RefPtr<column::OverlayLayer>> overlay_layers(
+      table.overlays_.size());
   for (uint32_t i = 0; i < table.overlays_.size(); ++i) {
     if (table.overlays_[i].row_map().IsIndexVector()) {
       overlay_layers[i].reset(new column::ArrangementOverlay(
@@ -290,9 +287,9 @@
 }
 
 void Table::OnConstructionCompleted(
-    std::vector<RefPtr<column::DataLayer>> storage_layers,
-    std::vector<RefPtr<column::DataLayer>> null_layers,
-    std::vector<RefPtr<column::DataLayer>> overlay_layers) {
+    std::vector<RefPtr<column::StorageLayer>> storage_layers,
+    std::vector<RefPtr<column::OverlayLayer>> null_layers,
+    std::vector<RefPtr<column::OverlayLayer>> overlay_layers) {
   for (ColumnLegacy& col : columns_) {
     col.BindToTable(this, string_pool_);
   }
diff --git a/src/trace_processor/db/table.h b/src/trace_processor/db/table.h
index 8482bcb..cc6b586 100644
--- a/src/trace_processor/db/table.h
+++ b/src/trace_processor/db/table.h
@@ -22,26 +22,26 @@
 #include <memory>
 #include <optional>
 #include <string>
-#include <unordered_set>
 #include <utility>
 #include <vector>
 
 #include "perfetto/base/logging.h"
 #include "perfetto/base/status.h"
-#include "perfetto/ext/base/flat_hash_map.h"
-#include "perfetto/ext/base/status_or.h"
 #include "perfetto/trace_processor/basic_types.h"
 #include "perfetto/trace_processor/ref_counted.h"
 #include "src/trace_processor/containers/row_map.h"
 #include "src/trace_processor/containers/string_pool.h"
 #include "src/trace_processor/db/column.h"
 #include "src/trace_processor/db/column/data_layer.h"
+#include "src/trace_processor/db/column/overlay_layer.h"
+#include "src/trace_processor/db/column/storage_layer.h"
 #include "src/trace_processor/db/column/types.h"
 #include "src/trace_processor/db/column_storage_overlay.h"
 
 namespace perfetto::trace_processor {
 
 namespace {
+
 using OrderedIndices = column::DataLayerChain::OrderedIndices;
 
 OrderedIndices OrderedIndicesFromIndex(const std::vector<uint32_t>& index) {
@@ -50,6 +50,7 @@
   o.size = static_cast<uint32_t>(index.size());
   return o;
 }
+
 }  // namespace
 
 // Represents a table of data with named, strongly typed columns.
@@ -225,10 +226,10 @@
   uint32_t row_count() const { return row_count_; }
   StringPool* string_pool() const { return string_pool_; }
   const std::vector<ColumnLegacy>& columns() const { return columns_; }
-  const std::vector<RefPtr<column::DataLayer>>& storage_layers() const {
+  const std::vector<RefPtr<column::StorageLayer>>& storage_layers() const {
     return storage_layers_;
   }
-  const std::vector<RefPtr<column::DataLayer>>& null_layers() const {
+  const std::vector<RefPtr<column::OverlayLayer>>& null_layers() const {
     return null_layers_;
   }
 
@@ -256,9 +257,9 @@
   }
 
   void OnConstructionCompleted(
-      std::vector<RefPtr<column::DataLayer>> storage_layers,
-      std::vector<RefPtr<column::DataLayer>> null_layers,
-      std::vector<RefPtr<column::DataLayer>> overlay_layers);
+      std::vector<RefPtr<column::StorageLayer>> storage_layers,
+      std::vector<RefPtr<column::OverlayLayer>> null_layers,
+      std::vector<RefPtr<column::OverlayLayer>> overlay_layers);
 
   ColumnLegacy* GetColumn(uint32_t index) { return &columns_[index]; }
 
@@ -289,9 +290,9 @@
   std::vector<ColumnStorageOverlay> overlays_;
   std::vector<ColumnLegacy> columns_;
 
-  std::vector<RefPtr<column::DataLayer>> storage_layers_;
-  std::vector<RefPtr<column::DataLayer>> null_layers_;
-  std::vector<RefPtr<column::DataLayer>> overlay_layers_;
+  std::vector<RefPtr<column::StorageLayer>> storage_layers_;
+  std::vector<RefPtr<column::OverlayLayer>> null_layers_;
+  std::vector<RefPtr<column::OverlayLayer>> overlay_layers_;
   mutable std::vector<std::unique_ptr<column::DataLayerChain>> chains_;
 
   std::vector<ColumnIndex> indexes_;
diff --git a/src/trace_processor/tables/macros_internal.h b/src/trace_processor/tables/macros_internal.h
index 94293e7..5f69c6c 100644
--- a/src/trace_processor/tables/macros_internal.h
+++ b/src/trace_processor/tables/macros_internal.h
@@ -32,7 +32,9 @@
 #include "src/trace_processor/containers/string_pool.h"
 #include "src/trace_processor/db/column.h"
 #include "src/trace_processor/db/column/data_layer.h"
+#include "src/trace_processor/db/column/overlay_layer.h"
 #include "src/trace_processor/db/column/selector_overlay.h"
+#include "src/trace_processor/db/column/storage_layer.h"
 #include "src/trace_processor/db/column_storage.h"
 #include "src/trace_processor/db/column_storage_overlay.h"
 #include "src/trace_processor/db/table.h"
@@ -129,9 +131,9 @@
   }
 
   PERFETTO_NO_INLINE void OnConstructionCompletedRegularConstructor(
-      std::initializer_list<RefPtr<column::DataLayer>> storage_layers,
-      std::initializer_list<RefPtr<column::DataLayer>> null_layers) {
-    std::vector<RefPtr<column::DataLayer>> overlay_layers(
+      std::initializer_list<RefPtr<column::StorageLayer>> storage_layers,
+      std::initializer_list<RefPtr<column::OverlayLayer>> null_layers) {
+    std::vector<RefPtr<column::OverlayLayer>> overlay_layers(
         OverlayCount(parent_) + 1);
     for (uint32_t i = 0; i < overlay_layers.size() - 1; ++i) {
       PERFETTO_CHECK(overlays()[i].row_map().IsBitVector());