Merge branch 'gitee-master' into gitlab-upstream

This commit is contained in:
zhengshuxin 2023-07-03 16:35:25 +08:00
commit 6610af52fd
3 changed files with 31 additions and 17 deletions

View File

@ -4,12 +4,10 @@
#include "../stdlib/json.hpp"
#include <string>
namespace acl
{
namespace acl {
template<typename T>
bool deserialize(json& j, T& o, string* err = NULL)
{
bool deserialize(json& j, T& o, string* err = NULL) {
if (!j.finish())
{
if (err)
@ -30,12 +28,10 @@ bool deserialize(json& j, T& o, string* err = NULL)
}
template<typename T>
void serialize(T& o, string& buf)
{
void serialize(T& o, string& buf) {
json j;
json_node& n = gson(j, o);
(void) n.to_string(&buf);
buf += "\r\n";
}
} // namespace acl

View File

@ -14,6 +14,8 @@ struct ACL_ITER;
* 使使 ACL
* json ACL json
*
* json json dbuf ,
* json json .
*/
namespace acl {
@ -24,8 +26,7 @@ class json;
/**
* json json.create_node()
*/
class ACL_CPP_API json_node : public dbuf_obj
{
class ACL_CPP_API json_node : public dbuf_obj {
public:
/**
* json
@ -436,8 +437,7 @@ private:
} node_val_;
};
class ACL_CPP_API json : public pipe_stream, public dbuf_obj
{
class ACL_CPP_API json : public pipe_stream, public dbuf_obj {
public:
/**
* json json
@ -520,8 +520,7 @@ public:
* clear/getElementsByTagName/getElementsByTags
*
*/
const std::vector<json_node*>&
getElementsByTagName(const char* tag) const;
const std::vector<json_node*>& getElementsByTagName(const char* tag) const;
/**
* json json
@ -541,8 +540,7 @@ public:
* clear/getElementsByTagName/getElementsByTags
*
*/
const std::vector<json_node*>&
getElementsByTags(const char* tags) const;
const std::vector<json_node*>& getElementsByTags(const char* tags) const;
/**
* json json
@ -714,6 +712,14 @@ public:
*/
json_node& create_node(const char* tag, json_node& node);
/**
* json json , ,
* 使 json .
* @param node {json_node*} json json
* , json dbuf .
*/
void remove(json_node* node);
/////////////////////////////////////////////////////////////////////
/**
@ -732,6 +738,8 @@ public:
*/
json_node& duplicate_node(const json_node& node);
/////////////////////////////////////////////////////////////////////
/**
*
* @return {json_node&}

View File

@ -533,7 +533,7 @@ const std::vector<json_node*>& json::getElementsByTagName(const char* tag) const
acl_foreach(iter, a) {
ACL_JSON_NODE *tmp = (ACL_JSON_NODE*) iter.data;
json_node* node = dbuf_->create<json_node>
(tmp, const_cast<json*>(this));
(tmp, const_cast<json*>(this));
const_cast<json*>(this)->nodes_query_.push_back(node);
}
@ -554,7 +554,7 @@ const std::vector<json_node*>& json::getElementsByTags(const char* tags) const
acl_foreach(iter, a) {
ACL_JSON_NODE *tmp = (ACL_JSON_NODE*) iter.data;
json_node* node = dbuf_->create<json_node>
(tmp, const_cast<json*>(this));
(tmp, const_cast<json*>(this));
const_cast<json*>(this)->nodes_query_.push_back(node);
}
@ -690,6 +690,16 @@ json_node& json::create_node(const char* tag, json_node& node)
return *n;
}
void json::remove(json_node* node)
{
if (node) {
ACL_JSON_NODE* n = node->get_json_node();
if (n) {
acl_json_node_delete(n);
}
}
}
json_node& json::duplicate_node(const json_node* node)
{
ACL_JSON_NODE* tmp = acl_json_node_duplicate(json_,