28 typedef std::vector<const IR::Expression *> ArgumentsList;
35 ArgumentsList unpackArguments(
const IR::MethodCallExpression *expr,
int dataPos);
50 : baseName(name), program(program), visitor(
nullptr) {}
52 void setVisitor(Visitor *instance) { this->visitor = instance; }
54 virtual unsigned getOutputWidth()
const {
return 0; }
57 virtual void emitVariables(
CodeBuilder *builder,
const IR::Declaration_Instance *decl) = 0;
60 virtual void emitAddData(
CodeBuilder *builder,
int dataPos,
61 const IR::MethodCallExpression *expr);
62 virtual void emitAddData(
CodeBuilder *builder,
const ArgumentsList &arguments) = 0;
65 virtual void emitSubtractData(
CodeBuilder *builder,
int dataPos,
66 const IR::MethodCallExpression *expr);
67 virtual void emitSubtractData(
CodeBuilder *builder,
const ArgumentsList &arguments) = 0;
69 virtual void emitGetInternalState(
CodeBuilder *builder) = 0;
70 virtual void emitSetInternalState(
CodeBuilder *builder,
71 const IR::MethodCallExpression *expr) = 0;
184 if (type == EBPFHashAlgorithmPSA::HashAlgorithm::CRC32)
186 else if (type == EBPFHashAlgorithmPSA::HashAlgorithm::CRC16)
188 else if (type == EBPFHashAlgorithmPSA::HashAlgorithm::ONES_COMPLEMENT16 ||
189 type == EBPFHashAlgorithmPSA::HashAlgorithm::TARGET_DEFAULT)
196 CRC16ChecksumAlgorithm::emitGlobals(builder);
197 CRC32ChecksumAlgorithm::emitGlobals(builder);
198 InternetChecksumAlgorithm::emitGlobals(builder);