/* Distributed under the OSI-approved BSD 3-Clause License. See accompanying file Copyright.txt or https://cmake.org/licensing for details. */ #pragma once #include "cmConfigure.h" // IWYU pragma: keep #include #include #include #include "cmProcessOutput.h" /** \class cmProcessTools * \brief Helper classes for process output parsing * */ class cmProcessTools { public: using Encoding = cmProcessOutput::Encoding; /** Abstract interface for process output parsers. */ class OutputParser { public: /** Process the given output data from a tool. Processing may be done incrementally. Returns true if the parser is interested in any more data and false if it is done. */ bool Process(const char* data, int length) { return this->ProcessChunk(data, length); } bool Process(const char* data) { return this->Process(data, static_cast(strlen(data))); } virtual ~OutputParser() = default; protected: /** Implement in a subclass to process a chunk of data. It should return true only if it is interested in more data. */ virtual bool ProcessChunk(const char* data, int length) = 0; }; /** Process output parser that extracts one line at a time. */ class LineParser : public OutputParser { public: /** Construct with line separation character and choose whether to ignore carriage returns. */ LineParser(char sep = '\n', bool ignoreCR = true); /** Configure logging of lines as they are extracted. */ void SetLog(std::ostream* log, const char* prefix); protected: std::ostream* Log = nullptr; const char* Prefix = nullptr; std::string Line; char Separator; char LineEnd = '\0'; bool IgnoreCR; bool ProcessChunk(const char* data, int length) override; /** Implement in a subclass to process one line of input. It should return true only if it is interested in more data. */ virtual bool ProcessLine() = 0; }; /** Trivial line handler for simple logging. */ class OutputLogger : public LineParser { public: OutputLogger(std::ostream& log, const char* prefix = nullptr) { this->SetLog(&log, prefix); } private: bool ProcessLine() override { return true; } }; /** Run a process and send output to given parsers. */ static void RunProcess(struct cmsysProcess_s* cp, OutputParser* out, OutputParser* err = nullptr, Encoding encoding = cmProcessOutput::Auto); }; '>
context:
space:
mode:
authorThomas Winter <Thomas.Winter@alliedtelesis.co.nz>2018-06-08 04:18:40 (GMT)
committerThomas Haller <thaller@redhat.com>2022-03-11 23:05:37 (GMT)
commit2995710d3f13a95701e54fda33ce80eb5f811f8f (patch)
tree84853fecab6f0b1611c61f6082fd0c960216ac98 /doc
parentd9dc6c20a36077757f1fa29047c0722382098cd4 (diff)
downloadlibnl-2995710d3f13a95701e54fda33ce80eb5f811f8f.zip
libnl-2995710d3f13a95701e54fda33ce80eb5f811f8f.tar.gz
libnl-2995710d3f13a95701e54fda33ce80eb5f811f8f.tar.bz2
ipgre: Add fwmark API
This is a new option that was added in Linux v4.12. Signed-off-by: Thomas Winter <Thomas.Winter@alliedtelesis.co.nz>
Diffstat (limited to 'doc')