summaryrefslogtreecommitdiff
path: root/src/mongo/db/field_parser-inl.h
diff options
context:
space:
mode:
authorAlberto Lerner <alerner@10gen.com>2013-10-02 17:33:52 -0400
committerAlberto Lerner <alerner@10gen.com>2013-10-02 17:34:01 -0400
commitc5f3e652908f1a6aa906f111c190fec7f7702a27 (patch)
treef1c79d8fb58fd094044919b236cf736bd4c12ff0 /src/mongo/db/field_parser-inl.h
parente0daa0e656c7bf5ad1c7dca806b989795f52814d (diff)
downloadmongo-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.h34
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)