summaryrefslogtreecommitdiff
path: root/src/mongo/db/storage/column_store.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/mongo/db/storage/column_store.h')
-rw-r--r--src/mongo/db/storage/column_store.h17
1 files changed, 11 insertions, 6 deletions
diff --git a/src/mongo/db/storage/column_store.h b/src/mongo/db/storage/column_store.h
index 19472a633ec..c03170db3a7 100644
--- a/src/mongo/db/storage/column_store.h
+++ b/src/mongo/db/storage/column_store.h
@@ -391,7 +391,7 @@ struct SplitCellView {
return Out();
invariant(elemPtr < end);
- return decodeAndAdvance(elemPtr, encoder);
+ return decodeAndAdvance(elemPtr, *encoder);
}
bool hasNext() const {
return elemPtr != end;
@@ -399,14 +399,19 @@ struct SplitCellView {
const char* elemPtr;
const char* end;
- ValueEncoder encoder;
+ ValueEncoder* encoder; // Unowned
};
-
+ /**
+ * Construct a cursor that can iterate the values in a column store cell. Requires a
+ * 'ValueEncoder' that understands the binary format of cell data.
+ *
+ * Note: the 'ValueEncoder' is stored as an unowned pointer. The referenced encoder must stay
+ * valid for the lifetime of the returned cursor.
+ */
template <class ValueEncoder>
- auto subcellValuesGenerator(ValueEncoder&& valEncoder) const {
- return Cursor<ValueEncoder>{
- firstValuePtr, arrInfo.rawData(), std::forward<ValueEncoder>(valEncoder)};
+ auto subcellValuesGenerator(ValueEncoder* valEncoder) const {
+ return Cursor<ValueEncoder>{firstValuePtr, arrInfo.rawData(), valEncoder};
}
static SplitCellView parse(CellView cell) {