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
:
46
NMODLPrinter
()
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
52
~NMODLPrinter
() {
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
src
printer
nmodl_printer.hpp