diff --git a/apps/diameter_client/DiameterClient.cpp b/apps/diameter_client/DiameterClient.cpp index bf8a015f..42d7f78a 100644 --- a/apps/diameter_client/DiameterClient.cpp +++ b/apps/diameter_client/DiameterClient.cpp @@ -114,7 +114,7 @@ void DiameterClient::sendRequest(const AmArg& args, string app_name = args.get(0).asCStr(); int command_code = args.get(1).asInt(); int app_id = args.get(2).asInt(); - AmArg& val = args.get(3); + const AmArg& val = args.get(3); string sess_link = args.get(4).asCStr(); vector scs; @@ -159,9 +159,9 @@ void DiameterClient::invoke(const string& method, const AmArg& args, } else if(method == "sendRequest"){ args.assertArrayFmt("siias"); // check values - AmArg& vals = args.get(3); + const AmArg& vals = args.get(3); for (size_t i=0;i(v.value)); - break; case Struct: value = new ValueStruct(*std::get(v.value)); break; @@ -109,7 +106,7 @@ void AmArg::assertArray() { return; if (Undef == type) { type = Array; - value = new ValueArray(); + value = ValueArray(); return; } throw TypeMismatchException(); @@ -124,12 +121,12 @@ void AmArg::assertArray(size_t s) { if (Undef == type) { type = Array; - value = new ValueArray(); + value = ValueArray(); } else if (Array != type) { throw TypeMismatchException(); } - if (std::get(value)->size() < s) - std::get(value)->resize(s); + if (std::get(value).size() < s) + std::get(value).resize(s); } void AmArg::assertStruct() { @@ -149,15 +146,14 @@ void AmArg::assertStruct() const { } void AmArg::invalidate() { - if(type == Array) { delete std::get(value); } - else if(type == Struct) { delete std::get(value); } + if(type == Struct) { delete std::get(value); } type = Undef; value = std::monostate(); } void AmArg::push(const AmArg& a) { assertArray(); - std::get(value)->push_back(a); + std::get(value).push_back(a); } void AmArg::push(const string &key, const AmArg &val) { @@ -173,8 +169,8 @@ void AmArg::pop(AmArg &a) { a = AmArg(); return; } - a = std::get(value)->front(); - std::get(value)->erase(std::get(value)->begin()); + a = std::get(value).front(); + std::get(value).erase(std::get(value).begin()); } void AmArg::pop_back(AmArg &a) { @@ -185,30 +181,30 @@ void AmArg::pop_back(AmArg &a) { a = AmArg(); return; } - a = std::get(value)->back(); - std::get(value)->erase(std::get(value)->end()); + a = std::get(value).back(); + std::get(value).erase(std::get(value).end()); } void AmArg::pop_back() { assertArray(); if (!size()) return; - std::get(value)->erase(std::get(value)->end()); + std::get(value).erase(std::get(value).end()); } void AmArg::concat(const AmArg& a) { assertArray(); if (a.getType() == Array) { for (size_t i=0;i(value)->push_back(a[i]); + std::get(value).push_back(a[i]); } else { - std::get(value)->push_back(a); + std::get(value).push_back(a); } } size_t AmArg::size() const { if (Array == type) - return std::get(value)->size(); + return std::get(value).size(); if (Struct == type) return std::get(value)->size(); @@ -218,43 +214,40 @@ size_t AmArg::size() const { AmArg& AmArg::back() { assertArray(); - if (!std::get(value)->size()) + if (!std::get(value).size()) throw OutOfBoundsException(); - return (*std::get(value))[std::get(value)->size()-1]; + return std::get(value)[std::get(value).size()-1]; } -AmArg& AmArg::back() const { +const AmArg& AmArg::back() const { assertArray(); - if (!std::get(value)->size()) + if (!std::get(value).size()) throw OutOfBoundsException(); - return (*std::get(value))[std::get(value)->size()-1]; + return std::get(value)[std::get(value).size()-1]; } AmArg& AmArg::get(size_t idx) { assertArray(); - if (idx >= std::get(value)->size()) + if (idx >= std::get(value).size()) throw OutOfBoundsException(); - return (*std::get(value))[idx]; + return std::get(value)[idx]; } -AmArg& AmArg::get(size_t idx) const { +const AmArg& AmArg::get(size_t idx) const { assertArray(); - if (idx >= std::get(value)->size()) + if (idx >= std::get(value).size()) throw OutOfBoundsException(); - return (*std::get(value))[idx]; + return std::get(value)[idx]; } AmArg& AmArg::operator=(const AmArg& v) { invalidate(); type = v.type; switch (type) { - case Array: - value = new ValueArray(*std::get(v.value)); - break; case Struct: value = new ValueStruct(*std::get(v.value)); break; @@ -267,15 +260,15 @@ AmArg& AmArg::operator=(const AmArg& v) { AmArg& AmArg::operator[](size_t idx) { assertArray(idx+1); - return (*std::get(value))[idx]; + return std::get(value)[idx]; } -AmArg& AmArg::operator[](size_t idx) const { +const AmArg& AmArg::operator[](size_t idx) const { assertArray(); - if (idx >= std::get(value)->size()) + if (idx >= std::get(value).size()) throw OutOfBoundsException(); - return (*std::get(value))[idx]; + return std::get(value)[idx]; } AmArg& AmArg::operator[](int idx) { @@ -283,18 +276,18 @@ AmArg& AmArg::operator[](int idx) { throw OutOfBoundsException(); assertArray(idx+1); - return (*std::get(value))[idx]; + return std::get(value)[idx]; } -AmArg& AmArg::operator[](int idx) const { +const AmArg& AmArg::operator[](int idx) const { if (idx<0) throw OutOfBoundsException(); assertArray(); - if ((size_t)idx >= std::get(value)->size()) + if ((size_t)idx >= std::get(value).size()) throw OutOfBoundsException(); - return (*std::get(value))[idx]; + return std::get(value)[idx]; } AmArg& AmArg::operator[](std::string key) { @@ -302,7 +295,7 @@ AmArg& AmArg::operator[](std::string key) { return (*std::get(value))[key]; } -AmArg& AmArg::operator[](std::string key) const { +const AmArg& AmArg::operator[](std::string key) const { assertStruct(); return (*std::get(value))[key]; } @@ -312,7 +305,7 @@ AmArg& AmArg::operator[](const char* key) { return (*std::get(value))[key]; } -AmArg& AmArg::operator[](const char* key) const { +const AmArg& AmArg::operator[](const char* key) const { assertStruct(); return (*std::get(value))[key]; } diff --git a/core/AmArg.h b/core/AmArg.h index ca94d940..80bec021 100644 --- a/core/AmArg.h +++ b/core/AmArg.h @@ -118,7 +118,7 @@ class AmArg // value std::variant value; + AmDynInvoke*, ArgBlob, ValueArray, ValueStruct*> value; void invalidate(); @@ -289,28 +289,28 @@ class AmArg AmArg& get(size_t idx); /** throws OutOfBoundsException if array too small */ - AmArg& get(size_t idx) const; + const AmArg& get(size_t idx) const; /** throws OutOfBoundsException if array too small */ AmArg& back(); /** throws OutOfBoundsException if array too small */ - AmArg& back() const; + const AmArg& back() const; /** resizes array if too small */ AmArg& operator[](size_t idx); /** throws OutOfBoundsException if array too small */ - AmArg& operator[](size_t idx) const; + const AmArg& operator[](size_t idx) const; /** resizes array if too small */ AmArg& operator[](int idx); /** throws OutOfBoundsException if array too small */ - AmArg& operator[](int idx) const; + const AmArg& operator[](int idx) const; AmArg& operator[](std::string key); - AmArg& operator[](std::string key) const; + const AmArg& operator[](std::string key) const; AmArg& operator[](const char* key); - AmArg& operator[](const char* key) const; + const AmArg& operator[](const char* key) const; bool operator==(const char *) const;