123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139 |
- //
- // PrintHandler.h
- //
- // Library: JSON
- // Package: JSON
- // Module: PrintHandler
- //
- // Definition of the PrintHandler class.
- //
- // Copyright (c) 2012, Applied Informatics Software Engineering GmbH.
- // and Contributors.
- //
- // SPDX-License-Identifier: BSL-1.0
- //
- #ifndef JSON_PrintHandler_INCLUDED
- #define JSON_PrintHandler_INCLUDED
- #include "Poco/JSON/JSON.h"
- #include "Poco/JSON/Handler.h"
- #include "Poco/JSONString.h"
- namespace Poco {
- namespace JSON {
- class JSON_API PrintHandler: public Handler
- /// PrintHandler formats and prints the JSON object
- /// to either user-provided std::ostream or standard output.
- /// If indent is zero, the output is a condensed JSON string,
- /// otherwise, the proper indentation is applied to elements.
- {
- public:
- typedef SharedPtr<PrintHandler> Ptr;
- static const unsigned JSON_PRINT_FLAT = 0;
- PrintHandler(unsigned indent = 0, int options = Poco::JSON_WRAP_STRINGS);
- /// Creates the PrintHandler.
- PrintHandler(std::ostream& out, unsigned indent = 0, int options = Poco::JSON_WRAP_STRINGS);
- /// Creates the PrintHandler.
- ~PrintHandler();
- /// Destroys the PrintHandler.
- void reset();
- /// Resets the handler state.
- void startObject();
- /// The parser has read a '{'; a new object is started.
- /// If indent is greater than zero, a newline will be appended.
- void endObject();
- /// The parser has read a '}'; the object is closed.
- void startArray();
- /// The parser has read a [; a new array will be started.
- /// If indent is greater than zero, a newline will be appended.
- void endArray();
- /// The parser has read a ]; the array is closed.
- void key(const std::string& k);
- /// A key of an object is read; it will be written to the output,
- /// followed by a ':'. If indent is greater than zero, the colon
- /// is padded by a space before and after.
- void null();
- /// A null value is read; "null" will be written to the output.
- void value(int v);
- /// An integer value is read.
- void value(unsigned v);
- /// An unsigned value is read. This will only be triggered if the
- /// value cannot fit into a signed int.
-
- #if defined(POCO_HAVE_INT64)
- void value(Int64 v);
- /// A 64-bit integer value is read; it will be written to the output.
- void value(UInt64 v);
- /// An unsigned 64-bit integer value is read; it will be written to the output.
- #endif
- void value(const std::string& value);
- /// A string value is read; it will be formatted and written to the output.
- void value(double d);
- /// A double value is read; it will be written to the output.
- void value(bool b);
- /// A boolean value is read; it will be written to the output.
- void comma();
- /// A comma is read; it will be written to the output as "true" or "false".
- void setIndent(unsigned indent);
- /// Sets indentation.
- private:
- const char* endLine() const;
- unsigned indent();
- bool printFlat() const;
- void arrayValue();
- bool array() const;
- std::ostream& _out;
- unsigned _indent;
- std::string _tab;
- int _array;
- bool _objStart;
- int _options;
- };
- //
- // inlines
- //
- inline void PrintHandler::setIndent(unsigned indent)
- {
- _indent = indent;
- }
- inline bool PrintHandler::array() const
- {
- return _array > 0;
- }
- } } // namespace Poco::JSON
- #endif // JSON_PrintHandler_INCLUDED
|