osaf/services/saf/amf/amfd/ckpt_enc.cc    |  14 ++----
 osaf/services/saf/amf/amfd/comp.cc        |  57 +++++++++---------------------
 osaf/services/saf/amf/amfd/compcstype.cc  |   2 +-
 osaf/services/saf/amf/amfd/imm.cc         |   7 +--
 osaf/services/saf/amf/amfd/include/comp.h |   9 ++--
 osaf/services/saf/amf/amfd/util.cc        |   6 +-
 6 files changed, 33 insertions(+), 62 deletions(-)


diff --git a/osaf/services/saf/amf/amfd/ckpt_enc.cc 
b/osaf/services/saf/amf/amfd/ckpt_enc.cc
--- a/osaf/services/saf/amf/amfd/ckpt_enc.cc
+++ b/osaf/services/saf/amf/amfd/ckpt_enc.cc
@@ -2603,17 +2603,14 @@ static uint32_t enc_cs_siass(AVD_CL_CB *
 static uint32_t enc_cs_comp_config(AVD_CL_CB *cb, NCS_MBCSV_CB_ENC *enc, 
uint32_t *num_of_obj)
 {
        uint32_t status = NCSCC_RC_SUCCESS;
-       AVD_COMP *comp;
-       SaNameT comp_name = {0};
        EDU_ERR ederror = static_cast<EDU_ERR>(0);
        TRACE_ENTER();
 
-       /* 
-        * Walk through the entire list and send the entire list data.
-        */
-       comp_name.length = 0;
-       for (comp = avd_comp_getnext(&comp_name); comp != NULL;
-            comp = avd_comp_getnext(&comp_name)) {
+       /* Walk through all component instances and encode. */
+       // If use std=c++11 in Makefile.common the following syntax can be used 
instead:
+       // for (auto it = app_db->begin()
+       for (std::map<std::string, AVD_COMP*>::const_iterator it = 
comp_db->begin(); it != comp_db->end(); it++) {
+               AVD_COMP *comp = it->second;
                status = m_NCS_EDU_VER_EXEC(&cb->edu_hdl, 
avsv_edp_ckpt_msg_comp, &enc->io_uba,
                                            EDP_OP_TYPE_ENC, comp, &ederror, 
enc->i_peer_version);
 
@@ -2622,7 +2619,6 @@ static uint32_t enc_cs_comp_config(AVD_C
                        return NCSCC_RC_FAILURE;
                }
 
-               comp_name = comp->comp_info.name;
                (*num_of_obj)++;
        }
 
diff --git a/osaf/services/saf/amf/amfd/comp.cc 
b/osaf/services/saf/amf/amfd/comp.cc
--- a/osaf/services/saf/amf/amfd/comp.cc
+++ b/osaf/services/saf/amf/amfd/comp.cc
@@ -40,17 +40,7 @@
 #include <proc.h>
 #include <ckpt_msg.h>
 
-static NCS_PATRICIA_TREE comp_db;
-
-void avd_comp_db_add(AVD_COMP *comp)
-{
-       unsigned int rc;
-
-       if (avd_comp_get(&comp->comp_info.name) == NULL) {
-               rc = ncs_patricia_tree_add(&comp_db, &comp->tree_node);
-               osafassert(rc == NCSCC_RC_SUCCESS);
-       }
-}
+AmfDb<AVD_COMP> *comp_db = 0;
 
 AVD_COMP *avd_comp_new(const SaNameT *dn)
 {
@@ -60,7 +50,6 @@ AVD_COMP *avd_comp_new(const SaNameT *dn
        
        memcpy(comp->comp_info.name.value, dn->value, dn->length);
        comp->comp_info.name.length = dn->length;
-       comp->tree_node.key_info = (uint8_t *)&(comp->comp_info.name);
        comp->comp_info.cap = SA_AMF_COMP_ONE_ACTIVE_OR_ONE_STANDBY;
        comp->comp_info.category = AVSV_COMP_TYPE_NON_SAF;
        comp->comp_info.def_recvr = SA_AMF_COMPONENT_RESTART;
@@ -143,26 +132,16 @@ AVD_COMP *avd_comp_get(const SaNameT *dn
 
        tmp.length = dn->length;
        memcpy(tmp.value, dn->value, tmp.length);
-
-       return (AVD_COMP *)ncs_patricia_tree_get(&comp_db, (uint8_t *)&tmp);
-}
-
-AVD_COMP *avd_comp_getnext(const SaNameT *dn)
-{
-       SaNameT tmp = {0};
-
-       tmp.length = dn->length;
-       memcpy(tmp.value, dn->value, tmp.length);
-
-       return (AVD_COMP *)ncs_patricia_tree_getnext(&comp_db, (uint8_t *)&tmp);
+       
+       return comp_db->find(&tmp);
 }
 
 void avd_comp_delete(AVD_COMP *comp)
 {
+       comp_db->erase(comp);
        m_AVSV_SEND_CKPT_UPDT_ASYNC_RMV(avd_cb, comp, 
AVSV_CKPT_AVD_COMP_CONFIG);
        avd_su_remove_comp(comp);
        avd_comptype_remove_comp(comp);
-       (void)ncs_patricia_tree_del(&comp_db, &comp->tree_node);
        delete comp;
 }
 
@@ -185,8 +164,11 @@ static void comp_add_to_model(AVD_COMP *
        avsv_sanamet_init(&comp->comp_info.name, &dn, "safSu");
        comp->su = avd_su_get(&dn);
 
-       avd_comp_db_add(comp);
-       comp->comp_type = avd_comptype_get(&comp->saAmfCompType);
+       if (comp_db->find(&comp->name) == NULL) {
+               comp_db->insert(comp);
+       }
+       
+       comp->comp_type = avd_comptype_get(&comp->name);
        osafassert(comp->comp_type);
        avd_comptype_add_comp(comp);
        avd_su_add_comp(comp);
@@ -432,18 +414,18 @@ static AVD_COMP *comp_create(const SaNam
        else
                TRACE("already created, refreshing config...");
 
-       error = immutil_getAttr(const_cast<SaImmAttrNameT>("saAmfCompType"), 
attributes, 0, &comp->saAmfCompType);
+       error = immutil_getAttr(const_cast<SaImmAttrNameT>("saAmfCompType"), 
attributes, 0, &comp->name);
        osafassert(error == SA_AIS_OK);
 
-       if ((comptype = avd_comptype_get(&comp->saAmfCompType)) == NULL) {
-               LOG_ER("saAmfCompType '%s' does not exist", 
comp->saAmfCompType.value);
+       if ((comptype = avd_comptype_get(&comp->name)) == NULL) {
+               LOG_ER("saAmfCompType '%s' does not exist", comp->name.value);
                goto done;
        }
 
        /*  TODO clean this up! */
        comp->comp_info.category = 
avsv_amfcompcategory_to_avsvcomptype(comptype->saAmfCtCompCategory);
        if (comp->comp_info.category == AVSV_COMP_TYPE_INVALID) {
-               LOG_ER("Comp category %x invalid for '%s'", 
comp->comp_info.category, comp->saAmfCompType.value);
+               LOG_ER("Comp category %x invalid for '%s'", 
comp->comp_info.category, comp->name.value);
                goto done;
        }
 
@@ -1065,7 +1047,7 @@ static void comp_ccb_apply_modify_hdlr(s
 
        comp = avd_comp_get(&opdata->objectName);
        param.name = comp->comp_info.name;
-       comp_type = avd_comptype_get(&comp->saAmfCompType);
+       comp_type = avd_comptype_get(&comp->name);
 
        m_AVD_GET_SU_NODE_PTR(avd_cb, comp->su, su_node_ptr);
 
@@ -1094,10 +1076,10 @@ static void comp_ccb_apply_modify_hdlr(s
 
                        SaNameT *dn = (SaNameT*) value;
 
-                       TRACE("saAmfCompType modified from '%s' to '%s' for 
'%s'", comp->saAmfCompType.value, dn->value,
+                       TRACE("saAmfCompType modified from '%s' to '%s' for 
'%s'", comp->name.value, dn->value,
                                        opdata->objectName.value);
                        avd_comptype_remove_comp(comp);
-                       comp->saAmfCompType = *dn;
+                       comp->name = *dn;
                        comp->comp_type = avd_comptype_get(dn);
                        avd_comptype_add_comp(comp);
                        param.attr_id = saAmfCompType_ID;
@@ -1551,11 +1533,8 @@ static void comp_ccb_apply_cb(CcbUtilOpe
 
 void avd_comp_constructor(void)
 {
-       NCS_PATRICIA_PARAMS patricia_params;
-
-       patricia_params.key_size = sizeof(SaNameT);
-       osafassert(ncs_patricia_tree_init(&comp_db, &patricia_params) == 
NCSCC_RC_SUCCESS);
-
+       comp_db = new AmfDb<AVD_COMP>;
+       
        avd_class_impl_set(const_cast<SaImmClassNameT>("SaAmfComp"), 
comp_rt_attr_cb, comp_admin_op_cb,
                comp_ccb_completed_cb, comp_ccb_apply_cb);
 }
diff --git a/osaf/services/saf/amf/amfd/compcstype.cc 
b/osaf/services/saf/amf/amfd/compcstype.cc
--- a/osaf/services/saf/amf/amfd/compcstype.cc
+++ b/osaf/services/saf/amf/amfd/compcstype.cc
@@ -181,7 +181,7 @@ static int is_config_valid(const SaNameT
        comp = avd_comp_get(&comp_name);
 
        if (comp != NULL)
-               comptype_name = &comp->saAmfCompType;
+               comptype_name = &comp->name;
        else {
                CcbUtilOperationData_t *tmp;
 
diff --git a/osaf/services/saf/amf/amfd/imm.cc 
b/osaf/services/saf/amf/amfd/imm.cc
--- a/osaf/services/saf/amf/amfd/imm.cc
+++ b/osaf/services/saf/amf/amfd/imm.cc
@@ -1555,8 +1555,6 @@ void avd_imm_update_runtime_attrs(void)
 {
        SaNameT su_name = {0};
        AVD_SU  *su;
-       SaNameT comp_name ={0};
-       AVD_COMP *comp;
        SaNameT node_name = {0};
        AVD_AVND *node;
        SaNameT si_name = {0};
@@ -1589,8 +1587,8 @@ void avd_imm_update_runtime_attrs(void)
        }
 
        /* Update Component Class runtime cached attributes. */
-       comp = avd_comp_getnext(&comp_name);
-       while (comp != NULL) {
+       for (std::map<std::string, AVD_COMP*>::const_iterator it = 
comp_db->begin(); it != comp_db->end(); it++) {
+               AVD_COMP *comp = it->second;
                avd_saImmOiRtObjectUpdate(&comp->comp_info.name,
                                          
const_cast<SaImmAttrNameT>("saAmfCompReadinessState"), SA_IMM_ATTR_SAUINT32T, 
&comp->saAmfCompReadinessState);
 
@@ -1600,7 +1598,6 @@ void avd_imm_update_runtime_attrs(void)
                avd_saImmOiRtObjectUpdate(&comp->comp_info.name,
                                          
const_cast<SaImmAttrNameT>("saAmfCompPresenceState"), SA_IMM_ATTR_SAUINT32T, 
&comp->saAmfCompPresenceState);
 
-               comp = avd_comp_getnext(&comp->comp_info.name);
        }
 
        /* Update Node Class runtime cached attributes. */
diff --git a/osaf/services/saf/amf/amfd/include/comp.h 
b/osaf/services/saf/amf/amfd/include/comp.h
--- a/osaf/services/saf/amf/amfd/include/comp.h
+++ b/osaf/services/saf/amf/amfd/include/comp.h
@@ -39,6 +39,7 @@
 #include <ncspatricia.h>
 #include <amf_d2nmsg.h>
 #include <su.h>
+#include "db_template.h"
 
 /* AMF Class SaAmfCompGlobalAttributes */
 typedef struct {
@@ -52,8 +53,7 @@ typedef struct {
 /* AMF Class SaAmfCompType */
 typedef struct avd_comp_tag {
 
-       NCS_PATRICIA_NODE tree_node;    /* key will be the component name */
-       SaNameT saAmfCompType;
+       SaNameT name;
 
        /* Detailed as in data structure definition */
        AVSV_COMP_INFO comp_info;       /* component name field with 
@@ -119,6 +119,8 @@ typedef struct avd_comp_tag {
        AVD_ADMIN_OPER_CBK admin_pend_cbk;  /* holds callback invocation for 
admin operation */
 } AVD_COMP;
 
+extern AmfDb<AVD_COMP> *comp_db;
+
 /* AMF Class SaAmfCompType */
 typedef struct avd_amf_comp_type_tag {
 
@@ -202,12 +204,9 @@ extern void avd_comp_readiness_state_set
  */
 extern void avd_comp_proxy_status_change(AVD_COMP *comp, SaAmfProxyStatusT 
proxy_status);
 
-extern void avd_comp_db_add(AVD_COMP *comp);
-
 extern AVD_COMP *avd_comp_new(const SaNameT *dn);
 extern void avd_comp_delete(AVD_COMP *comp);
 extern AVD_COMP *avd_comp_get(const SaNameT *comp_name);
-extern AVD_COMP *avd_comp_getnext(const SaNameT *comp_name);
 extern void avd_su_remove_comp(AVD_COMP* comp);
 extern SaAisErrorT avd_comp_config_get(const SaNameT* su_name, struct 
avd_su_tag* su);
 extern void avd_comp_constructor(void);
diff --git a/osaf/services/saf/amf/amfd/util.cc 
b/osaf/services/saf/amf/amfd/util.cc
--- a/osaf/services/saf/amf/amfd/util.cc
+++ b/osaf/services/saf/amf/amfd/util.cc
@@ -1465,9 +1465,9 @@ void amfd_file_dump(const char *path)
                dn = su->name;
        }
 
-       AVD_COMP *comp;
-       dn.length = 0;
-       for (comp = avd_comp_getnext(&dn); comp != NULL; comp = 
avd_comp_getnext(&dn)) {
+       for (std::map<std::string, AVD_COMP*>::const_iterator it = 
comp_db->begin();
+                       it != comp_db->end(); it++) {
+               const AVD_COMP *comp = it->second;    
                fprintf(f, "%s\n", comp->comp_info.name.value);
                fprintf(f, "\tsaAmfCompOperState=%u\n", 
comp->saAmfCompOperState);
                fprintf(f, "\tsaAmfCompReadinessState=%u\n", 
comp->saAmfCompReadinessState);

------------------------------------------------------------------------------
CenturyLink Cloud: The Leader in Enterprise Cloud Services.
Learn Why More Businesses Are Choosing CenturyLink Cloud For
Critical Workloads, Development Environments & Everything In Between.
Get a Quote or Start a Free Trial Today. 
http://pubads.g.doubleclick.net/gampad/clk?id=119420431&iu=/4140/ostg.clktrk
_______________________________________________
Opensaf-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/opensaf-devel

Reply via email to