diff options
author | Alberto Lerner <alerner@10gen.com> | 2013-10-02 17:33:52 -0400 |
---|---|---|
committer | Alberto Lerner <alerner@10gen.com> | 2013-10-02 17:34:01 -0400 |
commit | c5f3e652908f1a6aa906f111c190fec7f7702a27 (patch) | |
tree | f1c79d8fb58fd094044919b236cf736bd4c12ff0 /src/mongo/db/field_parser-inl.h | |
parent | e0daa0e656c7bf5ad1c7dca806b989795f52814d (diff) | |
download | mongo-c5f3e652908f1a6aa906f111c190fec7f7702a27.tar.gz |
SERVER-10565 Fix Win64 compile (take 2).
Diffstat (limited to 'src/mongo/db/field_parser-inl.h')
-rw-r--r-- | src/mongo/db/field_parser-inl.h | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/src/mongo/db/field_parser-inl.h b/src/mongo/db/field_parser-inl.h index a5a5fc025a0..41ab4e1683d 100644 --- a/src/mongo/db/field_parser-inl.h +++ b/src/mongo/db/field_parser-inl.h @@ -75,6 +75,40 @@ namespace mongo { template<typename T> FieldParser::FieldState FieldParser::extract(BSONObj doc, + const BSONField<T*>& field, + T** out, + string* errMsg) + { + BSONElement elem = doc[field.name()]; + if (elem.eoo()) { + if (field.hasDefault()) { + auto_ptr<T> temp(new T); + field.getDefault()->cloneTo(temp.get()); + + *out = temp.release(); + return FIELD_DEFAULT; + } + else { + return FIELD_NONE; + } + } + + if (elem.type() != Object && elem.type() != Array) { + _genFieldErrMsg(doc, field, "Object/Array", errMsg); + return FIELD_INVALID; + } + + auto_ptr<T> temp(new T); + if (!temp->parseBSON(elem.embeddedObject(), errMsg)) { + return FIELD_INVALID; + } + + *out = temp.release(); + return FIELD_SET; + } + + template<typename T> + FieldParser::FieldState FieldParser::extract(BSONObj doc, const BSONField<T>& field, T** out, string* errMsg) |