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());
+  }
 }
 
 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,

------------------------------------------------------------------------------
_______________________________________________
Opensaf-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/opensaf-devel

Reply via email to