diff options
| author | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2013-07-11 21:09:51 +0900 |
|---|---|---|
| committer | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2013-07-11 21:09:51 +0900 |
| commit | 7c06b903f3493db95fcf4bd42cccc59e3b4d0692 (patch) | |
| tree | f10a85795bb086e0b257a0e6c6c5ffb05f28f344 /src/RpcResponse.cc | |
| parent | 7a57ecc5f814dc305e5e4b9bd960d69b43870c0e (diff) | |
Use std::unique_ptr for ValueBase object hierarchy
Diffstat (limited to 'src/RpcResponse.cc')
| -rw-r--r-- | src/RpcResponse.cc | 62 |
1 files changed, 24 insertions, 38 deletions
diff --git a/src/RpcResponse.cc b/src/RpcResponse.cc index a3c16655..9360fb2a 100644 --- a/src/RpcResponse.cc +++ b/src/RpcResponse.cc @@ -49,7 +49,7 @@ namespace rpc { namespace { template<typename OutputStream> -void encodeValue(const std::shared_ptr<ValueBase>& value, OutputStream& o) +void encodeValue(const ValueBase* value, OutputStream& o) { class XmlValueBaseVisitor:public ValueBaseVisitor { private: @@ -104,7 +104,7 @@ void encodeValue(const std::shared_ptr<ValueBase>& value, OutputStream& o) namespace { template<typename OutputStream> std::string encodeAll -(OutputStream& o, int code, const std::shared_ptr<ValueBase>& param) +(OutputStream& o, int code, const ValueBase* param) { o << "<?xml version=\"1.0\"?>" << "<methodResponse>"; if(code == 0) { @@ -123,41 +123,24 @@ std::string encodeAll RpcResponse::RpcResponse (int code, - const std::shared_ptr<ValueBase>& param, - const std::shared_ptr<ValueBase>& id) - : code(code), param(param), id(id) + std::unique_ptr<ValueBase> param, + std::unique_ptr<ValueBase> id) + : code{code}, param{std::move(param)}, id{std::move(id)} {} -RpcResponse::RpcResponse(const RpcResponse& c) - : code(c.code), - param(c.param), - id(c.id) -{} - -RpcResponse::~RpcResponse() {} - -RpcResponse& RpcResponse::operator=(const RpcResponse& c) -{ - if(this != &c) { - code = c.code; - param = c.param; - } - return *this; -} - std::string toXml(const RpcResponse& res, bool gzip) { if(gzip) { #ifdef HAVE_ZLIB GZipEncoder o; o.init(); - return encodeAll(o, res.code, res.param); + return encodeAll(o, res.code, res.param.get()); #else // !HAVE_ZLIB abort(); #endif // !HAVE_ZLIB } else { std::stringstream o; - return encodeAll(o, res.code, res.param); + return encodeAll(o, res.code, res.param.get()); } } @@ -166,22 +149,23 @@ template<typename OutputStream> OutputStream& encodeJsonAll (OutputStream& o, int code, - const std::shared_ptr<ValueBase>& param, - const std::shared_ptr<ValueBase>& id, + const ValueBase* param, + const ValueBase* id, const std::string& callback = A2STR::NIL) { if(!callback.empty()) { o << callback << "("; } - std::shared_ptr<Dict> dict = Dict::g(); - dict->put("jsonrpc", "2.0"); - dict->put("id", id); + o << "{\"id\":"; + json::encode(o, id); + o << ",\"jsonrpc\":\"2.0\","; if(code == 0) { - dict->put("result", param); + o << "\"result\":"; } else { - dict->put("error", param); + o << "\"error\":"; } - json::encode(o, dict); + json::encode(o, param); + o << "}"; if(!callback.empty()) { o << ")"; } @@ -196,13 +180,15 @@ std::string toJson #ifdef HAVE_ZLIB GZipEncoder o; o.init(); - return encodeJsonAll(o, res.code, res.param, res.id, callback).str(); + return encodeJsonAll(o, res.code, res.param.get(), res.id.get(), + callback).str(); #else // !HAVE_ZLIB abort(); #endif // !HAVE_ZLIB } else { std::stringstream o; - return encodeJsonAll(o, res.code, res.param, res.id, callback).str(); + return encodeJsonAll(o, res.code, res.param.get(), res.id.get(), + callback).str(); } } @@ -218,12 +204,12 @@ OutputStream& encodeJsonBatchAll } o << "["; if(!results.empty()) { - encodeJsonAll(o, results[0].code, results[0].param, results[0].id); + encodeJsonAll(o, results[0].code, results[0].param.get(), + results[0].id.get()); } - for(std::vector<RpcResponse>::const_iterator i = results.begin()+1, - eoi = results.end(); i != eoi; ++i) { + for(auto i = std::begin(results)+1, eoi = std::end(results); i != eoi; ++i) { o << ","; - encodeJsonAll(o, (*i).code, (*i).param, (*i).id); + encodeJsonAll(o, (*i).code, (*i).param.get(), (*i).id.get()); } o << "]"; if(!callback.empty()) { |
