diff options
author | Karen Arutyunov <karen@codesynthesis.com> | 2021-09-28 19:24:31 +0300 |
---|---|---|
committer | Karen Arutyunov <karen@codesynthesis.com> | 2021-09-28 20:29:59 +0300 |
commit | df1ef68cd8e8582724ce1192bfc202e0b9aeaf0c (patch) | |
tree | b731ca4c68e60c00c7e7d499dbf4868ee7b71f44 /libbutl/manifest-serializer.mxx | |
parent | 7a4fc37f264cdb67f2f83fa92703c869215bbc86 (diff) |
Get rid of C++ modules related code and rename *.mxx files to *.hxx
Diffstat (limited to 'libbutl/manifest-serializer.mxx')
-rw-r--r-- | libbutl/manifest-serializer.mxx | 153 |
1 files changed, 0 insertions, 153 deletions
diff --git a/libbutl/manifest-serializer.mxx b/libbutl/manifest-serializer.mxx deleted file mode 100644 index b73c255..0000000 --- a/libbutl/manifest-serializer.mxx +++ /dev/null @@ -1,153 +0,0 @@ -// file : libbutl/manifest-serializer.mxx -*- C++ -*- -// license : MIT; see accompanying LICENSE file - -#ifndef __cpp_modules_ts -#pragma once -#endif - -// C includes. - -#ifndef __cpp_lib_modules_ts -#include <string> -#include <vector> -#include <iosfwd> -#include <cstddef> // size_t -#include <stdexcept> // runtime_error -#include <functional> -#endif - -// Other includes. - -#ifdef __cpp_modules_ts -export module butl.manifest_serializer; -#ifdef __cpp_lib_modules_ts -import std.core; -import std.io; -#endif -import butl.manifest_types; -#else -#include <libbutl/manifest-types.mxx> -#endif - -#include <libbutl/export.hxx> - -LIBBUTL_MODEXPORT namespace butl -{ - class LIBBUTL_SYMEXPORT manifest_serialization: public std::runtime_error - { - public: - manifest_serialization (const std::string& name, - const std::string& description); - - std::string name; - std::string description; - }; - - class LIBBUTL_SYMEXPORT manifest_serializer - { - public: - // The filter, if specified, is called by next() prior to serializing the - // pair into the stream. If the filter returns false, then the pair is - // discarded. - // - // Note that currently there is no way for the filter to modify the name - // or value. If we ever need this functionality, then we can add an - // "extended" filter alternative with two "receiving" arguments: - // - // bool (..., optional<string>& n, optional<string>& v); - // - using filter_function = bool (const std::string& name, - const std::string& value); - - // Unless long_lines is true, break lines in values (including multi-line) - // so that their length does not exceed 78 codepoints (including '\n'). - // - manifest_serializer (std::ostream& os, - const std::string& name, - bool long_lines = false, - std::function<filter_function> filter = {}) - : os_ (os), - name_ (name), - long_lines_ (long_lines), - filter_ (std::move (filter)) - { - } - - const std::string& - name () const {return name_;} - - // The first name-value pair should be the special "start-of-manifest" - // with empty name and value being the format version. After that we - // have a sequence of ordinary pairs which are the manifest. At the - // end of the manifest we have the special "end-of-manifest" pair - // with empty name and value. After that we can either have another - // start-of-manifest pair (in which case the whole sequence repeats - // from the beginning) or we get another end-of-manifest pair which - // signals the end of stream. The end-of-manifest pair can be omitted - // if it is followed by the start-of-manifest pair. - // - void - next (const std::string& name, const std::string& value); - - // Write a comment. The supplied text is prefixed with "# " and - // terminated with a newline. - // - void - comment (const std::string&); - - // Merge the manifest value and a comment into the single string, having - // the '<value>; <comment>' form. Escape ';' characters in the value with - // the backslash. - // - static std::string - merge_comment (const std::string& value, const std::string& comment); - - private: - friend class manifest_rewriter; - - void - write_next (const std::string& name, const std::string& value); - - // Validate and write a name and return its length in codepoints. - // - size_t - write_name (const std::string&); - - // Write a value assuming the current line already has the specified - // codepoint offset. If the resulting line length would be too large then - // the multi-line representation will be used. It is assumed that the - // name, followed by the colon, is already written. - // - void - write_value (const std::string&, std::size_t offset); - - // Write the specified number of characters from the specified string - // (assuming there are no newlines) split into multiple lines at or near - // the 78 codepoints boundary. Assume the current line already has the - // specified codepoint offset. - // - void - write_value (const char* s, std::size_t n, std::size_t offset); - - private: - enum {start, body, end} s_ = start; - std::string version_; // Current format version. - - private: - std::ostream& os_; - const std::string name_; - bool long_lines_; - const std::function<filter_function> filter_; - }; - - // Serialize a manifest to a stream adding the leading format version pair - // and the trailing end-of-manifest pair. Unless eos is false, then also - // write the end-of-stream pair. - // - LIBBUTL_SYMEXPORT void - serialize_manifest (manifest_serializer&, - const std::vector<manifest_name_value>&, - bool eos = true); -} - -#include <libbutl/manifest-serializer.ixx> |