diff options
Diffstat (limited to 'src/mongo/db/field_ref_set.cpp')
-rw-r--r-- | src/mongo/db/field_ref_set.cpp | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/src/mongo/db/field_ref_set.cpp b/src/mongo/db/field_ref_set.cpp index c55a722b64b..3b98f049448 100644 --- a/src/mongo/db/field_ref_set.cpp +++ b/src/mongo/db/field_ref_set.cpp @@ -60,6 +60,14 @@ bool FieldRefSet::FieldRefPtrLessThan::operator()(const FieldRef* l, const Field FieldRefSet::FieldRefSet() {} +FieldRefSet::FieldRefSet(const std::vector<std::unique_ptr<FieldRef>>& paths) { + fillFrom(paths); +} + +FieldRefSet::FieldRefSet(const vector<const FieldRef*>& paths) { + _fieldSet.insert(paths.begin(), paths.end()); +} + FieldRefSet::FieldRefSet(const vector<FieldRef*>& paths) { fillFrom(paths); } @@ -105,6 +113,19 @@ void FieldRefSet::fillFrom(const std::vector<FieldRef*>& fields) { _fieldSet.insert(fields.begin(), fields.end()); } +void FieldRefSet::fillFrom(const std::vector<std::unique_ptr<FieldRef>>& fields) { + dassert(_fieldSet.empty()); + std::transform(fields.begin(), + fields.end(), + std::inserter(_fieldSet, _fieldSet.begin()), + [](const auto& field) { return field.get(); }); +} + +bool FieldRefSet::insertNoConflict(const FieldRef* toInsert) { + const FieldRef* conflict; + return insert(toInsert, &conflict); +} + bool FieldRefSet::insert(const FieldRef* toInsert, const FieldRef** conflict) { // We can determine if two fields conflict by checking their common prefix. // |