Branch data Line data Source code
1 : : /****************************************************************************** 2 : : * Top contributors (to current version): 3 : : * Tim King, Andres Noetzli, Morgan Deters 4 : : * 5 : : * This file is part of the cvc5 project. 6 : : * 7 : : * Copyright (c) 2009-2024 by the authors listed in the file AUTHORS 8 : : * in the top-level source directory and their institutional affiliations. 9 : : * All rights reserved. See the file COPYING in the top-level source 10 : : * directory for licensing information. 11 : : * **************************************************************************** 12 : : * 13 : : * Command status utility 14 : : */ 15 : : 16 : : #include "cvc5parser_public.h" 17 : : 18 : : #ifndef CVC5__PARSER__COMMAND_STATUS_H 19 : : #define CVC5__PARSER__COMMAND_STATUS_H 20 : : 21 : : #include <iosfwd> 22 : : #include <sstream> 23 : : #include <string> 24 : : #include <vector> 25 : : 26 : : #include <cvc5/cvc5_export.h> 27 : : 28 : : namespace cvc5 { 29 : : namespace parser { 30 : : 31 : : class Command; 32 : : class CommandStatus; 33 : : class SymbolManager; 34 : : 35 : : std::ostream& operator<<(std::ostream&, const CommandStatus&) CVC5_EXPORT; 36 : : std::ostream& operator<<(std::ostream&, const CommandStatus*) CVC5_EXPORT; 37 : : 38 : : class CVC5_EXPORT CommandStatus 39 : : { 40 : : protected: 41 : : // shouldn't construct a CommandStatus (use a derived class) 42 : 49489 : CommandStatus() {} 43 : : 44 : : public: 45 : 112 : virtual ~CommandStatus() {} 46 : : virtual void toStream(std::ostream& out) const = 0; 47 : : virtual CommandStatus& clone() const = 0; 48 : : }; /* class CommandStatus */ 49 : : 50 : : class CVC5_EXPORT CommandSuccess : public CommandStatus 51 : : { 52 : : static const CommandSuccess* s_instance; 53 : : 54 : : public: 55 : 1118060 : static const CommandSuccess* instance() { return s_instance; } 56 : : void toStream(std::ostream& out) const override; 57 : 0 : CommandStatus& clone() const override 58 : : { 59 : 0 : return const_cast<CommandSuccess&>(*this); 60 : : } 61 : : }; /* class CommandSuccess */ 62 : : 63 : : class CVC5_EXPORT CommandInterrupted : public CommandStatus 64 : : { 65 : : static const CommandInterrupted* s_instance; 66 : : 67 : : public: 68 : : static const CommandInterrupted* instance() { return s_instance; } 69 : : void toStream(std::ostream& out) const override; 70 : 0 : CommandStatus& clone() const override 71 : : { 72 : 0 : return const_cast<CommandInterrupted&>(*this); 73 : : } 74 : : }; /* class CommandInterrupted */ 75 : : 76 : : class CVC5_EXPORT CommandUnsupported : public CommandStatus 77 : : { 78 : : public: 79 : : void toStream(std::ostream& out) const override; 80 : 0 : CommandStatus& clone() const override 81 : : { 82 : 0 : return *new CommandUnsupported(*this); 83 : : } 84 : : }; /* class CommandSuccess */ 85 : : 86 : : class CVC5_EXPORT CommandFailure : public CommandStatus 87 : : { 88 : : public: 89 : 72 : CommandFailure(const std::string& message) : d_message(message) {} 90 : : void toStream(std::ostream& out) const override; 91 : 0 : CommandFailure& clone() const override { return *new CommandFailure(*this); } 92 : : std::string getMessage() const { return d_message; } 93 : : 94 : : private: 95 : : std::string d_message; 96 : : }; /* class CommandFailure */ 97 : : 98 : : /** 99 : : * The execution of the command resulted in a non-fatal error and further 100 : : * commands can be processed. This status is for example used when a user asks 101 : : * for an unsat core in a place that is not immediately preceded by an 102 : : * unsat/valid response. 103 : : */ 104 : : class CVC5_EXPORT CommandRecoverableFailure : public CommandStatus 105 : : { 106 : : std::string d_message; 107 : : 108 : : public: 109 : 37 : CommandRecoverableFailure(std::string message) : d_message(message) {} 110 : : void toStream(std::ostream& out) const override; 111 : 0 : CommandRecoverableFailure& clone() const override 112 : : { 113 : 0 : return *new CommandRecoverableFailure(*this); 114 : : } 115 : : std::string getMessage() const { return d_message; } 116 : : }; /* class CommandRecoverableFailure */ 117 : : 118 : : } // namespace parser 119 : : } // namespace cvc5 120 : : 121 : : #endif /* CVC5__PARSER__COMMAND_H */