User Guide
nmodl_printer.hpp
Go to the documentation of this file.
1 /*
2  * Copyright 2023 Blue Brain Project, EPFL.
3  * See the top-level LICENSE file for details.
4  *
5  * SPDX-License-Identifier: Apache-2.0
6  */
7 
8 #pragma once
9 
10 /**
11  * \file
12  * \brief \copybrief nmodl::printer::NMODLPrinter
13  */
14 
15 #include <fstream>
16 #include <iostream>
17 #include <memory>
18 #include <sstream>
19 
20 namespace nmodl {
21 namespace printer {
22 
23 /**
24  * @addtogroup printer
25  * @{
26  */
27 
28 /**
29  * \class NMODLPrinter
30  * \brief Helper class for printing AST back to NMDOL test
31  *
32  * NmodlPrintVisitor transforms AST back to NMODL. This class provided common
33  * functionality required by visitor to print nmodl ascii file.
34  *
35  * \todo Implement Printer as base class to avoid duplication code between
36  * JSONPrinter and NMODLPrinter.
37  */
38 class NMODLPrinter {
39  private:
40  std::ofstream ofs;
41  std::streambuf* sbuf = nullptr;
42  std::shared_ptr<std::ostream> result;
43  size_t indent_level = 0;
44 
45  public:
47  : result(new std::ostream(std::cout.rdbuf())) {}
48  NMODLPrinter(std::ostream& stream)
49  : result(new std::ostream(stream.rdbuf())) {}
50  NMODLPrinter(const std::string& filename);
51 
53  ofs.close();
54  }
55 
56  /// print whitespaces for indentation
57  void add_indent();
58 
59  /// start of new block scope (i.e. start with "{")
60  /// and increases indentation level
61  void push_level();
62 
63  void add_element(const std::string&);
64  void add_newline();
65 
66  /// end of current block scope (i.e. end with "}")
67  /// and decreases indentation level
68  void pop_level();
69 };
70 
71 /** @} */ // end of printer
72 
73 } // namespace printer
74 } // namespace nmodl
nmodl::printer::NMODLPrinter::result
std::shared_ptr< std::ostream > result
Definition: nmodl_printer.hpp:42
nmodl::printer::NMODLPrinter::sbuf
std::streambuf * sbuf
Definition: nmodl_printer.hpp:41
nmodl
encapsulates code generation backend implementations
Definition: ast_common.hpp:26
nmodl::printer::NMODLPrinter::NMODLPrinter
NMODLPrinter()
Definition: nmodl_printer.hpp:46
nmodl::printer::NMODLPrinter::add_element
void add_element(const std::string &)
Definition: nmodl_printer.cpp:40
nmodl::printer::NMODLPrinter::pop_level
void pop_level()
end of current block scope (i.e.
Definition: nmodl_printer.cpp:48
nmodl::printer::NMODLPrinter::add_newline
void add_newline()
Definition: nmodl_printer.cpp:44
nmodl::printer::NMODLPrinter::add_indent
void add_indent()
print whitespaces for indentation
Definition: nmodl_printer.cpp:36
nmodl::printer::NMODLPrinter::~NMODLPrinter
~NMODLPrinter()
Definition: nmodl_printer.hpp:52
nmodl::printer::NMODLPrinter::indent_level
size_t indent_level
Definition: nmodl_printer.hpp:43
nmodl::printer::NMODLPrinter::ofs
std::ofstream ofs
Definition: nmodl_printer.hpp:40
nmodl::printer::NMODLPrinter
Helper class for printing AST back to NMDOL test.
Definition: nmodl_printer.hpp:38
nmodl::printer::NMODLPrinter::NMODLPrinter
NMODLPrinter(std::ostream &stream)
Definition: nmodl_printer.hpp:48
nmodl::printer::NMODLPrinter::push_level
void push_level()
start of new block scope (i.e.
Definition: nmodl_printer.cpp:30