diff --git a/ipaacalib/cpp/include/ipaaca/ipaaca-payload.h b/ipaacalib/cpp/include/ipaaca/ipaaca-payload.h index bd128c9569d62a54505e35c7bfa99e439db8fa50..28f802417554a083d10531b1f107a5772e76769a 100644 --- a/ipaacalib/cpp/include/ipaaca/ipaaca-payload.h +++ b/ipaacalib/cpp/include/ipaaca/ipaaca-payload.h @@ -239,7 +239,13 @@ IPAACA_HEADER_EXPORT class PayloadEntryProxy//{{{ IPAACA_HEADER_EXPORT PayloadEntryProxy(PayloadEntryProxy* parent, size_t addressed_index); public: 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 template<typename T> PayloadEntryProxy& operator=(T t) diff --git a/ipaacalib/cpp/src/ipaaca-json.cc b/ipaacalib/cpp/src/ipaaca-json.cc index 83ac873f7de2187baa0aecbb291b369db36d8d0d..fc41425b56d93cb95a83961d7919842c243382ea 100644 --- a/ipaacalib/cpp/src/ipaaca-json.cc +++ b/ipaacalib/cpp/src/ipaaca-json.cc @@ -136,8 +136,8 @@ int main(int argc, char** argv) { //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); std::cout << "Setting a value deep in the object:" << std::endl; - //iu->payload()["a"][(int)0] = "set by pep::op="; - iu->payload()["a"]["A"] = "set by pep::op="; + iu->payload()["a"][0] = "set by pep::op="; + //iu->payload()["a"]["A"] = "set by pep::op="; std::cout << "Final payload (printed as strings):" << std::endl; std::map<std::string, std::string> pl_flat = iu->payload(); diff --git a/ipaacalib/cpp/src/ipaaca-payload.cc b/ipaacalib/cpp/src/ipaaca-payload.cc index 58ea2e31180e652a90917a9b0f1121ef5956dc9d..f7b5e7957b9cd28f4408db72489d73c41d2dc748 100644 --- a/ipaacalib/cpp/src/ipaaca-payload.cc +++ b/ipaacalib/cpp/src/ipaaca-payload.cc @@ -405,6 +405,14 @@ IPAACA_EXPORT PayloadEntryProxy PayloadEntryProxy::operator[](size_t 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)