Esempio n. 1
0
static bool
_mongoc_matcher_op_not_match (mongoc_matcher_op_not_t *not,  /* IN */
                              const bson_t            *bson) /* IN */
{
   BSON_ASSERT (not);
   BSON_ASSERT (bson);

   return !_mongoc_matcher_op_match (not->child, bson);
}
bool
mongoc_matcher_match (const mongoc_matcher_t *matcher, /* IN */
                      const bson_t           *bson)    /* IN */
{
   BSON_ASSERT (matcher);
   BSON_ASSERT (matcher->optree);
   BSON_ASSERT (bson);

   return _mongoc_matcher_op_match (matcher->optree, bson);
}
Esempio n. 3
0
static bool
_mongoc_matcher_op_logical_match (mongoc_matcher_op_logical_t *logical, /* IN */
                                  const bson_t                *bson)    /* IN */
{
   BSON_ASSERT (logical);
   BSON_ASSERT (bson);

   switch ((int)logical->base.opcode) {
   case MONGOC_MATCHER_OPCODE_OR:
      return (_mongoc_matcher_op_match (logical->left, bson) ||
              _mongoc_matcher_op_match (logical->right, bson));
   case MONGOC_MATCHER_OPCODE_AND:
      return (_mongoc_matcher_op_match (logical->left, bson) &&
              _mongoc_matcher_op_match (logical->right, bson));
   case MONGOC_MATCHER_OPCODE_NOR:
      return !(_mongoc_matcher_op_match (logical->left, bson) ||
               _mongoc_matcher_op_match (logical->right, bson));
   default:
      BSON_ASSERT (false);
      break;
   }

   return false;
}