ppc-lang/include/utils/message.hh

44 lines
1.1 KiB
C++

#pragma once
#include <string>
#include <vector>
#include <fstream>
#include "utils/location.hh"
namespace ppc::messages {
struct message_t {
enum level_t {
DEBUG,
SUGGESTION,
INFO,
WARNING,
ERROR,
} level;
std::string content;
location_t location;
message_t(level_t level, std::string content, location_t loc = location_t::NONE) :
level(level),
content(content),
location(loc) { }
message_t() : message_t(DEBUG, "") { }
std::string to_string() const;
bool is_severe() const;
};
struct msg_stack_t {
private:
std::vector<message_t> messages;
public:
inline auto begin() { return messages.begin(); }
inline auto end() { return messages.end(); }
void push(const message_t &msg) { messages.push_back(msg); }
void clear() { messages.clear(); }
bool is_failed() const;
void print(std::ostream &output, messages::message_t::level_t threshold = messages::message_t::DEBUG, bool color_output = false) const;
};
}