osaf/services/saf/amf/amfd/include/sg.h     |   3 +-
 osaf/services/saf/amf/amfd/include/sgtype.h |  39 ++++++++-----
 osaf/services/saf/amf/amfd/sg.cc            |   1 -
 osaf/services/saf/amf/amfd/sgtype.cc        |  84 +++++++++++-----------------
 4 files changed, 59 insertions(+), 68 deletions(-)


diff --git a/osaf/services/saf/amf/amfd/include/sg.h 
b/osaf/services/saf/amf/amfd/include/sg.h
--- a/osaf/services/saf/amf/amfd/include/sg.h
+++ b/osaf/services/saf/amf/amfd/include/sg.h
@@ -192,8 +192,7 @@ public:
        SaInvocationT adminOp_invocationId;
        SaAmfAdminOperationIdT adminOp;
 
-       AVD_SG *sg_list_sg_type_next;
-       struct avd_amf_sg_type_tag *sg_type;
+       AVD_AMF_SG_TYPE *sg_type;
        AVD_SG *sg_list_app_next;
        AVD_APP *app;
        bool equal_ranked_su; /* This flag is set when ranks of all SU is the 
same.
diff --git a/osaf/services/saf/amf/amfd/include/sgtype.h 
b/osaf/services/saf/amf/amfd/include/sgtype.h
--- a/osaf/services/saf/amf/amfd/include/sgtype.h
+++ b/osaf/services/saf/amf/amfd/include/sgtype.h
@@ -27,28 +27,37 @@
 
 #include <saAmf.h>
 #include <include/db_template.h>
+#include <vector>
 
 class AVD_SG;
 
-typedef struct avd_amf_sg_type_tag {
-       SaNameT name;
-       bool saAmfSgtDefAutoRepair_configured; /* True when user configures 
saAmfSGDefAutoRepair else false */
+class AVD_AMF_SG_TYPE {
+ public:
+  explicit AVD_AMF_SG_TYPE(const SaNameT *dn);
+  SaNameT name {};
+  bool saAmfSgtDefAutoRepair_configured {}; /* True when user configures 
saAmfSGDefAutoRepair else false */
    /******************** B.04 model 
*************************************************/
-       SaNameT *saAmfSGtValidSuTypes;  /* array of DNs, size in number_su_type 
*/
-       SaAmfRedundancyModelT saAmfSgtRedundancyModel;
-       SaBoolT saAmfSgtDefAutoRepair;
-       SaBoolT saAmfSgtDefAutoAdjust;
-       SaTimeT saAmfSgtDefAutoAdjustProb;
-       SaTimeT saAmfSgtDefCompRestartProb;
-       SaUint32T saAmfSgtDefCompRestartMax;
-       SaTimeT saAmfSgtDefSuRestartProb;
-       SaUint32T saAmfSgtDefSuRestartMax;
+  SaNameT *saAmfSGtValidSuTypes {};    /* array of DNs, size in number_su_type 
*/
+  SaAmfRedundancyModelT saAmfSgtRedundancyModel {};
+  SaBoolT saAmfSgtDefAutoRepair {};
+  SaBoolT saAmfSgtDefAutoAdjust {};
+  SaTimeT saAmfSgtDefAutoAdjustProb {};
+  SaTimeT saAmfSgtDefCompRestartProb {};
+  SaUint32T saAmfSgtDefCompRestartMax {};
+  SaTimeT saAmfSgtDefSuRestartProb {};
+  SaUint32T saAmfSgtDefSuRestartMax {};
    /******************** B.04 model 
*************************************************/
 
-       uint32_t number_su_type;        /* size of array saAmfSGtValidSuTypes */
-       AVD_SG *list_of_sg;
+  uint32_t number_su_type {};  /* size of array saAmfSGtValidSuTypes */
+  std::vector<AVD_SG*> list_of_sg {};
+ private:
+  AVD_AMF_SG_TYPE();
+  void initialize();
+  // disallow copy and assign
+  AVD_AMF_SG_TYPE(const AVD_AMF_SG_TYPE&);
+  void operator=(const AVD_AMF_SG_TYPE&);
 
-} AVD_AMF_SG_TYPE;
+};
 
 extern AmfDb<std::string, AVD_AMF_SG_TYPE> *sgtype_db;
 SaAisErrorT avd_sgtype_config_get(void);
diff --git a/osaf/services/saf/amf/amfd/sg.cc b/osaf/services/saf/amf/amfd/sg.cc
--- a/osaf/services/saf/amf/amfd/sg.cc
+++ b/osaf/services/saf/amf/amfd/sg.cc
@@ -119,7 +119,6 @@ AVD_SG::AVD_SG():
                sg_redundancy_model(SA_AMF_NO_REDUNDANCY_MODEL),
                list_of_su(NULL),
                list_of_si(NULL),
-               sg_list_sg_type_next(NULL),
                sg_type(NULL),
                sg_list_app_next(NULL),
                app(NULL),
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
@@ -26,42 +26,27 @@
 #include <ntf.h>
 #include <sgtype.h>
 #include <proc.h>
+#include <algorithm>
 
 AmfDb<std::string, AVD_AMF_SG_TYPE> *sgtype_db = NULL;
 
 void avd_sgtype_add_sg(AVD_SG *sg)
 {
-       sg->sg_list_sg_type_next = sg->sg_type->list_of_sg;
-       sg->sg_type->list_of_sg = sg;
+       sg->sg_type->list_of_sg.push_back(sg);
 }
 
