summaryrefslogtreecommitdiff
path: root/src/mongo/db/ops/modifier_bit.cpp
diff options
context:
space:
mode:
authorAndrew Morrow <acm@10gen.com>2013-08-19 10:23:30 -0400
committerAndrew Morrow <acm@10gen.com>2013-08-20 11:48:46 -0400
commitfce3b4ce8fe848c332657f3accf596e6b087bce9 (patch)
tree8d68d5d120efde72b66984687306e1aba5fffb3f /src/mongo/db/ops/modifier_bit.cpp
parenta8eab606724de2d23a6cafd069f4001a031ed909 (diff)
downloadmongo-fce3b4ce8fe848c332657f3accf596e6b087bce9.tar.gz
SERVER-4362 Implement xor support for $bit
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);
}