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

added operator[](int) to catch the literal zero address situation

parent 89114838
No related branches found
No related tags found
No related merge requests found
...@@ -239,7 +239,13 @@ IPAACA_HEADER_EXPORT class PayloadEntryProxy//{{{ ...@@ -239,7 +239,13 @@ IPAACA_HEADER_EXPORT class PayloadEntryProxy//{{{
IPAACA_HEADER_EXPORT PayloadEntryProxy(PayloadEntryProxy* parent, size_t addressed_index); IPAACA_HEADER_EXPORT PayloadEntryProxy(PayloadEntryProxy* parent, size_t addressed_index);
public: public:
IPAACA_HEADER_EXPORT PayloadEntryProxy operator[](size_t index); // array-style navigation IPAACA_HEADER_EXPORT PayloadEntryProxy operator[](size_t index); // array-style navigation
IPAACA_HEADER_EXPORT PayloadEntryProxy operator[](const std::string& key); IPAACA_HEADER_EXPORT PayloadEntryProxy operator[](int index); // int is UNFORTUNATELY required to catch
// [0] (addressing using literal zero)
// because ambiguity with const char*
// arises if only [](size_t) is provided.
// size_t is obviously superior ...
// TODO: remove if better solution known
IPAACA_HEADER_EXPORT PayloadEntryProxy operator[](const std::string& key); // dict-style navigation
IPAACA_HEADER_EXPORT PayloadEntryProxy operator[](const char* key); IPAACA_HEADER_EXPORT PayloadEntryProxy operator[](const char* key);
// //
IPAACA_HEADER_EXPORT template<typename T> PayloadEntryProxy& operator=(T t) IPAACA_HEADER_EXPORT template<typename T> PayloadEntryProxy& operator=(T t)
......
...@@ -136,8 +136,8 @@ int main(int argc, char** argv) { ...@@ -136,8 +136,8 @@ int main(int argc, char** argv) {
//std::map<std::string, double> vs = { {"A", 10}, {"B", 20}, {"C", 30}, {"D", 40} }; //std::map<std::string, double> vs = { {"A", 10}, {"B", 20}, {"C", 30}, {"D", 40} };
//ipaaca::pack_into_json_value(entry->document, entry->document.GetAllocator(), vs); //ipaaca::pack_into_json_value(entry->document, entry->document.GetAllocator(), vs);
std::cout << "Setting a value deep in the object:" << std::endl; std::cout << "Setting a value deep in the object:" << std::endl;
//iu->payload()["a"][(int)0] = "set by pep::op="; iu->payload()["a"][0] = "set by pep::op=";
iu->payload()["a"]["A"] = "set by pep::op="; //iu->payload()["a"]["A"] = "set by pep::op=";
std::cout << "Final payload (printed as strings):" << std::endl; std::cout << "Final payload (printed as strings):" << std::endl;
std::map<std::string, std::string> pl_flat = iu->payload(); std::map<std::string, std::string> pl_flat = iu->payload();
......
...@@ -405,6 +405,14 @@ IPAACA_EXPORT PayloadEntryProxy PayloadEntryProxy::operator[](size_t addr_idx_) ...@@ -405,6 +405,14 @@ IPAACA_EXPORT PayloadEntryProxy PayloadEntryProxy::operator[](size_t addr_idx_)
} }
return PayloadEntryProxy(this, addr_idx_); return PayloadEntryProxy(this, addr_idx_);
} }
IPAACA_EXPORT PayloadEntryProxy PayloadEntryProxy::operator[](int addr_idx_)
{
if (addr_idx_ < 0) {
IPAACA_INFO("Negative index!")
throw PayloadAddressingError();
}
return operator[]((size_t) addr_idx_);
}
/* /*
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