| 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 |  */
 | 
| 26 | class SWIGSouffleProgram {
 | 
| 27 |     /**
 | 
| 28 |      * pointer to SouffleProgram to invoke functions from SouffleInterface.h
 | 
| 29 |      */
 | 
| 30 |     souffle::SouffleProgram* program;
 | 
| 31 | 
 | 
| 32 | public:
 | 
| 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 |  */
 | 
| 88 | SWIGSouffleProgram* newInstance(const std::string& name) {
 | 
| 89 |     auto* prog = souffle::ProgramFactory::newInstance(name);
 | 
| 90 |     return new SWIGSouffleProgram(prog);
 | 
| 91 | }
 |