static int deal_with_client_rbuf(struct asfd *asfd, const char *directory, struct scores *scores) { if(asfd->rbuf->cmd==CMD_GEN) { if(!strncmp_w(asfd->rbuf->buf, "cname:")) { struct iobuf wbuf; free_w(&asfd->desc); if(!(asfd->desc=strdup_w(asfd->rbuf->buf +strlen("cname:"), __func__))) goto error; logp("%s: fd %d\n", asfd->desc, asfd->fd); iobuf_set(&wbuf, CMD_GEN, (char *)"cname ok", strlen("cname ok")); if(asfd->write(asfd, &wbuf)) goto error; } else if(!strncmp_w(asfd->rbuf->buf, "sigs_end")) { //printf("Was told no more sigs\n"); if(deduplicate(asfd, directory, scores)<0) goto error; } else { iobuf_log_unexpected(asfd->rbuf, __func__); goto error; } } else if(asfd->rbuf->cmd==CMD_SIG) { if(champ_server_deal_with_rbuf_sig(asfd, directory, scores)) goto error; } else if(asfd->rbuf->cmd==CMD_MANIFEST) { // Client has completed a manifest file. Want to start using // it as a dedup candidate now. if(candidate_add_fresh(asfd->rbuf->buf, directory, scores)) goto error; } else { iobuf_log_unexpected(asfd->rbuf, __func__); goto error; } iobuf_free_content(asfd->rbuf); return 0; error: iobuf_free_content(asfd->rbuf); return -1; }
static int deduplicate_maybe(struct asfd *asfd, struct blk *blk, const char *directory, struct scores *scores) { if(!asfd->in && !(asfd->in=incoming_alloc())) return -1; if(blk_fingerprint_is_hook(blk)) { if(incoming_grow_maybe(asfd->in)) return -1; asfd->in->fingerprints[asfd->in->size-1]=blk->fingerprint; } if(++(asfd->blkcnt)<MANIFEST_SIG_MAX) return 0; asfd->blkcnt=0; if(deduplicate(asfd, directory, scores)<0) return -1; return 0; }
Status ModifierAddToSet::init(const BSONElement& modExpr) { // Perform standard field name and updateable checks. _fieldRef.parse(modExpr.fieldName()); Status status = fieldchecker::isUpdatable(_fieldRef); if (! status.isOK()) { return status; } // If a $-positional operator was used, get the index in which it occurred. fieldchecker::isPositional(_fieldRef, &_posDollar); // TODO: The driver could potentially do this re-writing. // If the type of the value is 'Object', we might be dealing with a $each. See if that // is the case. if (modExpr.type() == mongo::Object) { BSONElement modExprObjPayload = modExpr.embeddedObject().firstElement(); if (!modExprObjPayload.eoo() && StringData(modExprObjPayload.fieldName()) == "$each") { // It is a $each. Verify that the payload is an array as is required for $each, // set our flag, and store the array as our value. if (modExprObjPayload.type() != mongo::Array) { return Status(ErrorCodes::BadValue, "Argument to $each operator in $addToSet must be an array"); } status = _valDoc.root().appendElement(modExprObjPayload); if (!status.isOK()) return status; _val = _valDoc.root().leftChild(); deduplicate(_val, mb::woLess(false), mb::woEqual(false)); } } // If this wasn't an 'each', turn it into one. No need to sort or de-dup since we only // have one element. if (_val == _valDoc.end()) { mb::Element each = _valDoc.makeElementArray("$each"); status = each.appendElement(modExpr); if (!status.isOK()) return status; status = _valDoc.root().pushBack(each); if (!status.isOK()) return status; _val = each; } // Check if no invalid data (such as fields with '$'s) are being used in the $each // clause. mb::ConstElement valCursor = _val.leftChild(); while (valCursor.ok()) { const BSONType type = valCursor.getType(); dassert(valCursor.hasValue()); bool okForStorage = true; switch(type) { case mongo::Object: okForStorage = valCursor.getValueObject().okForStorage(); break; case mongo::Array: okForStorage = valCursor.getValueArray().okForStorage(); break; default: break; } if (!okForStorage) { return Status(ErrorCodes::BadValue, "Field name not OK for storage"); } valCursor = valCursor.rightSibling(); } return Status::OK(); }
int main() { f1.open("/Users/robinmalhotra2/Desktop/csl201check.txt",std::ios::in|std::ios::out); f1.getline(s, 80, ' '); while (f1.good()) { std::cout<<"addasd"; if ((strlen(s)==1) && (s[0])<'9' && (s[0])>'0') { switch ((s[0])) { case '1': createandprintlist(); break; case '2': sortlist(); break; case '3': nextinsert(); break; case '4': searchlist(); break; case '5': deletenext(); break; case '6': deduplicate(); break; case '7': mergesortthing(); break; case '8': credits(); break; default: break; } } } f1.close(); }
Status ModifierAddToSet::init(const BSONElement& modExpr, const Options& opts, bool* positional) { // Perform standard field name and updateable checks. _fieldRef.parse(modExpr.fieldName()); Status status = fieldchecker::isUpdatable(_fieldRef); if (!status.isOK()) { return status; } // If a $-positional operator was used, get the index in which it occurred // and ensure only one occurrence. size_t foundCount; bool foundDollar = fieldchecker::isPositional(_fieldRef, &_posDollar, &foundCount); if (positional) *positional = foundDollar; if (foundDollar && foundCount > 1) { return Status(ErrorCodes::BadValue, str::stream() << "Too many positional (i.e. '$') elements found in path '" << _fieldRef.dottedField() << "'"); } // TODO: The driver could potentially do this re-writing. // If the type of the value is 'Object', we might be dealing with a $each. See if that // is the case. if (modExpr.type() == mongo::Object) { BSONElement modExprObjPayload = modExpr.embeddedObject().firstElement(); if (!modExprObjPayload.eoo() && StringData(modExprObjPayload.fieldName()) == "$each") { // It is a $each. Verify that the payload is an array as is required for $each, // set our flag, and store the array as our value. if (modExprObjPayload.type() != mongo::Array) { return Status(ErrorCodes::BadValue, str::stream() << "The argument to $each in $addToSet must " "be an array but it was of type " << typeName(modExprObjPayload.type())); } status = _valDoc.root().appendElement(modExprObjPayload); if (!status.isOK()) return status; _val = _valDoc.root().leftChild(); deduplicate(_val, mb::woLess(false), mb::woEqual(false)); } } // If this wasn't an 'each', turn it into one. No need to sort or de-dup since we only // have one element. if (_val == _valDoc.end()) { mb::Element each = _valDoc.makeElementArray("$each"); status = each.appendElement(modExpr); if (!status.isOK()) return status; status = _valDoc.root().pushBack(each); if (!status.isOK()) return status; _val = each; } // Check if no invalid data (such as fields with '$'s) are being used in the $each // clause. mb::ConstElement valCursor = _val.leftChild(); while (valCursor.ok()) { const BSONType type = valCursor.getType(); dassert(valCursor.hasValue()); switch (type) { case mongo::Object: { Status s = valCursor.getValueObject().storageValidEmbedded(); if (!s.isOK()) return s; break; } case mongo::Array: { Status s = valCursor.getValueArray().storageValidEmbedded(); if (!s.isOK()) return s; break; } default: break; } valCursor = valCursor.rightSibling(); } return Status::OK(); }
void AddToSetNode::setCollator(const CollatorInterface* collator) { invariant(!_collator); _collator = collator; deduplicate(_elements, _collator); }
void ModifierAddToSet::setCollator(const CollatorInterface* collator) { invariant(!_collator); _collator = collator; // Deduplicate _val (must be performed after collator is set to final value.) deduplicate(_val, mb::woLess(_collator, false), mb::woEqual(_collator, false)); }