aboutsummaryrefslogtreecommitdiffstats
path: root/contrib/libs/poco/Foundation/include/Poco/HexBinaryEncoder.h
diff options
context:
space:
mode:
authorDevtools Arcadia <arcadia-devtools@yandex-team.ru>2022-02-07 18:08:42 +0300
committerDevtools Arcadia <arcadia-devtools@mous.vla.yp-c.yandex.net>2022-02-07 18:08:42 +0300
commit1110808a9d39d4b808aef724c861a2e1a38d2a69 (patch)
treee26c9fed0de5d9873cce7e00bc214573dc2195b7 /contrib/libs/poco/Foundation/include/Poco/HexBinaryEncoder.h
downloadydb-1110808a9d39d4b808aef724c861a2e1a38d2a69.tar.gz
intermediate changes
ref:cde9a383711a11544ce7e107a78147fb96cc4029
Diffstat (limited to 'contrib/libs/poco/Foundation/include/Poco/HexBinaryEncoder.h')
-rw-r--r--contrib/libs/poco/Foundation/include/Poco/HexBinaryEncoder.h117
1 files changed, 117 insertions, 0 deletions
diff --git a/contrib/libs/poco/Foundation/include/Poco/HexBinaryEncoder.h b/contrib/libs/poco/Foundation/include/Poco/HexBinaryEncoder.h
new file mode 100644
index 0000000000..453c3cd821
--- /dev/null
+++ b/contrib/libs/poco/Foundation/include/Poco/HexBinaryEncoder.h
@@ -0,0 +1,117 @@
+//
+// HexBinaryEncoder.h
+//
+// Library: Foundation
+// Package: Streams
+// Module: HexBinary
+//
+// Definition of the HexBinaryEncoder class.
+//
+// Copyright (c) 2004-2006, Applied Informatics Software Engineering GmbH.
+// and Contributors.
+//
+// SPDX-License-Identifier: BSL-1.0
+//
+
+
+#ifndef Foundation_HexBinaryEncoder_INCLUDED
+#define Foundation_HexBinaryEncoder_INCLUDED
+
+
+#include "Poco/Foundation.h"
+#include "Poco/UnbufferedStreamBuf.h"
+#include <ostream>
+
+
+namespace Poco {
+
+
+class Foundation_API HexBinaryEncoderBuf: public UnbufferedStreamBuf
+ /// This streambuf encodes all data written
+ /// to it in hexBinary encoding and forwards it to a connected
+ /// ostream.
+ /// In hexBinary encoding, each binary octet is encoded as a character tuple,
+ /// consisting of two hexadecimal digits ([0-9a-fA-F]) representing the octet code.
+ /// See also: XML Schema Part 2: Datatypes (http://www.w3.org/TR/xmlschema-2/),
+ /// section 3.2.15.
+ ///
+ /// Note: The characters are directly written
+ /// to the ostream's streambuf, thus bypassing
+ /// the ostream. The ostream's state is therefore
+ /// not updated to match the buffer's state.
+{
+public:
+ HexBinaryEncoderBuf(std::ostream& ostr);
+ ~HexBinaryEncoderBuf();
+
+ int close();
+ /// Closes the stream buffer.
+
+ void setLineLength(int lineLength);
+ /// Specify the line length.
+ ///
+ /// After the given number of characters have been written,
+ /// a newline character will be written.
+ ///
+ /// Specify 0 for an unlimited line length.
+
+ int getLineLength() const;
+ /// Returns the currently set line length.
+
+ void setUppercase(bool flag = true);
+ /// Specify whether hex digits a-f are written in upper or lower case.
+
+private:
+ int writeToDevice(char c);
+
+ int _pos;
+ int _lineLength;
+ int _uppercase;
+ std::streambuf& _buf;
+};
+
+
+class Foundation_API HexBinaryEncoderIOS: public virtual std::ios
+ /// The base class for HexBinaryEncoder.
+ ///
+ /// This class is needed to ensure the correct initialization
+ /// order of the stream buffer and base classes.
+{
+public:
+ HexBinaryEncoderIOS(std::ostream& ostr);
+ ~HexBinaryEncoderIOS();
+ int close();
+ HexBinaryEncoderBuf* rdbuf();
+
+protected:
+ HexBinaryEncoderBuf _buf;
+};
+
+
+class Foundation_API HexBinaryEncoder: public HexBinaryEncoderIOS, public std::ostream
+ /// This ostream encodes all data
+ /// written to it in BinHex encoding and forwards it to
+ /// a connected ostream.
+ /// Always call close() when done
+ /// writing data, to ensure proper
+ /// completion of the encoding operation.
+ /// In hexBinary encoding, each binary octet is encoded as a character tuple,
+ /// consisting of two hexadecimal digits ([0-9a-fA-F]) representing the octet code.
+ /// See also: XML Schema Part 2: Datatypes (http://www.w3.org/TR/xmlschema-2/),
+ /// section 3.2.15.
+ ///
+ /// Note: The characters are directly written
+ /// to the ostream's streambuf, thus bypassing
+ /// the ostream. The ostream's state is therefore
+ /// not updated to match the buffer's state.
+{
+public:
+ HexBinaryEncoder(std::ostream& ostr);
+ ~HexBinaryEncoder();
+};
+
+
+} // namespace Poco
+
+
+#endif // Foundation_HexBinaryEncoder_INCLUDED