> - for (ng = ng_getnext(&dn); ng != NULL; ng = ng_getnext(&dn)) > + for (std::map<std::string, AVD_AMF_NG*>::const_iterator it = > nodegroup_db->begin(); > + it != nodegroup_db->end(); ) { > + AVD_AMF_NG *ng = it->second; > + it++; [Hans] move to for statements after semicolon > > > ng_delete(ng); > > + }
I incremented it before ng_delete and not in for loop, because the element is getting deleted in ng_delete(ng); So, I thought it is rather good to increment to next before, it gets deleted. Thanks -Nagu > -----Original Message----- > From: Hans Feldt [mailto:hans.fe...@ericsson.com] > Sent: 23 May 2014 15:31 > To: Nagendra Kumar; Hans Nordebäck; Praveen Malviya > Cc: opensaf-devel@lists.sourceforge.net > Subject: RE: [PATCH 1 of 1] amfd: replace patricia tree with stl::maps in > nodegroup [#713] > > Ack with minor comments inline > /Hans > > > -----Original Message----- > > From: nagendr...@oracle.com [mailto:nagendr...@oracle.com] > > Sent: den 23 maj 2014 10:45 > > To: Hans Feldt; Hans Nordebäck; praveen.malv...@oracle.com > > Cc: opensaf-devel@lists.sourceforge.net > > Subject: [PATCH 1 of 1] amfd: replace patricia tree with stl::maps in > nodegroup [#713] > > > > osaf/services/saf/amf/amfd/include/node.h | 2 +- > > osaf/services/saf/amf/amfd/nodegroup.cc | 76 > > ++++++++---------------------- > > 2 files changed, 22 insertions(+), 56 deletions(-) > > > > > > diff --git a/osaf/services/saf/amf/amfd/include/node.h > b/osaf/services/saf/amf/amfd/include/node.h > > --- a/osaf/services/saf/amf/amfd/include/node.h > > +++ b/osaf/services/saf/amf/amfd/include/node.h > > @@ -147,7 +147,7 @@ typedef struct avd_avnd_tag { > > typedef struct avd_ng_tag { > > > > NCS_PATRICIA_NODE tree_node; /* key will be AMF node > group name */ > > - SaNameT ng_name; > > + SaNameT name; > > uint32_t number_nodes; /* number of element in > saAmfNGNodeList */ > > SaNameT *saAmfNGNodeList; /* array of node names in group */ > > > > diff --git a/osaf/services/saf/amf/amfd/nodegroup.cc > b/osaf/services/saf/amf/amfd/nodegroup.cc > > --- a/osaf/services/saf/amf/amfd/nodegroup.cc > > +++ b/osaf/services/saf/amf/amfd/nodegroup.cc > > @@ -23,17 +23,7 @@ > > #include <cluster.h> > > #include <imm.h> > > > > -static NCS_PATRICIA_TREE nodegroup_db; > > - > > -/** > > - * Add a node group object to the db. > > - * @param ng > > - */ > > -static void ng_db_add(AVD_AMF_NG *ng) > > -{ > > - unsigned int rc = ncs_patricia_tree_add(&nodegroup_db, &ng- > >tree_node); > > - osafassert(rc == NCSCC_RC_SUCCESS); > > -} > > +AmfDb<AVD_AMF_NG> *nodegroup_db = 0; > [Hans] = NULL; > > > > > /** > > * Lookup object in db using dn > > @@ -43,28 +33,7 @@ static void ng_db_add(AVD_AMF_NG *ng) > > */ > > AVD_AMF_NG *avd_ng_get(const SaNameT *dn) > > { > > - SaNameT tmp = {0}; > > - > > - tmp.length = dn->length; > > - memcpy(tmp.value, dn->value, tmp.length); > > - > > - return (AVD_AMF_NG *)ncs_patricia_tree_get(&nodegroup_db, > (uint8_t *)&tmp); > > -} > > - > > -/** > > - * Get next object from db using dn > > - * @param dn > > - * > > - * @return AVD_AMF_NG* > > - */ > > -static AVD_AMF_NG *ng_getnext(const SaNameT *dn) > > -{ > > - SaNameT tmp = {0}; > > - > > - tmp.length = dn->length; > > - memcpy(tmp.value, dn->value, tmp.length); > > - > > - return (AVD_AMF_NG *)ncs_patricia_tree_getnext(&nodegroup_db, > (uint8_t *)&tmp); > > + return nodegroup_db->find(dn); > > } > > > > /** > > @@ -138,9 +107,9 @@ static AVD_AMF_NG *ng_create(SaNameT *dn > > > > ng = new AVD_AMF_NG(); > > > > - memcpy(ng->ng_name.value, dn->value, dn->length); > > - ng->ng_name.length = dn->length; > > - ng->tree_node.key_info = (uint8_t *)&(ng->ng_name); > > + memcpy(ng->name.value, dn->value, dn->length); > > + ng->name.length = dn->length; > > + ng->tree_node.key_info = (uint8_t *)&(ng->name); > > > > if > ((immutil_getAttrValuesNumber(const_cast<SaImmAttrNameT>("saAmfNGNod > eList"), attributes, > > &values_number) == SA_AIS_OK) && (values_number > 0)) { > > @@ -174,10 +143,7 @@ done: > > */ > > static void ng_delete(AVD_AMF_NG *ng) > > { > > - unsigned int rc = ncs_patricia_tree_del(&nodegroup_db, &ng- > >tree_node); > > - osafassert(rc == NCSCC_RC_SUCCESS); > > - > > - osafassert(ng); > > + nodegroup_db->erase(ng); > > free(ng->saAmfNGNodeList); > > delete ng; > > } > > @@ -203,8 +169,12 @@ SaAisErrorT avd_ng_config_get(void) > > /* Could be here as a consequence of a fail/switch-over. Delete the DB > > ** since it is anyway not synced and needs to be rebuilt. */ > > dn.length = 0; > > - for (ng = ng_getnext(&dn); ng != NULL; ng = ng_getnext(&dn)) > > + for (std::map<std::string, AVD_AMF_NG*>::const_iterator it = > nodegroup_db->begin(); > > + it != nodegroup_db->end(); ) { > > + AVD_AMF_NG *ng = it->second; > > + it++; > [Hans] move to for statements after semicolon > > > ng_delete(ng); > > + } > > > > searchParam.searchOneAttr.attrName = > const_cast<SaImmAttrNameT>("SaImmAttrClassName"); > > searchParam.searchOneAttr.attrValueType = > SA_IMM_ATTR_SASTRINGT; > > @@ -228,7 +198,7 @@ SaAisErrorT avd_ng_config_get(void) > > if ((ng = ng_create(&dn, (const SaImmAttrValuesT_2 > **)attributes)) == NULL) > > goto done2; > > > > - ng_db_add(ng); > > + nodegroup_db->insert(ng); > > } > > > > rc = SA_AIS_OK; > > @@ -249,10 +219,10 @@ done1: > > */ > > static bool su_is_mapped_to_node_via_nodegroup(const AVD_SU *su, const > AVD_AMF_NG *ng) > > { > > - if ((memcmp(&ng->ng_name, &su->saAmfSUHostNodeOrNodeGroup, > sizeof(SaNameT)) == 0) || > > - (memcmp(&ng->ng_name, &su->sg_of_su- > >saAmfSGSuHostNodeGroup, sizeof(SaNameT)) == 0)) { > > + if ((memcmp(&ng->name, &su->saAmfSUHostNodeOrNodeGroup, > sizeof(SaNameT)) == 0) || > > + (memcmp(&ng->name, &su->sg_of_su->saAmfSGSuHostNodeGroup, > sizeof(SaNameT)) == 0)) { > > > > - TRACE("SU '%s' mapped using '%s'", su->name.value, ng- > >ng_name.value); > > + TRACE("SU '%s' mapped using '%s'", su->name.value, ng- > >name.value); > > return true; > > } > > > > @@ -337,7 +307,7 @@ static SaAisErrorT ng_ccb_completed_modi > > if > (su_is_mapped_to_node_via_nodegroup(su, ng)) { > > > report_ccb_validation_error(opdata, "Cannot delete '%s' from '%s'." > > " An SU is > mapped using node group", > > - node- > >name.value, ng->ng_name.value); > > + node- > >name.value, ng->name.value); > > goto done; > > > > } > > @@ -348,7 +318,7 @@ static SaAisErrorT ng_ccb_completed_modi > > if > (su_is_mapped_to_node_via_nodegroup(su, ng)) { > > > report_ccb_validation_error(opdata, "Cannot delete '%s' from '%s'." > > " An SU is > mapped using node group", > > - node- > >name.value, ng->ng_name.value); > > + node- > >name.value, ng->name.value); > > goto done; > > } > > } > > @@ -444,7 +414,7 @@ static SaAisErrorT ng_ccb_completed_dele > > if (su_is_mapped_to_node_via_nodegroup(su, ng) && > > is_deleted_in_ccb(opdata->ccbId, &su->name) == > false) { > > report_ccb_validation_error(opdata, "Cannot > delete '%s' because '%s' is mapped using it", > > - ng->ng_name.value, su->name.value); > > + ng->name.value, su->name.value); > > goto done; > > } > > } > > @@ -453,7 +423,7 @@ static SaAisErrorT ng_ccb_completed_dele > > if (su_is_mapped_to_node_via_nodegroup(su, ng) && > > is_deleted_in_ccb(opdata->ccbId, &su->name) == > false) { > > report_ccb_validation_error(opdata, "Cannot > delete '%s' because '%s' is mapped using it", > > - ng->ng_name.value, su->name.value); > > + ng->name.value, su->name.value); > > goto done; > > } > > } > > @@ -571,7 +541,7 @@ static void ng_ccb_apply_cb(CcbUtilOpera > > case CCBUTIL_CREATE: > > ng = ng_create(&opdata->objectName, opdata- > >param.create.attrValues); > > osafassert(ng); > > - ng_db_add(ng); > > + nodegroup_db->insert(ng); > > break; > > case CCBUTIL_MODIFY: > > ng_ccb_apply_modify_hdlr(opdata); > > @@ -593,11 +563,7 @@ static void ng_ccb_apply_cb(CcbUtilOpera > > */ > > void avd_ng_constructor(void) > > { > > - NCS_PATRICIA_PARAMS patricia_params; > > - > > - patricia_params.key_size = sizeof(SaNameT); > > - osafassert(ncs_patricia_tree_init(&nodegroup_db, &patricia_params) > == NCSCC_RC_SUCCESS); > > - > > + nodegroup_db = new AmfDb<AVD_AMF_NG>; > > avd_class_impl_set("SaAmfNodeGroup", NULL, NULL, > ng_ccb_completed_cb, > > ng_ccb_apply_cb); > > } ------------------------------------------------------------------------------ "Accelerate Dev Cycles with Automated Cross-Browser Testing - For FREE Instantly run your Selenium tests across 300+ browser/OS combos. Get unparalleled scalability from the best Selenium testing platform available Simple to use. Nothing to install. Get started now for free." http://p.sf.net/sfu/SauceLabs _______________________________________________ Opensaf-devel mailing list Opensaf-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/opensaf-devel