Skip to content
Snippets Groups Projects
Commit bef9e36f authored by Ramin Yaghoubzadeh Torky's avatar Ramin Yaghoubzadeh Torky
Browse files

C++: proxy.operator=(proxy)

parent e900f27c
No related branches found
No related tags found
No related merge requests found
...@@ -300,6 +300,7 @@ IPAACA_HEADER_EXPORT class PayloadEntryProxy//{{{ ...@@ -300,6 +300,7 @@ IPAACA_HEADER_EXPORT class PayloadEntryProxy//{{{
_payload->set(_key, new_entry); _payload->set(_key, new_entry);
return *this; return *this;
} }
IPAACA_HEADER_EXPORT PayloadEntryProxy& operator=(const PayloadEntryProxy& otherproxy);
//IPAACA_HEADER_EXPORT PayloadEntryProxy& operator=(const std::string& value); //IPAACA_HEADER_EXPORT PayloadEntryProxy& operator=(const std::string& value);
//IPAACA_HEADER_EXPORT PayloadEntryProxy& operator=(const char* value); //IPAACA_HEADER_EXPORT PayloadEntryProxy& operator=(const char* value);
......
...@@ -39,6 +39,42 @@ ...@@ -39,6 +39,42 @@
using namespace rapidjson; using namespace rapidjson;
using namespace std; using namespace std;
int json_testbed_main(int argc, char** argv)
{
std::string json_source("[\"old\",2,3,4]");
ipaaca::PayloadDocumentEntry::ptr entry = ipaaca::PayloadDocumentEntry::from_json_string_representation(json_source);
std::string newinner("{\"K\":\"V\"}");
ipaaca::PayloadDocumentEntry::ptr entrynew = ipaaca::PayloadDocumentEntry::from_json_string_representation(newinner);
ipaaca::FakeIU::ptr iu = ipaaca::FakeIU::create();
iu->add_fake_payload_item("a", entry);
iu->add_fake_payload_item("b", entrynew);
auto proxy = iu->payload()["a"][3];
std::cout << proxy << std::endl;
std::cout << "IU payload before: " << iu->payload() << std::endl;
std::cout << "Entry before: " << entry << std::endl;
std::cout << "EntryNew before: " << entrynew << std::endl;
/*
proxy.json_value->CopyFrom(entrynew->document, proxy.document_entry->document.GetAllocator());
proxy.document_entry->update_json_source();
*/
proxy = iu->payload()["b"];
std::cout << "Newly written part: " << iu->payload()["a"][3] << std::endl;
iu->payload()["a"][3]["addkey"] = "addvalue";
std::cout << "IU payload after: " << iu->payload() << std::endl;
std::cout << "Entry after: " << entry << std::endl;
std::cout << "EntryNew after: " << entrynew << std::endl;
return 0;
}
int fakeiu_main(int argc, char** argv) int fakeiu_main(int argc, char** argv)
{ {
//if (argc<2) { //if (argc<2) {
...@@ -254,7 +290,8 @@ int main(int argc, char** argv) ...@@ -254,7 +290,8 @@ int main(int argc, char** argv)
ipaaca::CommandLineParser::ptr parser = ipaaca::CommandLineParser::create(); ipaaca::CommandLineParser::ptr parser = ipaaca::CommandLineParser::create();
ipaaca::CommandLineOptions::ptr options = parser->parse(argc, argv); ipaaca::CommandLineOptions::ptr options = parser->parse(argc, argv);
return legacy_iu_main(argc, argv); return json_testbed_main(argc, argv);
//return legacy_iu_main(argc, argv);
//return fakeiu_main(argc, argv); //return fakeiu_main(argc, argv);
//return iu_main(argc, argv); //return iu_main(argc, argv);
} }
...@@ -454,6 +454,19 @@ IPAACA_EXPORT PayloadEntryProxy PayloadEntryProxy::operator[](int addr_idx_) ...@@ -454,6 +454,19 @@ IPAACA_EXPORT PayloadEntryProxy PayloadEntryProxy::operator[](int addr_idx_)
return operator[]((size_t) addr_idx_); return operator[]((size_t) addr_idx_);
} }
IPAACA_EXPORT PayloadEntryProxy& PayloadEntryProxy::operator=(const PayloadEntryProxy& otherproxy)
{
PayloadDocumentEntry::ptr new_entry = document_entry->clone(); // copy-on-write, no lock required
rapidjson::Value& newval = new_entry->get_or_create_nested_value_from_proxy_path(this);
auto valueptr = otherproxy.json_value;
if (valueptr) { // only set if value is valid, keep default null value otherwise
newval.CopyFrom(*valueptr, new_entry->document.GetAllocator());
}
new_entry->update_json_source();
_payload->set(_key, new_entry);
return *this;
}
/* /*
IPAACA_EXPORT PayloadEntryProxy& PayloadEntryProxy::operator=(const std::string& value) IPAACA_EXPORT PayloadEntryProxy& PayloadEntryProxy::operator=(const std::string& value)
{ {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment