#ifndef __UIHelper__
#define __UIHelper__
#include <ostream>
#include "Forwards.hpp"
#include "Options.hpp"
#include "Lib/Stack.hpp"
namespace Shell {
using namespace Lib;
using namespace Kernel;
bool szsOutputMode();
std::ostream& addCommentSignForSZS(std::ostream&);
void reportSpiderFail();
void reportSpiderStatus(char status);
bool outputAllowed(bool debug=false);
class UIHelper {
private:
struct LoadedPiece {
std::string _id;
UnitList::FIFO _units;
SMTLIBLogic _smtLibLogic = SMTLIBLogic::UNDEFINED;
bool _hasConjecture = false;
};
static Stack<LoadedPiece> _loadedPieces;
static void tryParseTPTP(std::istream& input);
static void tryParseSMTLIB2(std::istream& input);
public:
static void parseSingleLine(const std::string& lineToParse, Options::InputSyntax inputSyntax);
static void parseStream(std::istream& input, Options::InputSyntax inputSyntax, bool verbose, bool preferSMTonAuto);
static void parseStandardInput(Options::InputSyntax inputSyntax);
static void parseFile(const std::string& inputFile, Options::InputSyntax inputSyntax, bool verbose);
static Problem* getInputProblem();
static void listLoadedPieces(std::ostream& out);
static void popLoadedPiece(int numPops);
static void outputResult(std::ostream& out);
static bool haveConjecture() { return _loadedPieces.top()._hasConjecture; }
static void outputAllPremises(std::ostream& out, UnitList* units, std::string prefix="");
static void outputSatisfiableResult(std::ostream& out);
static void outputSaturatedSet(std::ostream& out, UnitIterator uit);
static void outputInterferences(std::ostream& out, const Problem&);
static void outputSymbolDeclarations(std::ostream& out);
static void outputSymbolTypeDeclarationIfNeeded(std::ostream& out, bool function, bool typecon, unsigned symNumber);
static bool portfolioParent;
static bool satisfiableStatusWasAlreadyOutput;
static void unsetExpecting() { s_expecting_sat = s_expecting_unsat = false; }
static void setExpectingSat(){ s_expecting_sat=true; }
static void setExpectingUnsat(){ s_expecting_unsat=true; }
static bool spiderOutputDone;
private:
static bool s_expecting_sat;
static bool s_expecting_unsat;
};
}
#endif