User Guide
blame.hpp
Go to the documentation of this file.
1 #pragma once
2 
3 #include <memory>
4 #include <string>
5 
6 namespace nmodl {
7 namespace utils {
8 
9 class Blame {
10  public:
11  Blame(size_t blame_line)
13 
14  virtual ~Blame() = default;
15 
16  template <class OStream>
17  void operator()(OStream& os, size_t current_line) const {
18  if (blame_line == current_line) {
19  os << this->format();
20  }
21  }
22 
23  protected:
24  virtual std::string format() const = 0;
25 
26  private:
27  size_t blame_line = 0;
28 };
29 
30 enum class BlameLevel { Short, Detailed };
31 
32 std::unique_ptr<Blame> make_blame(size_t blame_line, BlameLevel = BlameLevel::Short);
33 
34 } // namespace utils
35 } // namespace nmodl
nmodl::utils::Blame::Blame
Blame(size_t blame_line)
Definition: blame.hpp:11
nmodl
encapsulates code generation backend implementations
Definition: ast_common.hpp:26
nmodl::utils::Blame::blame_line
size_t blame_line
Definition: blame.hpp:27
nmodl::utils::Blame::~Blame
virtual ~Blame()=default
nmodl::utils::Blame
Definition: blame.hpp:9
nmodl::utils::Blame::operator()
void operator()(OStream &os, size_t current_line) const
Definition: blame.hpp:17
nmodl::utils::make_blame
std::unique_ptr< Blame > make_blame(size_t blame_line, BlameLevel blame_level)
Definition: blame.cpp:128
nmodl::utils::BlameLevel::Short
@ Short
nmodl::utils::Blame::format
virtual std::string format() const =0
nmodl::utils::BlameLevel::Detailed
@ Detailed
nmodl::utils::BlameLevel
BlameLevel
Definition: blame.hpp:30