-void avd_sgtype_remove_sg(AVD_SG *sg)
-{
-       AVD_SG *i_sg = NULL;
-       AVD_SG *prev_sg = NULL;
+void avd_sgtype_remove_sg(AVD_SG *sg) {
+  AVD_AMF_SG_TYPE *sg_type = sg->sg_type;
 
-       if (sg->sg_type != NULL) {
-               i_sg = sg->sg_type->list_of_sg;
-
-               while ((i_sg != NULL) && (i_sg != sg)) {
-                       prev_sg = i_sg;
-                       i_sg = i_sg->sg_list_sg_type_next;
-               }
-
-               if (i_sg != sg) {
-                       /* Log a fatal error */
-                       osafassert(0);
-               } else {
-                       if (prev_sg == NULL) {
-                               sg->sg_type->list_of_sg = 
sg->sg_list_sg_type_next;
-                       } else {
-                               prev_sg->sg_list_sg_type_next = 
sg->sg_list_sg_type_next;
-                       }
-               }
-
-               sg->sg_list_sg_type_next = NULL;
-               sg->sg_type = NULL;
-       }
+  if (sg_type != nullptr) {
+    auto pos = std::find(sg_type->list_of_sg.begin(), 
sg_type->list_of_sg.end(), sg);
+    if(pos != sg_type->list_of_sg.end()) {
+      sg_type->list_of_sg.erase(pos);
+    } else {
+      /* Log a fatal error */
+      osafassert(0);
+    }
+  }
 }
 
 static void sgtype_delete(AVD_AMF_SG_TYPE *sg_type)
@@ -167,6 +152,12 @@ static int is_config_valid(const SaNameT
        return 1;
 }
 
+//
+AVD_AMF_SG_TYPE::AVD_AMF_SG_TYPE(const SaNameT *dn) {
+  memcpy(&name.value, dn->value, dn->length);
+  name.length = dn->length;
+}
+
 /**
  * Create a new SG type object and initialize its attributes from the 
attribute list.
  * @param dn
@@ -184,10 +175,7 @@ static AVD_AMF_SG_TYPE *sgtype_create(Sa
 
        TRACE_ENTER2("'%s'", dn->value);
 
-       sgt = new AVD_AMF_SG_TYPE();
-
-       memcpy(sgt->name.value, dn->value, dn->length);
-       sgt->name.length = dn->length;
+       sgt = new AVD_AMF_SG_TYPE(dn);
 
        error = 
immutil_getAttr(const_cast<SaImmAttrNameT>("saAmfSgtRedundancyModel"), 
attributes, 0, &sgt->saAmfSgtRedundancyModel);
        osafassert(error == SA_AIS_OK);
@@ -354,7 +342,7 @@ static SaAisErrorT sgtype_ccb_completed_
 {
        SaAisErrorT rc = SA_AIS_ERR_BAD_OPERATION;
        AVD_AMF_SG_TYPE *sgt;
-       AVD_SG *sg; 
+
        bool sg_exist = false;
        CcbUtilOperationData_t *t_opData;
 
@@ -370,23 +358,18 @@ static SaAisErrorT sgtype_ccb_completed_
                break;
        case CCBUTIL_DELETE:
                sgt = sgtype_db->find(Amf::to_string(&opdata->objectName));
-               if (sgt->list_of_sg != NULL) {
-                       /* check whether there exists a delete operation for 
-                        * each of the SG in the sg_type list in the current 
CCB 
-                        */                      
-                       sg = sgt->list_of_sg;
-                       while (sg != NULL) {  
-                               t_opData = 
ccbutil_getCcbOpDataByDN(opdata->ccbId, &sg->name);
-                               if ((t_opData == NULL) || 
(t_opData->operationType != CCBUTIL_DELETE)) {
-                                       sg_exist = true;   
-                                       break;                  
-                               }                       
-                               sg = sg->sg_list_sg_type_next;
-                       }                       
-                       if (sg_exist == true) {
-                               report_ccb_validation_error(opdata, "SGs exist 
of this SG type '%s'",sgt->name.value);
+
+               for (const auto& sg : sgt->list_of_sg) {
+                       t_opData = ccbutil_getCcbOpDataByDN(opdata->ccbId, 
&sg->name);
+                       if ((t_opData == NULL) || (t_opData->operationType != 
CCBUTIL_DELETE)) {
+                               sg_exist = true;
+                               break;
+                       }
+               }
+
+               if (sg_exist == true) {
+                       report_ccb_validation_error(opdata, "SGs exist of this 
SG type '%s'",sgt->name.value);
                                goto done;
-                       }                       
                }
                opdata->userData = sgt; /* Save for later use in apply */
                rc = SA_AIS_OK;
@@ -438,7 +421,8 @@ static void sgtype_ccb_apply_modify_hdlr
 
                        /* Modify saAmfSGAutoRepair for SGs which had inherited 
saAmfSgtDefAutoRepair.*/
                        if (old_value != sgt->saAmfSgtDefAutoRepair) {
-                               for (AVD_SG *sg = sgt->list_of_sg; sg; sg = 
sg->sg_list_sg_type_next) {  
+
+                               for (const auto& sg : sgt->list_of_sg) {
                                        if (!sg->saAmfSGAutoRepair_configured) {
                                                sg->saAmfSGAutoRepair = 
static_cast<SaBoolT>(sgt->saAmfSgtDefAutoRepair);
                                                TRACE("Modified 
saAmfSGAutoRepair is '%u'", sg->saAmfSGAutoRepair);

------------------------------------------------------------------------------
_______________________________________________
Opensaf-devel mailing list
Opensaf-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/opensaf-devel

Reply via email to