#ifndef Diagnostics_h
#define Diagnostics_h
#include <stdint.h>
#if !DYLD_IN_PROCESS
#include <set>
#include <string>
#include <vector>
#include <dispatch/dispatch.h>
#endif
#include "Logging.h"
class VIS_HIDDEN Diagnostics
{
public:
Diagnostics(bool verbose=false);
~Diagnostics();
void error(const char* format, ...) __attribute__((format(printf, 2, 3)));
#if !DYLD_IN_PROCESS
Diagnostics(const std::string& prefix, bool verbose=false);
void warning(const char* format, ...) __attribute__((format(printf, 2, 3)));
void verbose(const char* format, ...) __attribute__((format(printf, 2, 3)));
void copy(const Diagnostics&);
#endif
bool hasError() const;
bool noError() const;
void clearError();
void assertNoError() const;
#if DYLD_IN_PROCESS
const char* errorMessage() const;
#else
const std::string prefix() const;
std::string errorMessage() const;
const std::set<std::string> warnings() const;
void clearWarnings();
#endif
private:
void* _buffer = nullptr;
#if !DYLD_IN_PROCESS
std::string _prefix;
std::set<std::string> _warnings;
bool _verbose = false;
#endif
};
#endif // Diagnostics_h