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:hans.nordeb...@ericsson.com]
>> Sent: 09 September 2015 17:26
>> To: Nagendra Kumar; Praveen Malviya; gary....@dektech.com.au
>> Cc: opensaf-devel@lists.sourceforge.net
>> 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:hans.nordeb...@ericsson.com]
>>>> Sent: 09 September 2015 17:09
>>>> To: Nagendra Kumar; Praveen Malviya; gary....@dektech.com.au
>>>> Cc: opensaf-devel@lists.sourceforge.net
>>>> 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:hans.nordeb...@ericsson.com]
>>>>>> Sent: 09 September 2015 15:59
>>>>>> To: Nagendra Kumar; Praveen Malviya; gary....@dektech.com.au
>>>>>> Cc: opensaf-devel@lists.sourceforge.net
>>>>>> 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:hans.nordeb...@ericsson.com]
>>>>>>>> Sent: 14 August 2015 20:20
>>>>>>>> To: Praveen Malviya; Nagendra Kumar; gary....@dektech.com.au
>>>>>>>> Cc: opensaf-devel@lists.sourceforge.net
>>>>>>>> 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.begin(),
>>>>>>>> +
>>>>>>>> + 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
Opensaf-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/opensaf-devel

Reply via email to