mirror of
https://github.com/pocoproject/poco.git
synced 2024-12-13 10:32:57 +01:00
139 lines
3.1 KiB
C++
139 lines
3.1 KiB
C++
//
|
|
// PrintHandler.h
|
|
//
|
|
// $Id$
|
|
//
|
|
// 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"
|
|
|
|
|
|
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 out.
|
|
/// If indent i zero, the output is 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);
|
|
/// Creates the PrintHandler.
|
|
|
|
PrintHandler(std::ostream& out, unsigned indent = 0);
|
|
/// 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 apended.
|
|
|
|
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 apended.
|
|
|
|
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 fromatted 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;
|
|
};
|
|
|
|
|
|
inline void PrintHandler::setIndent(unsigned indent)
|
|
{
|
|
_indent = indent;
|
|
}
|
|
|
|
|
|
inline bool PrintHandler::array() const
|
|
{
|
|
return _array > 0;
|
|
}
|
|
|
|
|
|
|
|
}} // namespace Poco::JSON
|
|
|
|
|
|
#endif // JSON_PrintHandler_INCLUDED
|