OILS / vendor / souffle / swig / SwigInterface.h View on Github | oilshell.org

91 lines, 26 significant
1/*
2 * Souffle - A Datalog Compiler
3 * Copyright (c) 2019, The Souffle Developers. All rights reserved
4 * Licensed under the Universal Permissive License v 1.0 as shown at:
5 * - https://opensource.org/licenses/UPL
6 * - <souffle root>/licenses/SOUFFLE-UPL.txt
7 */
8
9/************************************************************************
10 *
11 * @file SwigInterface.h
12 *
13 * Header file for SWIG to invoke functions in souffle::SouffleProgram
14 *
15 ***********************************************************************/
16
17#pragma once
18
19#include "souffle/SouffleInterface.h"
20#include <iostream>
21#include <string>
22
23/**
24 * Abstract base class for generated Datalog programs
25 */
26class SWIGSouffleProgram {
27 /**
28 * pointer to SouffleProgram to invoke functions from SouffleInterface.h
29 */
30 souffle::SouffleProgram* program;
31
32public:
33 SWIGSouffleProgram(souffle::SouffleProgram* program) : program(program) {}
34
35 virtual ~SWIGSouffleProgram() {
36 delete program;
37 }
38
39 /**
40 * Calls the corresponding method souffle::SouffleProgram::run in SouffleInterface.h
41 */
42 void run() {
43 program->run();
44 }
45
46 /**
47 * Calls the corresponding method souffle::SouffleProgram::runAll in SouffleInterface.h
48 */
49 void runAll(const std::string& inputDirectory, const std::string& outputDirectory) {
50 program->runAll(inputDirectory, outputDirectory);
51 }
52
53 /**
54 * Calls the corresponding method souffle::SouffleProgram::loadAll in SouffleInterface.h
55 */
56 void loadAll(const std::string& inputDirectory) {
57 program->loadAll(inputDirectory);
58 }
59
60 /**
61 * Calls the corresponding method souffle::SouffleProgram::printAll in SouffleInterface.h
62 */
63 void printAll(const std::string& outputDirectory) {
64 program->printAll(outputDirectory);
65 }
66
67 /**
68 * Calls the corresponding method souffle::SouffleProgram::dumpInputs in SouffleInterface.h
69 */
70 void dumpInputs() {
71 program->dumpInputs();
72 }
73
74 /**
75 * Calls the corresponding method souffle::SouffleProgram::dumpOutputs in SouffleInterface.h
76 */
77 void dumpOutputs() {
78 program->dumpOutputs();
79 }
80};
81
82/**
83 * Creates an instance of a SWIG souffle::SouffleProgram that can be called within a program of a supported
84 * language for the SWIG option specified in main.cpp. This enables the program to use this instance and call
85 * the supported souffle::SouffleProgram methods.
86 * @param name Name of the datalog file/ instance to be created
87 */
88SWIGSouffleProgram* newInstance(const std::string& name) {
89 auto* prog = souffle::ProgramFactory::newInstance(name);
90 return new SWIGSouffleProgram(prog);
91}