Yes. Nice work!! Thanks -Nagu
> -----Original Message----- > From: Hans Nordebäck [mailto:[email protected]] > Sent: 09 September 2015 19:22 > To: Nagendra Kumar; Praveen Malviya; Gary Lee > Cc: [email protected] > Subject: RE: [PATCH 10 of 10] amfd: Make AVD_SUTYPE a class [#1142] > > Good, so it is ack for the whole series, 0-10? /Thanks HansN > > -----Original Message----- > From: Nagendra Kumar [mailto:[email protected]] > Sent: den 9 september 2015 15:44 > To: Hans Nordebäck; Praveen Malviya; Gary Lee > Cc: [email protected] > Subject: RE: [PATCH 10 of 10] amfd: Make AVD_SUTYPE a class [#1142] > > Little confusing, but Ok :) > > Thanks > -Nagu > > -----Original Message----- > > From: Hans Nordebäck [mailto:[email protected]] > > Sent: 09 September 2015 18:45 > > To: Nagendra Kumar; Praveen Malviya; [email protected] > > Cc: [email protected] > > Subject: Re: [PATCH 10 of 10] amfd: Make AVD_SUTYPE a class [#1142] > > > > Hi Nagu, > > please see comment below./Thanks HansN > > > > On 09/09/2015 02:10 PM, Nagendra Kumar wrote: > > > Please find my comment below: > > > > > >> -----Original Message----- > > >> From: Hans Nordebäck [mailto:[email protected]] > > >> Sent: 09 September 2015 17:26 > > >> To: Nagendra Kumar; Praveen Malviya; [email protected] > > >> Cc: [email protected] > > >> Subject: Re: [PATCH 10 of 10] amfd: Make AVD_SUTYPE a class [#1142] > > >> > > >> see comment below/Thanks HansN > > >> > > >> On 09/09/2015 01:53 PM, Nagendra Kumar wrote: > > >>> Thanks for the clarification, few more needed, please check below. > > >>> > > >>>> -----Original Message----- > > >>>> From: Hans Nordebäck [mailto:[email protected]] > > >>>> Sent: 09 September 2015 17:09 > > >>>> To: Nagendra Kumar; Praveen Malviya; [email protected] > > >>>> Cc: [email protected] > > >>>> Subject: Re: [PATCH 10 of 10] amfd: Make AVD_SUTYPE a class > > >>>> [#1142] > > >>>> > > >>>> Hi Nagu, > > >>>> > > >>>> please see my comment inlined with [HansN] /Thanks HansN > > >>>> > > >>>> On 09/09/2015 01:13 PM, Nagendra Kumar wrote: > > >>>>> Please check my comment below > > >>>>> > > >>>>> Thanks > > >>>>> -Nagu > > >>>>>> -----Original Message----- > > >>>>>> From: Hans Nordebäck [mailto:[email protected]] > > >>>>>> Sent: 09 September 2015 15:59 > > >>>>>> To: Nagendra Kumar; Praveen Malviya; [email protected] > > >>>>>> Cc: [email protected] > > >>>>>> Subject: Re: [PATCH 10 of 10] amfd: Make AVD_SUTYPE a class > > >>>>>> [#1142] > > >>>>>> > > >>>>>> Hi Nagu, > > >>>>>> > > >>>>>> please see comment inlined with [HansN] /Thanks HansN > > >>>>>> > > >>>>>> On 09/09/2015 11:58 AM, Nagendra Kumar wrote: > > >>>>>>> Please find comment inlined with [Nagu]. > > >>>>>>> > > >>>>>>> Thanks > > >>>>>>> -Nagu > > >>>>>>>> -----Original Message----- > > >>>>>>>> From: Hans Nordeback [mailto:[email protected]] > > >>>>>>>> Sent: 14 August 2015 20:20 > > >>>>>>>> To: Praveen Malviya; Nagendra Kumar; [email protected] > > >>>>>>>> Cc: [email protected] > > >>>>>>>> Subject: [PATCH 10 of 10] amfd: Make AVD_SUTYPE a class > > >>>>>>>> [#1142] > > >>>>>>>> > > >>>>>>>> osaf/services/saf/amf/amfd/include/su.h | 3 +- > > >>>>>>>> osaf/services/saf/amf/amfd/include/sutcomptype.h | 2 +- > > >>>>>>>> osaf/services/saf/amf/amfd/include/sutype.h | 24 +++- > > >>>>>>>> osaf/services/saf/amf/amfd/sgtype.cc | 2 +- > > >>>>>>>> osaf/services/saf/amf/amfd/su.cc | 6 +- > > >>>>>>>> osaf/services/saf/amf/amfd/sutcomptype.cc | 2 +- > > >>>>>>>> osaf/services/saf/amf/amfd/sutype.cc | 108 > > >>>>>>>> +++++++++- > -- > > ---- > > >> ---- > > >>>> -- > > >>>>>>>> 7 files changed, 70 insertions(+), 77 deletions(-) > > >>>>>>>> > > >>>>>>>> > > >>>>>>>> diff --git a/osaf/services/saf/amf/amfd/include/su.h > > >>>>>>>> b/osaf/services/saf/amf/amfd/include/su.h > > >>>>>>>> --- a/osaf/services/saf/amf/amfd/include/su.h > > >>>>>>>> +++ b/osaf/services/saf/amf/amfd/include/su.h > > >>>>>>>> @@ -35,6 +35,7 @@ > > >>>>>>>> #include "include/db_template.h" > > >>>>>>>> > > >>>>>>>> class AVD_SG; > > >>>>>>>> +class AVD_SUTYPE; > > >>>>>>>> > > >>>>>>>> /** > > >>>>>>>> * AMF director Service Unit representation. > > >>>>>>>> @@ -94,7 +95,7 @@ class AVD_SU { > > >>>>>>>> > > >>>>>>>> AVD_SU *sg_list_su_next; /* the next SU in the > > >>>>>>>> SG */ > > >>>>>>>> AVD_SU *avnd_list_su_next; /* the next SU in the > > >>>>>>>> AvND */ > > >>>>>>>> - struct avd_sutype *su_type; > > >>>>>>>> + AVD_SUTYPE *su_type; > > >>>>>>>> AVD_SU *su_list_su_type_next; > > >>>>>>>> > > >>>>>>>> void set_su_failover(bool value); diff --git > > >>>>>>>> a/osaf/services/saf/amf/amfd/include/sutcomptype.h > > >>>>>>>> b/osaf/services/saf/amf/amfd/include/sutcomptype.h > > >>>>>>>> --- a/osaf/services/saf/amf/amfd/include/sutcomptype.h > > >>>>>>>> +++ b/osaf/services/saf/amf/amfd/include/sutcomptype.h > > >>>>>>>> @@ -36,7 +36,7 @@ typedef struct { > > >>>>>>>> } AVD_SUTCOMP_TYPE; > > >>>>>>>> extern AmfDb<std::string, AVD_SUTCOMP_TYPE> > > >>>>>>>> *sutcomptype_db; > > >>>>>>>> > > >>>>>>>> -SaAisErrorT avd_sutcomptype_config_get(SaNameT > *sutype_name, > > >>>> struct > > >>>>>>>> avd_sutype *sut); > > >>>>>>>> +SaAisErrorT avd_sutcomptype_config_get(SaNameT > > *sutype_name, > > >>>>>>>> AVD_SUTYPE *sut); > > >>>>>>>> void avd_sutcomptype_constructor(void); > > >>>>>>>> > > >>>>>>>> #endif > > >>>>>>>> diff --git a/osaf/services/saf/amf/amfd/include/sutype.h > > >>>>>>>> b/osaf/services/saf/amf/amfd/include/sutype.h > > >>>>>>>> --- a/osaf/services/saf/amf/amfd/include/sutype.h > > >>>>>>>> +++ b/osaf/services/saf/amf/amfd/include/sutype.h > > >>>>>>>> @@ -20,16 +20,24 @@ > > >>>>>>>> > > >>>>>>>> #include <saAis.h> > > >>>>>>>> #include <su.h> > > >>>>>>>> +#include <vector> > > >>>>>>>> > > >>>>>>>> -struct avd_sutype { > > >>>>>>>> - SaNameT name; > > >>>>>>>> - SaUint32T saAmfSutIsExternal; > > >>>>>>>> - SaUint32T saAmfSutDefSUFailover; > > >>>>>>>> - SaNameT *saAmfSutProvidesSvcTypes; /* array of DNs, size in > > >>>>>>>> number_svc_types */ > > >>>>>>>> - unsigned int number_svc_types; /* size of array > > >>>>>>>> saAmfSutProvidesSvcTypes */ > > >>>>>>>> - AVD_SU *list_of_su; > > >>>>>>>> +class AVD_SUTYPE { > > >>>>>>>> + public: > > >>>>>>>> + explicit AVD_SUTYPE(const SaNameT *dn); > > >>>>>>>> + SaNameT name {}; > > >>>>>>>> + SaUint32T saAmfSutIsExternal {}; > > >>>>>>>> + SaUint32T saAmfSutDefSUFailover {}; > > >>>>>>>> + SaNameT *saAmfSutProvidesSvcTypes {}; /* array of DNs, > > >>>>>>>> +size in > > >>>>>>>> number_svc_types */ > > >>>>>>>> + unsigned int number_svc_types {}; /* size of array > > >>>>>>>> saAmfSutProvidesSvcTypes */ > > >>>>>>>> + std::vector<AVD_SU*> list_of_su {}; > > >>>>>>>> + private: > > >>>>>>>> + AVD_SUTYPE(); > > >>>>>>>> + // disallow copy and assign AVD_SUTYPE(const > > >>>>>>>> + AVD_SUTYPE&); void operator=(const AVD_SUTYPE&); > > >>>>>>>> }; > > >>>>>>>> -extern AmfDb<std::string, avd_sutype> *sutype_db; > > >>>>>>>> +extern AmfDb<std::string, AVD_SUTYPE> *sutype_db; > > >>>>>>>> > > >>>>>>>> /** > > >>>>>>>> * Get SaAmfSUType from IMM and create internal objects > > >>>>>>>> diff --git a/osaf/services/saf/amf/amfd/sgtype.cc > > >>>>>>>> b/osaf/services/saf/amf/amfd/sgtype.cc > > >>>>>>>> --- a/osaf/services/saf/amf/amfd/sgtype.cc > > >>>>>>>> +++ b/osaf/services/saf/amf/amfd/sgtype.cc > > >>>>>>>> @@ -84,7 +84,7 @@ static int is_config_valid(const SaNameT > > >>>>>>>> char *parent; > > >>>>>>>> SaUint32T value; > > >>>>>>>> SaBoolT abool; > > >>>>>>>> - struct avd_sutype *sut; > > >>>>>>>> + AVD_SUTYPE *sut; > > >>>>>>>> const SaImmAttrValuesT_2 *attr; > > >>>>>>>> > > >>>>>>>> if ((parent = strchr((char*)dn->value, ',')) == NULL) { > > >>>>>>>> diff --git a/osaf/services/saf/amf/amfd/su.cc > > >>>>>>>> b/osaf/services/saf/amf/amfd/su.cc > > >>>>>>>> --- a/osaf/services/saf/amf/amfd/su.cc > > >>>>>>>> +++ b/osaf/services/saf/amf/amfd/su.cc > > >>>>>>>> @@ -230,7 +230,7 @@ static int is_config_valid(const SaNameT > > >>>>>>>> SaAmfAdminStateT admstate; > > >>>>>>>> char *parent; > > >>>>>>>> SaUint32T saAmfSutIsExternal; > > >>>>>>>> - struct avd_sutype *sut = NULL; > > >>>>>>>> + AVD_SUTYPE *sut = NULL; > > >>>>>>>> CcbUtilOperationData_t *tmp; > > >>>>>>>> AVD_SG *sg; > > >>>>>>>> > > >>>>>>>> @@ -416,7 +416,7 @@ static AVD_SU *su_create(const SaNameT > * > > >>>>>>>> { > > >>>>>>>> int rc = -1; > > >>>>>>>> AVD_SU *su; > > >>>>>>>> - struct avd_sutype *sut; > > >>>>>>>> + AVD_SUTYPE *sut; > > >>>>>>>> SaAisErrorT error; > > >>>>>>>> > > >>>>>>>> TRACE_ENTER2("'%s'", dn->value); @@ -1691,7 +1691,7 @@ > > >>>>>>>> static void su_ccb_apply_modify_hdlr(str > > >>>>>>>> su- > > >>>>>>>>> saAmfSUMaintenanceCampaign.value, su->name.value); > > >>>>>>>> } > > >>>>>>>> } else if (!strcmp(attr_mod->modAttr.attrName, > > >>>>>>>> "saAmfSUType")) { > > >>>>>>>> - struct avd_sutype *sut; > > >>>>>>>> + AVD_SUTYPE *sut; > > >>>>>>>> SaNameT sutype_name = *(SaNameT*) > > >> attr_mod- > > >>>>>>>>> modAttr.attrValues[0]; > > >>>>>>>> TRACE("Modified saAmfSUType from '%s' to > > >> '%s'", su- > > >>>>>>>>> saAmfSUType.value, sutype_name.value); > > >>>>>>>> sut = sutype_db- > > >>>>>>>>> find(Amf::to_string(&sutype_name)); > > >>>>>>>> diff --git a/osaf/services/saf/amf/amfd/sutcomptype.cc > > >>>>>>>> b/osaf/services/saf/amf/amfd/sutcomptype.cc > > >>>>>>>> --- a/osaf/services/saf/amf/amfd/sutcomptype.cc > > >>>>>>>> +++ b/osaf/services/saf/amf/amfd/sutcomptype.cc > > >>>>>>>> @@ -65,7 +65,7 @@ static int is_config_valid(const SaNameT > > >>>>>>>> return 1; > > >>>>>>>> } > > >>>>>>>> > > >>>>>>>> -SaAisErrorT avd_sutcomptype_config_get(SaNameT > *sutype_name, > > >>>> struct > > >>>>>>>> avd_sutype *sut) > > >>>>>>>> +SaAisErrorT avd_sutcomptype_config_get(SaNameT > > *sutype_name, > > >>>>>>>> AVD_SUTYPE *sut) > > >>>>>>>> { > > >>>>>>>> AVD_SUTCOMP_TYPE *sutcomptype; > > >>>>>>>> SaAisErrorT error; > > >>>>>>>> diff --git a/osaf/services/saf/amf/amfd/sutype.cc > > >>>>>>>> b/osaf/services/saf/amf/amfd/sutype.cc > > >>>>>>>> --- a/osaf/services/saf/amf/amfd/sutype.cc > > >>>>>>>> +++ b/osaf/services/saf/amf/amfd/sutype.cc > > >>>>>>>> @@ -27,37 +27,41 @@ > > >>>>>>>> #include <cluster.h> > > >>>>>>>> #include <ntf.h> > > >>>>>>>> #include <proc.h> > > >>>>>>>> +#include <algorithm> > > >>>>>>>> > > >>>>>>>> -AmfDb<std::string, avd_sutype> *sutype_db = NULL; > > >>>>>>>> +AmfDb<std::string, AVD_SUTYPE> *sutype_db = NULL; > > >>>>>>>> > > >>>>>>>> -static struct avd_sutype *sutype_new(const SaNameT *dn) > > >>>>>>>> +// > > >>>>>>>> +AVD_SUTYPE::AVD_SUTYPE(const SaNameT *dn) { > > >>>>>>>> + memcpy(&name.value, dn->value, dn->length); > > >>>>>>>> + name.length = dn->length; > > >>>>>>>> +} > > >>>>>>>> + > > >>>>>>>> +static AVD_SUTYPE *sutype_new(const SaNameT *dn) > > >>>>>>>> { > > >>>>>>>> - struct avd_sutype *sutype = new avd_sutype(); > > >>>>>>>> - > > >>>>>>>> - memcpy(sutype->name.value, dn->value, dn->length); > > >>>>>>>> - sutype->name.length = dn->length; > > >>>>>>>> + AVD_SUTYPE *sutype = new AVD_SUTYPE(dn); > > >>>>>>>> > > >>>>>>>> return sutype; > > >>>>>>>> } > > >>>>>>>> > > >>>>>>>> -static void sutype_delete(struct avd_sutype **sutype) > > >>>>>>>> +static void sutype_delete(AVD_SUTYPE **sutype) > > >>>>>>>> { > > >>>>>>>> - osafassert(NULL == (*sutype)->list_of_su); > > >>>>>>>> + osafassert(true == (*sutype)->list_of_su.empty()); > > >>>>>>>> delete [] (*sutype)->saAmfSutProvidesSvcTypes; > > >>>>>>>> delete *sutype; > > >>>>>>>> *sutype = NULL; > > >>>>>>>> } > > >>>>>>>> > > >>>>>>>> -static void sutype_db_add(struct avd_sutype *sutype) > > >>>>>>>> +static void sutype_db_add(AVD_SUTYPE *sutype) > > >>>>>>>> { > > >>>>>>>> unsigned int rc = > > >>>>>>>> sutype_db->insert(Amf::to_string(&sutype- > > >>>>>>>>> name),sutype); > > >>>>>>>> osafassert(rc == NCSCC_RC_SUCCESS); > > >>>>>>>> } > > >>>>>>>> > > >>>>>>>> -static struct avd_sutype *sutype_create(const SaNameT *dn, > > >>>>>>>> const > > >>>>>>>> SaImmAttrValuesT_2 **attributes) > > >>>>>>>> +static AVD_SUTYPE *sutype_create(const SaNameT *dn, const > > >>>>>>>> SaImmAttrValuesT_2 **attributes) > > >>>>>>>> { > > >>>>>>>> const SaImmAttrValuesT_2 *attr; > > >>>>>>>> - struct avd_sutype *sutype; > > >>>>>>>> + AVD_SUTYPE *sutype; > > >>>>>>>> int rc = 0; > > >>>>>>>> unsigned i = 0; > > >>>>>>>> SaAisErrorT error; > > >>>>>>>> @@ -166,7 +170,7 @@ static int is_config_valid(const SaNameT > > >>>>>>>> > > >>>>>>>> SaAisErrorT avd_sutype_config_get(void) > > >>>>>>>> { > > >>>>>>>> - struct avd_sutype *sut; > > >>>>>>>> + AVD_SUTYPE *sut; > > >>>>>>>> SaAisErrorT error; > > >>>>>>>> SaImmSearchHandleT searchHandle; > > >>>>>>>> SaImmSearchParametersT_2 searchParam; @@ -228,7 +232,7 > > >> @@ > > >>>>>> static > > >>>>>>>> void sutype_ccb_apply_modify_hdlr > > >>>>>>>> int i = 0; > > >>>>>>>> > > >>>>>>>> TRACE_ENTER2("CCB ID %llu, '%s'", opdata->ccbId, > > >>>>>>>> opdata- > > >>>>>>>>> objectName.value); > > >>>>>>>> - avd_sutype *sut = sutype_db->find(Amf::to_string(&opdata- > > >>>>>>>>> objectName)); > > >>>>>>>> + AVD_SUTYPE *sut = sutype_db->find(Amf::to_string(&opdata- > > >>>>>>>>> objectName)); > > >>>>>>>> while ((attr_mod = opdata->param.modify.attrMods[i++]) > > >>>>>>>> != > > >> NULL) { > > >>>>>>>> if (!strcmp(attr_mod->modAttr.attrName, > > >>>>>>>> "saAmfSutDefSUFailover")) { > > >>>>>>>> @@ -239,7 +243,7 @@ static void sutype_ccb_apply_modify_hdlr > > >>>>>>>> /* Modify saAmfSUFailover for SUs which > > >>>>>>>> had > > >>>>>> inherited > > >>>>>>>> saAmfSutDefSUFailover. > > >>>>>>>> Modification will not be done > > >>>>>>>> for the > > >> NPI SU > > >>>>>> */ > > >>>>>>>> if (old_value != > > >>>>>>>> sut->saAmfSutDefSUFailover) { > > >>>>>>>> - for (AVD_SU *su = sut->list_of_su; su; > > >> su = su- > > >>>>>>>>> su_list_su_type_next) { > > >>>>>>>> + for (const auto& su : sut->list_of_su) { > > >>>>>>>> if ((!su- > > >>> saAmfSUFailover_configured) > > >>>>>>>> && (su->saAmfSUPreInstantiable)) { > > >>>>>>>> su- > > >>>>>>>>> set_su_failover(static_cast<bool>(sut->saAmfSutDefSUFailover > > >>>>>>>>> )) > > >>>>>>>>> ; > > >>>>>>>> } > > >>>>>>>> @@ -255,7 +259,7 @@ static void sutype_ccb_apply_modify_hdlr > > >>>>>>>> > > >>>>>>>> static void sutype_ccb_apply_cb(CcbUtilOperationData_t > > *opdata) > > >>>>>>>> { > > >>>>>>>> - struct avd_sutype *sut; > > >>>>>>>> + AVD_SUTYPE *sut; > > >>>>>>>> > > >>>>>>>> TRACE_ENTER2("CCB ID %llu, '%s'", opdata->ccbId, > > >>>>>>>> opdata- > > >>>>>>>>> objectName.value); > > >>>>>>>> @@ -291,7 +295,7 @@ static SaAisErrorT sutype_ccb_completed_ > > >>>>>>>> SaAisErrorT rc = SA_AIS_OK; > > >>>>>>>> const SaImmAttrModificationT_2 *attr_mod; > > >>>>>>>> int i = 0; > > >>>>>>>> - avd_sutype *sut = sutype_db->find(Amf::to_string(&opdata- > > >>>>>>>>> objectName)); > > >>>>>>>> + AVD_SUTYPE *sut = sutype_db->find(Amf::to_string(&opdata- > > >>>>>>>>> objectName)); > > >>>>>>>> TRACE_ENTER2("CCB ID %llu, '%s'", opdata->ccbId, > > >>>>>>>> opdata- > > >>>>>>>>> objectName.value); > > >>>>>>>> while ((attr_mod = opdata->param.modify.attrMods[i++]) > > >>>>>>>> != > > >>>>>>>> NULL) { @@ -311,7 +315,7 @@ static SaAisErrorT > > >> sutype_ccb_completed_ > > >>>>>>>> goto done; > > >>>>>>>> } > > >>>>>>>> > > >>>>>>>> - for (AVD_SU *su = sut->list_of_su; su; su = su- > > >>>>>>>>> su_list_su_type_next) { > > >>>>>>>> + for (const auto& su : sut->list_of_su) { > > >>>>>>>> if > > >>>>>>>> (su->saAmfSUFailover_configured) > > >>>>>>>> continue; > > >>>>>>>> > > >>>>>>>> @@ -341,8 +345,7 @@ done: > > >>>>>>>> static SaAisErrorT > > >>>>>>>> sutype_ccb_completed_cb(CcbUtilOperationData_t > > >>>>>>>> *opdata) > > >>>>>>>> { > > >>>>>>>> SaAisErrorT rc = SA_AIS_ERR_BAD_OPERATION; > > >>>>>>>> - struct avd_sutype *sut; > > >>>>>>>> - AVD_SU *su; > > >>>>>>>> + AVD_SUTYPE *sut; > > >>>>>>>> bool su_exist = false; > > >>>>>>>> CcbUtilOperationData_t *t_opData; > > >>>>>>>> > > >>>>>>>> @@ -358,24 +361,23 @@ static SaAisErrorT > sutype_ccb_completed_ > > >>>>>>>> break; > > >>>>>>>> case CCBUTIL_DELETE: > > >>>>>>>> sut = sutype_db->find(Amf::to_string(&opdata- > > >>> objectName)); > > >>>>>>>> - if (NULL != sut->list_of_su) { > > >>>>>>>> - /* check whether there exists a delete > > >> operation for > > >>>>>>>> - * each of the SU in the su_type list in the > > >> current CCB > > >>>>>>>> - */ > > >>>>>>>> - su = sut->list_of_su; > > >>>>>>>> - while (su != NULL) { > > >>>>>>>> - t_opData = > > >>>>>>>> ccbutil_getCcbOpDataByDN(opdata->ccbId, &su->name); > > >>>>>>>> - if ((t_opData == NULL) || (t_opData- > > >>>>>>>>> operationType != CCBUTIL_DELETE)) { > > >>>>>>>> - su_exist = true; > > >>>>>>>> - break; > > >>>>>>>> - } > > >>>>>>>> - su = su->su_list_su_type_next; > > >>>>>>>> - } > > >>>>>>>> - if (su_exist == true) { > > >>>>>>>> - report_ccb_validation_error(opdata, > > >>>>>>>> "SaAmfSUType '%s'is in use",sut->name.value); > > >>>>>>>> - goto done; > > >>>>>>>> + > > >>>>>>>> + /* check whether there exists a delete operation for > > >>>>>>>> + * each of the SU in the su_type list in the current CCB > > >>>>>>>> + */ > > >>>>>>>> + > > >>>>>>>> + for (const auto& su : sut->list_of_su) { > > >>>>>>>> + t_opData = > > >> ccbutil_getCcbOpDataByDN(opdata- > > >>>>>>>>> ccbId, &su->name); > > >>>>>>>> + if ((t_opData == NULL) || (t_opData- > > >>> operationType > > >>>>>>>> != CCBUTIL_DELETE)) { > > >>>>>>>> + su_exist = true; > > >>>>>>>> + break; > > >>>>>>>> } > > >>>>>>>> } > > >>>>>>>> + > > >>>>>>>> + if (su_exist == true) { > > >>>>>>>> + report_ccb_validation_error(opdata, > > >> "SaAmfSUType > > >>>>>>>> '%s'is in use",sut->name.value); > > >>>>>>>> + goto done; > > >>>>>>>> + } > > >>>>>>>> rc = SA_AIS_OK; > > >>>>>>>> break; > > >>>>>>>> default: > > >>>>>>>> @@ -391,41 +393,23 @@ done: > > >>>>>>>> /* Add SU to list in SU Type */ > > >>>>>>>> void avd_sutype_add_su(AVD_SU* su) > > >>>>>>>> { > > >>>>>>>> - struct avd_sutype *sut = su->su_type; > > >>>>>>>> - su->su_list_su_type_next = sut->list_of_su; > > >>>>>>>> - sut->list_of_su = su; > > >>>>>>>> + AVD_SUTYPE *sut = su->su_type; > > >>>>>>>> + sut->list_of_su.push_back(su); > > >>>>>>>> } > > >>>>>>>> > > >>>>>>>> -void avd_sutype_remove_su(AVD_SU* su) -{ > > >>>>>>>> - AVD_SU *i_su = NULL; > > >>>>>>>> - AVD_SU *prev_su = NULL; > > >>>>>>>> +void avd_sutype_remove_su(AVD_SU* su) { > > >>>>>>>> + AVD_SUTYPE *su_type = su->su_type; > > >>>>>>>> > > >>>>>>>> - if (su->su_type != NULL) { > > >>>>>>>> - i_su = su->su_type->list_of_su; > > >>>>>>>> - > > >>>>>>>> - while ((i_su != NULL) && (i_su != su)) { > > >>>>>>>> - prev_su = i_su; > > >>>>>>>> - i_su = i_su->su_list_su_type_next; > > >>>>>>>> - } > > >>>>>>>> - > > >>>>>>>> - if (i_su == su) { > > >>>>>>>> - if (prev_su == NULL) { > > >>>>>>>> - su->su_type->list_of_su = su- > > >>>>>>>>> su_list_su_type_next; > > >>>>>>>> - } else { > > >>>>>>>> - prev_su->su_list_su_type_next = su- > > >>>>>>>>> su_list_su_type_next; > > >>>>>>>> - } > > >>>>>>>> - > > >>>>>>>> - su->su_list_su_type_next = NULL; > > >>>>>>>> - su->su_type = NULL; > > >>>>>>>> - } > > >>>>>>>> - } > > >>>>>>>> + if (su_type != nullptr) { > > >>>>>>>> + > > >>>>>>>> + su_type->list_of_su.erase(std::remove(su_type->list_of_su.b > > >>>>>>>> + eg > > >>>>>>>> + in(), > > >>>>>>>> + > > >>>>>>>> + su_type->list_of_su.end(), su), su_type- > > >>>>>>>>> list_of_su.end()); > > >>>>>>> [Nagu]: Looks complex to understand, can it be done as like > > >>>>>>> #9th of patch > > >>>>>> series? > > >>>>>> [HansN] It can be done like #9th patch, the reason std::find is > > >>>>>> used in > > >>>>>> #9 is because > > >>>>>> of the osafassert, that checks if si exists in > > >>>>>> svc_type->list_of_si, this is not needed in #10. > > >>>>>> The use of std::remove, in #10, is to show an alternative and > > >>>>>> (in my > > >>>>>> opinion) easier way > > >>>>>> to express the remove/erase idiom. > > >>>>> [Nagu]: I got confused with erase taking first element as 'an > > >>>>> element after > > >>>> remove' and then it erases from > > >>>>> 'removed item till end of the list i.e. range ?' Am I right ? > > >>>>> can we refactor it > > >>>> ? > > >>>> [HansN] > > >>>> The std::remove doesn't remove anything it returns a new iterator > > >>>> to a new end where objects to be erased has been transformed. > > >>>> Please see e.g. > > >>>> http://www.cplusplus.com/reference/algorithm/remove/?kw=remove > > >>> [Nagu]: Yes, I had read it before and I found it confusing. That > > >>> means the > > >> statement is equivalent to : > > >>> su_type->list_of_su.erase(Iterator, su_type-> list_of_su.end()) > > >>> So, does it erase a range of elements from iterator till end ? > > >> [HansN] yes, the elements to be erased are at the new iterator till end. > > > [Nagu]: The function is supposed to remove one SU from SU list. It > > > looks that it means it removes SUs starting from SU5(say) till > > > SU10(if > > > SU10 is the last)[If we have SU1 to SU10 and we need to remove SU5]. > > [HansN] No, as an example say list_of_su looks as below before > > std::remove, (list_of_su are pointers to su): > > > > SU1 SU3 SU5 SU6 SU7 > > > > if su is say pointer to SU3 in the call below to std::remove: > > std::remove(su_type->list_of_su.begin(), su_type->list_of_su.end(), > > su) > > > > SU1 SU5 SU6 SU7 SU3 > > -------------------------^ > > The iterator returned by std::remove will be at SU3. So the erase will > > remove only SU3. > > > > > > > >>> > > >>>>>>>> + } > > >>>>>>>> } > > >>>>>>>> > > >>>>>>>> void avd_sutype_constructor(void) > > >>>>>>>> { > > >>>>>>>> > > >>>>>>>> - sutype_db = new AmfDb<std::string, avd_sutype>; > > >>>>>>>> + sutype_db = new AmfDb<std::string, AVD_SUTYPE>; > > >>>>>>>> avd_class_impl_set("SaAmfSUBaseType", NULL, NULL, > > >>>>>>>> avd_imm_default_OK_completed_cb, NULL); > > >>>>>>>> avd_class_impl_set("SaAmfSUType", NULL, NULL, > > >> > > > > ------------------------------------------------------------------------------ Monitor Your Dynamic Infrastructure at Any Scale With Datadog! Get real-time metrics from all of your servers, apps and tools in one place. SourceForge users - Click here to start your Free Trial of Datadog now! http://pubads.g.doubleclick.net/gampad/clk?id=241902991&iu=/4140 _______________________________________________ Opensaf-devel mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/opensaf-devel
