muzgen/lib/commons.hpp

41 lines
1000 B
C++

#ifndef muz_COMMONS_HPP
#define muz_COMMONS_HPP
#include <cassert>
#include <mutex>
#include <algorithm>
#include <functional>
#include <iostream>
#include <sstream>
#include <string>
#include <cstring>
#include <optional>
#include <stdexcept>
#include <vector>
#include <memory>
#include <cmath>
#include "conf.hpp"
#define MUZ_ERROR(NAME) \
struct NAME : public std::runtime_error { \
explicit NAME(std::string const& what): std::runtime_error(what) {} \
}
#define MUZ_ENUM_IDENT(X) X
#define MUZ_ENUM_STRING(X) #X
#define MUZ_ENUM(Prefix, Macro) \
enum Prefix {Macro(MUZ_ENUM_IDENT)}; \
constexpr char const* Prefix ## Str [] = {Macro(MUZ_ENUM_STRING)};
template <typename T>
void format_error(int line, std::string const& what)
{
std::stringstream ss;
ss << "line " << line << ": " << what;
throw T { ss.str() };
}
#endif