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