@@ -287,6 +287,272 @@ class CoreMod : public EvaluableExpr {
287
287
std::unique_ptr<api::FunctionExpr> expr_;
288
288
};
289
289
290
+ // --- Array Expressions ---
291
+
292
+ class CoreArrayReverse : public EvaluableExpr {
293
+ public:
294
+ explicit CoreArrayReverse (const api::FunctionExpr& expr)
295
+ : expr_(std::make_unique<api::FunctionExpr>(expr)) {
296
+ }
297
+ EvaluateResult Evaluate (
298
+ const api::EvaluateContext& context,
299
+ const model::PipelineInputOutput& document) const override ;
300
+
301
+ private:
302
+ std::unique_ptr<api::FunctionExpr> expr_;
303
+ };
304
+
305
+ class CoreArrayContains : public EvaluableExpr {
306
+ public:
307
+ explicit CoreArrayContains (const api::FunctionExpr& expr)
308
+ : expr_(std::make_unique<api::FunctionExpr>(expr)) {
309
+ }
310
+ EvaluateResult Evaluate (
311
+ const api::EvaluateContext& context,
312
+ const model::PipelineInputOutput& document) const override ;
313
+
314
+ private:
315
+ std::unique_ptr<api::FunctionExpr> expr_;
316
+ };
317
+
318
+ class CoreArrayContainsAll : public EvaluableExpr {
319
+ public:
320
+ explicit CoreArrayContainsAll (const api::FunctionExpr& expr)
321
+ : expr_(std::make_unique<api::FunctionExpr>(expr)) {
322
+ }
323
+ EvaluateResult Evaluate (
324
+ const api::EvaluateContext& context,
325
+ const model::PipelineInputOutput& document) const override ;
326
+
327
+ private:
328
+ std::unique_ptr<api::FunctionExpr> expr_;
329
+ };
330
+
331
+ class CoreArrayContainsAny : public EvaluableExpr {
332
+ public:
333
+ explicit CoreArrayContainsAny (const api::FunctionExpr& expr)
334
+ : expr_(std::make_unique<api::FunctionExpr>(expr)) {
335
+ }
336
+ EvaluateResult Evaluate (
337
+ const api::EvaluateContext& context,
338
+ const model::PipelineInputOutput& document) const override ;
339
+
340
+ private:
341
+ std::unique_ptr<api::FunctionExpr> expr_;
342
+ };
343
+
344
+ class CoreArrayLength : public EvaluableExpr {
345
+ public:
346
+ explicit CoreArrayLength (const api::FunctionExpr& expr)
347
+ : expr_(std::make_unique<api::FunctionExpr>(expr)) {
348
+ }
349
+ EvaluateResult Evaluate (
350
+ const api::EvaluateContext& context,
351
+ const model::PipelineInputOutput& document) const override ;
352
+
353
+ private:
354
+ std::unique_ptr<api::FunctionExpr> expr_;
355
+ };
356
+
357
+ // --- Logical Expressions ---
358
+
359
+ class CoreAnd : public EvaluableExpr {
360
+ public:
361
+ explicit CoreAnd (const api::FunctionExpr& expr)
362
+ : expr_(std::make_unique<api::FunctionExpr>(expr)) {
363
+ }
364
+ EvaluateResult Evaluate (
365
+ const api::EvaluateContext& context,
366
+ const model::PipelineInputOutput& document) const override ;
367
+
368
+ private:
369
+ std::unique_ptr<api::FunctionExpr> expr_;
370
+ };
371
+
372
+ class CoreOr : public EvaluableExpr {
373
+ public:
374
+ explicit CoreOr (const api::FunctionExpr& expr)
375
+ : expr_(std::make_unique<api::FunctionExpr>(expr)) {
376
+ }
377
+ EvaluateResult Evaluate (
378
+ const api::EvaluateContext& context,
379
+ const model::PipelineInputOutput& document) const override ;
380
+
381
+ private:
382
+ std::unique_ptr<api::FunctionExpr> expr_;
383
+ };
384
+
385
+ class CoreXor : public EvaluableExpr {
386
+ public:
387
+ explicit CoreXor (const api::FunctionExpr& expr)
388
+ : expr_(std::make_unique<api::FunctionExpr>(expr)) {
389
+ }
390
+ EvaluateResult Evaluate (
391
+ const api::EvaluateContext& context,
392
+ const model::PipelineInputOutput& document) const override ;
393
+
394
+ private:
395
+ std::unique_ptr<api::FunctionExpr> expr_;
396
+ };
397
+
398
+ class CoreCond : public EvaluableExpr {
399
+ public:
400
+ explicit CoreCond (const api::FunctionExpr& expr)
401
+ : expr_(std::make_unique<api::FunctionExpr>(expr)) {
402
+ }
403
+ EvaluateResult Evaluate (
404
+ const api::EvaluateContext& context,
405
+ const model::PipelineInputOutput& document) const override ;
406
+
407
+ private:
408
+ std::unique_ptr<api::FunctionExpr> expr_;
409
+ };
410
+
411
+ class CoreEqAny : public EvaluableExpr {
412
+ public:
413
+ explicit CoreEqAny (const api::FunctionExpr& expr)
414
+ : expr_(std::make_unique<api::FunctionExpr>(expr)) {
415
+ }
416
+ EvaluateResult Evaluate (
417
+ const api::EvaluateContext& context,
418
+ const model::PipelineInputOutput& document) const override ;
419
+
420
+ private:
421
+ std::unique_ptr<api::FunctionExpr> expr_;
422
+ };
423
+
424
+ class CoreNotEqAny : public EvaluableExpr {
425
+ public:
426
+ explicit CoreNotEqAny (const api::FunctionExpr& expr)
427
+ : expr_(std::make_unique<api::FunctionExpr>(expr)) {
428
+ }
429
+ EvaluateResult Evaluate (
430
+ const api::EvaluateContext& context,
431
+ const model::PipelineInputOutput& document) const override ;
432
+
433
+ private:
434
+ std::unique_ptr<api::FunctionExpr> expr_;
435
+ };
436
+
437
+ class CoreIsNan : public EvaluableExpr {
438
+ public:
439
+ explicit CoreIsNan (const api::FunctionExpr& expr)
440
+ : expr_(std::make_unique<api::FunctionExpr>(expr)) {
441
+ }
442
+ EvaluateResult Evaluate (
443
+ const api::EvaluateContext& context,
444
+ const model::PipelineInputOutput& document) const override ;
445
+
446
+ private:
447
+ std::unique_ptr<api::FunctionExpr> expr_;
448
+ };
449
+
450
+ class CoreIsNotNan : public EvaluableExpr {
451
+ public:
452
+ explicit CoreIsNotNan (const api::FunctionExpr& expr)
453
+ : expr_(std::make_unique<api::FunctionExpr>(expr)) {
454
+ }
455
+ EvaluateResult Evaluate (
456
+ const api::EvaluateContext& context,
457
+ const model::PipelineInputOutput& document) const override ;
458
+
459
+ private:
460
+ std::unique_ptr<api::FunctionExpr> expr_;
461
+ };
462
+
463
+ class CoreIsNull : public EvaluableExpr {
464
+ public:
465
+ explicit CoreIsNull (const api::FunctionExpr& expr)
466
+ : expr_(std::make_unique<api::FunctionExpr>(expr)) {
467
+ }
468
+ EvaluateResult Evaluate (
469
+ const api::EvaluateContext& context,
470
+ const model::PipelineInputOutput& document) const override ;
471
+
472
+ private:
473
+ std::unique_ptr<api::FunctionExpr> expr_;
474
+ };
475
+
476
+ class CoreIsNotNull : public EvaluableExpr {
477
+ public:
478
+ explicit CoreIsNotNull (const api::FunctionExpr& expr)
479
+ : expr_(std::make_unique<api::FunctionExpr>(expr)) {
480
+ }
481
+ EvaluateResult Evaluate (
482
+ const api::EvaluateContext& context,
483
+ const model::PipelineInputOutput& document) const override ;
484
+
485
+ private:
486
+ std::unique_ptr<api::FunctionExpr> expr_;
487
+ };
488
+
489
+ class CoreIsError : public EvaluableExpr {
490
+ public:
491
+ explicit CoreIsError (const api::FunctionExpr& expr)
492
+ : expr_(std::make_unique<api::FunctionExpr>(expr)) {
493
+ }
494
+ EvaluateResult Evaluate (
495
+ const api::EvaluateContext& context,
496
+ const model::PipelineInputOutput& document) const override ;
497
+
498
+ private:
499
+ std::unique_ptr<api::FunctionExpr> expr_;
500
+ };
501
+
502
+ class CoreLogicalMaximum : public EvaluableExpr {
503
+ public:
504
+ explicit CoreLogicalMaximum (const api::FunctionExpr& expr)
505
+ : expr_(std::make_unique<api::FunctionExpr>(expr)) {
506
+ }
507
+ EvaluateResult Evaluate (
508
+ const api::EvaluateContext& context,
509
+ const model::PipelineInputOutput& document) const override ;
510
+
511
+ private:
512
+ std::unique_ptr<api::FunctionExpr> expr_;
513
+ };
514
+
515
+ class CoreLogicalMinimum : public EvaluableExpr {
516
+ public:
517
+ explicit CoreLogicalMinimum (const api::FunctionExpr& expr)
518
+ : expr_(std::make_unique<api::FunctionExpr>(expr)) {
519
+ }
520
+ EvaluateResult Evaluate (
521
+ const api::EvaluateContext& context,
522
+ const model::PipelineInputOutput& document) const override ;
523
+
524
+ private:
525
+ std::unique_ptr<api::FunctionExpr> expr_;
526
+ };
527
+
528
+ // --- Debugging Expressions ---
529
+
530
+ class CoreExists : public EvaluableExpr {
531
+ public:
532
+ explicit CoreExists (const api::FunctionExpr& expr)
533
+ : expr_(std::make_unique<api::FunctionExpr>(expr)) {
534
+ }
535
+ EvaluateResult Evaluate (
536
+ const api::EvaluateContext& context,
537
+ const model::PipelineInputOutput& document) const override ;
538
+
539
+ private:
540
+ std::unique_ptr<api::FunctionExpr> expr_;
541
+ };
542
+
543
+ class CoreNot : public EvaluableExpr {
544
+ public:
545
+ explicit CoreNot (const api::FunctionExpr& expr)
546
+ : expr_(std::make_unique<api::FunctionExpr>(expr)) {
547
+ }
548
+ EvaluateResult Evaluate (
549
+ const api::EvaluateContext& context,
550
+ const model::PipelineInputOutput& document) const override ;
551
+
552
+ private:
553
+ std::unique_ptr<api::FunctionExpr> expr_;
554
+ };
555
+
290
556
/* *
291
557
* Converts a high-level expression representation into an evaluable one.
292
558
*/
0 commit comments