cpp: add some explanatory comments
This commit is contained in:
parent
1324ae2b4a
commit
f53b9ace1b
28
cpp.hpp
28
cpp.hpp
@ -35,14 +35,22 @@ namespace util::cpp {
|
|||||||
|
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////
|
||||||
|
/// an abstract base that performs processing for a directive
|
||||||
class directive {
|
class directive {
|
||||||
public:
|
public:
|
||||||
virtual ~directive () = default;
|
virtual ~directive () = default;
|
||||||
|
|
||||||
|
/// handles a preprocessor directive by:
|
||||||
|
/// * perform some processing on any number of input lines,
|
||||||
|
/// * optionally writes to the supplied stream,
|
||||||
|
/// * and returns the line that should be consumed next
|
||||||
|
///
|
||||||
|
/// \param lines is a tokenised view over all the lines of the input
|
||||||
|
/// \return the next line that processing should continue from
|
||||||
virtual util::tokeniser<const char*>::iterator
|
virtual util::tokeniser<const char*>::iterator
|
||||||
process (std::ostream&,
|
process (std::ostream&,
|
||||||
context&,
|
context&,
|
||||||
util::view<util::tokeniser<const char*>::iterator>) const = 0;
|
util::view<util::tokeniser<const char*>::iterator> lines) const = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@ -68,14 +76,18 @@ namespace util::cpp {
|
|||||||
|
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////
|
||||||
|
/// thrown when a processor encounters a directive it has not been
|
||||||
|
/// configured to handle
|
||||||
class unknown_directive : public std::runtime_error {
|
class unknown_directive : public std::runtime_error {
|
||||||
using runtime_error::runtime_error;
|
using runtime_error::runtime_error;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////
|
||||||
class ignore final : public directive {
|
/// silently ignores configured directive by advancing the input cursor
|
||||||
virtual util::tokeniser<const char*>::iterator
|
/// past the provided line without writing to the output stream.
|
||||||
|
class ignore : public directive {
|
||||||
|
util::tokeniser<const char*>::iterator
|
||||||
process (std::ostream&,
|
process (std::ostream&,
|
||||||
context&,
|
context&,
|
||||||
util::view<util::tokeniser<const char*>::iterator> lines) const override
|
util::view<util::tokeniser<const char*>::iterator> lines) const override
|
||||||
@ -83,8 +95,10 @@ namespace util::cpp {
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
//-------------------------------------------------------------------------
|
///------------------------------------------------------------------------
|
||||||
class passthrough final : public directive {
|
/// copies the supplied directive to the output stream without any
|
||||||
|
/// modification
|
||||||
|
class passthrough : public directive {
|
||||||
public:
|
public:
|
||||||
passthrough (const std::string &name);
|
passthrough (const std::string &name);
|
||||||
|
|
||||||
@ -98,7 +112,9 @@ namespace util::cpp {
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
//-------------------------------------------------------------------------
|
///------------------------------------------------------------------------
|
||||||
|
/// handles include directives by copying the contents of the referenced
|
||||||
|
/// path into the input stream
|
||||||
class include : public directive {
|
class include : public directive {
|
||||||
public:
|
public:
|
||||||
include (processor &_parent);
|
include (processor &_parent);
|
||||||
|
Loading…
Reference in New Issue
Block a user