souffle  2.0.2-371-g6315b36
Namespaces | Macros | Functions
FunctorOps.cpp File Reference
#include "FunctorOps.h"
#include "souffle/utility/FunctionalUtil.h"
#include "souffle/utility/MiscUtil.h"
#include <cassert>
#include <cctype>
#include <map>
#include <memory>
#include <ostream>
#include <utility>
#include <vector>
Include dependency graph for FunctorOps.cpp:

Go to the source code of this file.

Namespaces

 souffle
 

Macros

#define OP_1(op, t0, tDst)   { functorOpNameSymbol(FOp::op), {TAttr::t0}, TAttr::tDst, FOp::op }
 
#define OP_1_INTEGRAL(op)   OP_1_MONO(op, Signed), OP_1_MONO(U##op, Unsigned)
 
#define OP_1_MONO(op, ty)   OP_1(op, ty, ty)
 
#define OP_2(op, t0, t1, tDst, multi)   { functorOpNameSymbol(FOp::op), {TAttr::t0, TAttr::t1}, TAttr::tDst, FOp::op, false, multi }
 
#define OP_2_INTEGRAL(op)   OP_2_INTEGRAL_EX(op, false)
 
#define OP_2_INTEGRAL_EX(op, multi)   OP_2_MONO(op, Signed, multi), OP_2_MONO(U##op, Unsigned, multi)
 
#define OP_2_MONO(op, ty, multi)   OP_2(op, ty, ty, ty, multi)
 
#define OP_2_NUMERIC(op)   OP_2_MONO(F##op, Float, false), OP_2_INTEGRAL(op)
 
#define OP_2_NUMERIC_MULTI(op)   OP_2_MONO(F##op, Float, true), OP_2_INTEGRAL_EX(op, true)
 
#define OP_3(op, t0, t1, t2, tDst, multi)   { functorOpNameSymbol(FOp::op), {TAttr::t0, TAttr::t1, TAttr::t2}, TAttr::tDst, FOp::op, false, multi }
 
#define OP_3_INTEGRAL_EX(op, multi)   OP_3_MONO(op, Signed, multi), OP_3_MONO(U##op, Unsigned, multi)
 
#define OP_3_MONO(op, ty, multi)   OP_3(op, ty, ty, ty, ty, multi)
 
#define OP_3_NUMERIC_MULTI(op)   OP_3_MONO(F##op, Float, true), OP_3_INTEGRAL_EX(op, true)
 
#define VARIADIC(op, ty)   { functorOpNameLegacy(FOp::op), {TAttr::ty}, TAttr::ty, FOp::op, true }
 
#define VARIADIC_ORDERED(op)   VARIADIC(op, Signed), VARIADIC(U##op, Unsigned), VARIADIC(F##op, Float), VARIADIC(S##op, Symbol)
 

Functions

IntrinsicFunctors souffle::functorBuiltIn (FunctorOp op)
 
IntrinsicFunctors souffle::functorBuiltIn (std::string_view symbol)
 
IntrinsicFunctors souffle::functorBuiltIn (std::string_view symbol, const std::vector< TypeAttribute > &params)
 
FunctorOp souffle::getMaxOp (const std::string &type)
 
FunctorOp souffle::getMinOp (const std::string &type)
 Given a type of an an attribute it returns the appropriate min/max functor operation. More...
 
bool souffle::isFunctorMultiResult (FunctorOp op)
 
bool souffle::isInfixFunctorOp (const FunctorOp op)
 
bool souffle::isInfixFunctorOp (std::string_view symbol)
 Determines whether a functor should be written using infix notation (e.g. More...
 
bool souffle::isValidFunctorOpArity (std::string_view symbol, size_t arity)
 
std::ostream & souffle::operator<< (std::ostream &os, FunctorOp op)
 

Macro Definition Documentation

◆ OP_1

#define OP_1 (   op,
  t0,
  tDst 
)    { functorOpNameSymbol(FOp::op), {TAttr::t0}, TAttr::tDst, FOp::op }

Definition at line 135 of file FunctorOps.cpp.

◆ OP_1_INTEGRAL

#define OP_1_INTEGRAL (   op)    OP_1_MONO(op, Signed), OP_1_MONO(U##op, Unsigned)

Definition at line 145 of file FunctorOps.cpp.

◆ OP_1_MONO

#define OP_1_MONO (   op,
  ty 
)    OP_1(op, ty, ty)

Definition at line 142 of file FunctorOps.cpp.

◆ OP_2

#define OP_2 (   op,
  t0,
  t1,
  tDst,
  multi 
)    { functorOpNameSymbol(FOp::op), {TAttr::t0, TAttr::t1}, TAttr::tDst, FOp::op, false, multi }

Definition at line 137 of file FunctorOps.cpp.

◆ OP_2_INTEGRAL

#define OP_2_INTEGRAL (   op)    OP_2_INTEGRAL_EX(op, false)

Definition at line 148 of file FunctorOps.cpp.

◆ OP_2_INTEGRAL_EX

#define OP_2_INTEGRAL_EX (   op,
  multi 
)    OP_2_MONO(op, Signed, multi), OP_2_MONO(U##op, Unsigned, multi)

Definition at line 146 of file FunctorOps.cpp.

◆ OP_2_MONO

#define OP_2_MONO (   op,
  ty,
  multi 
)    OP_2(op, ty, ty, ty, multi)

Definition at line 143 of file FunctorOps.cpp.

◆ OP_2_NUMERIC

#define OP_2_NUMERIC (   op)    OP_2_MONO(F##op, Float, false), OP_2_INTEGRAL(op)

Definition at line 149 of file FunctorOps.cpp.

◆ OP_2_NUMERIC_MULTI

#define OP_2_NUMERIC_MULTI (   op)    OP_2_MONO(F##op, Float, true), OP_2_INTEGRAL_EX(op, true)

Definition at line 150 of file FunctorOps.cpp.

◆ OP_3

#define OP_3 (   op,
  t0,
  t1,
  t2,
  tDst,
  multi 
)    { functorOpNameSymbol(FOp::op), {TAttr::t0, TAttr::t1, TAttr::t2}, TAttr::tDst, FOp::op, false, multi }

Definition at line 139 of file FunctorOps.cpp.

◆ OP_3_INTEGRAL_EX

#define OP_3_INTEGRAL_EX (   op,
  multi 
)    OP_3_MONO(op, Signed, multi), OP_3_MONO(U##op, Unsigned, multi)

Definition at line 147 of file FunctorOps.cpp.

◆ OP_3_MONO

#define OP_3_MONO (   op,
  ty,
  multi 
)    OP_3(op, ty, ty, ty, ty, multi)

Definition at line 144 of file FunctorOps.cpp.

◆ OP_3_NUMERIC_MULTI

#define OP_3_NUMERIC_MULTI (   op)    OP_3_MONO(F##op, Float, true), OP_3_INTEGRAL_EX(op, true)

Definition at line 151 of file FunctorOps.cpp.

◆ VARIADIC

#define VARIADIC (   op,
  ty 
)    { functorOpNameLegacy(FOp::op), {TAttr::ty}, TAttr::ty, FOp::op, true }

Definition at line 152 of file FunctorOps.cpp.

◆ VARIADIC_ORDERED

#define VARIADIC_ORDERED (   op)    VARIADIC(op, Signed), VARIADIC(U##op, Unsigned), VARIADIC(F##op, Float), VARIADIC(S##op, Symbol)

Definition at line 154 of file FunctorOps.cpp.