summaryrefslogtreecommitdiff
path: root/src/mongo/db/ops/modifier_bit.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mongo/db/ops/modifier_bit.cpp')
-rw-r--r--src/mongo/db/ops/modifier_bit.cpp29
1 files changed, 17 insertions, 12 deletions
diff --git a/src/mongo/db/ops/modifier_bit.cpp b/src/mongo/db/ops/modifier_bit.cpp
index 30bbc22befa..bfcc5e23ceb 100644
--- a/src/mongo/db/ops/modifier_bit.cpp
+++ b/src/mongo/db/ops/modifier_bit.cpp
@@ -94,25 +94,30 @@ namespace mongo {
const StringData payloadFieldName = curOp.fieldName();
- const bool isAnd = (payloadFieldName == "and");
- const bool isOr = (payloadFieldName == "or");
-
- if (!(isAnd || isOr))
- return Status(
- ErrorCodes::BadValue,
- "Only 'and' and 'or' are supported $bit sub-operators");
-
if ((curOp.type() != mongo::NumberInt) &&
(curOp.type() != mongo::NumberLong))
return Status(
ErrorCodes::BadValue,
"Argument to $bit operation must be a NumberInt or NumberLong");
- const OpEntry entry = {
- SafeNum(curOp),
- isAnd ? &SafeNum::bitAnd : &SafeNum::bitOr
- };
+ SafeNumOp op = NULL;
+
+ if (payloadFieldName == "and") {
+ op = &SafeNum::bitAnd;
+ }
+ else if (payloadFieldName == "or") {
+ op = &SafeNum::bitOr;
+ }
+ else if (payloadFieldName == "xor") {
+ op = &SafeNum::bitXor;
+ }
+ else {
+ return Status(
+ ErrorCodes::BadValue,
+ "Only 'and', 'or', and 'xor' are supported $bit sub-operators");
+ }
+ const OpEntry entry = {SafeNum(curOp), op};
_ops.push_back(entry);
}