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