Patch looks fine, but it cannot be pushed without making the compatible changes in already changed and committed databases like AVD_SU, AVD_SI etc. Are you going to float the patches for them.
Thanks Praveen On 26-May-14 6:40 PM, Hans Nordeback wrote: > osaf/libs/saf/include/saAis.h | 4 ++ > osaf/services/saf/amf/amfd/app.cc | 18 +++++----- > osaf/services/saf/amf/amfd/include/app.h | 2 +- > osaf/services/saf/amf/amfd/include/db_template.h | 40 > ++++++++++------------- > 4 files changed, 32 insertions(+), 32 deletions(-) > > > diff --git a/osaf/libs/saf/include/saAis.h b/osaf/libs/saf/include/saAis.h > --- a/osaf/libs/saf/include/saAis.h > +++ b/osaf/libs/saf/include/saAis.h > @@ -35,6 +35,7 @@ > #define _SA_AIS_H > > #ifdef __cplusplus > +#include <string> > extern "C" { > #endif > > @@ -159,6 +160,9 @@ typedef struct { > typedef struct { > SaUint16T length; > SaUint8T value[SA_MAX_NAME_LENGTH]; > +#ifdef __cplusplus > + operator std::string() const {return std::string((char*)value, length);} > +#endif > } SaNameT; > > typedef struct { > diff --git a/osaf/services/saf/amf/amfd/app.cc > b/osaf/services/saf/amf/amfd/app.cc > --- a/osaf/services/saf/amf/amfd/app.cc > +++ b/osaf/services/saf/amf/amfd/app.cc > @@ -24,7 +24,7 @@ > #include <imm.h> > #include <si.h> > > -AmfDb<AVD_APP> *app_db = 0; > +AmfDb<std::string, AVD_APP> *app_db = 0; > > // TODO(hafe) change this to a constructor > static AVD_APP *avd_app_new(const SaNameT *dn) > @@ -38,7 +38,7 @@ static AVD_APP *avd_app_new(const SaName > // TODO(hafe) change this to a destructor > static void avd_app_delete(AVD_APP *app) > { > - app_db->erase(app); > + app_db->erase(app->name); > m_AVSV_SEND_CKPT_UPDT_ASYNC_RMV(avd_cb, app, AVSV_CKPT_AVD_APP_CONFIG); > avd_apptype_remove_app(app); > delete app; > @@ -54,7 +54,7 @@ static void app_add_to_model(AVD_APP *ap > goto done; > } > > - app_db->insert(app); > + app_db->insert(app->name, app); > > /* Find application type and make a link with app type */ > app->app_type = avd_apptype_get(&app->saAmfAppType); > @@ -196,7 +196,7 @@ AVD_APP *avd_app_create(const SaNameT *d > ** If called at new active at failover, the object is found in the DB > ** but needs to get configuration attributes initialized. > */ > - app = app_db->find(dn); > + app = app_db->find(*dn); > if (app == NULL) { > if ((app = avd_app_new(dn)) == NULL) > goto done; > @@ -282,7 +282,7 @@ static void app_ccb_apply_cb(CcbUtilOper > break; > case CCBUTIL_MODIFY: { > const SaImmAttrModificationT_2 *attr_mod; > - app = app_db->find(&opdata->objectName); > + app = app_db->find(*(&opdata->objectName)); > > while ((attr_mod = opdata->param.modify.attrMods[i++]) != NULL) > { > const SaImmAttrValuesT_2 *attribute = > &attr_mod->modAttr; > @@ -302,7 +302,7 @@ static void app_ccb_apply_cb(CcbUtilOper > break; > } > case CCBUTIL_DELETE: > - app = app_db->find(&opdata->objectName); > + app = app_db->find(*(&opdata->objectName)); > /* by this time all the SGs and SIs under this > * app object should have been *DELETED* just > * do a sanity check here > @@ -327,7 +327,7 @@ static void app_admin_op_cb(SaImmOiHandl > TRACE_ENTER2("%s", object_name->value); > > /* Find the app name. */ > - app = app_db->find(object_name); > + app = app_db->find(*object_name); > osafassert(app != NULL); > > if (op_id == SA_AMF_ADMIN_UNLOCK) { > @@ -384,7 +384,7 @@ done: > static SaAisErrorT app_rt_attr_cb(SaImmOiHandleT immOiHandle, > const SaNameT *objectName, const SaImmAttrNameT *attributeNames) > { > - AVD_APP *app = app_db->find(objectName); > + AVD_APP *app = app_db->find(*objectName); > SaImmAttrNameT attributeName; > int i = 0; > > @@ -461,7 +461,7 @@ SaAisErrorT avd_app_config_get(void) > > void avd_app_constructor(void) > { > - app_db = new AmfDb<AVD_APP>; > + app_db = new AmfDb<std::string, AVD_APP>; > > avd_class_impl_set(const_cast<SaImmClassNameT>("SaAmfApplication"), > app_rt_attr_cb, > diff --git a/osaf/services/saf/amf/amfd/include/app.h > b/osaf/services/saf/amf/amfd/include/app.h > --- a/osaf/services/saf/amf/amfd/include/app.h > +++ b/osaf/services/saf/amf/amfd/include/app.h > @@ -53,7 +53,7 @@ typedef struct avd_app_tag { > struct avd_app_type_tag *app_type; > } AVD_APP; > > -extern AmfDb<AVD_APP> *app_db; > +extern AmfDb<std::string, AVD_APP> *app_db; > > extern void avd_app_add_si(AVD_APP *app, struct avd_si_tag *si); > extern void avd_app_remove_si(AVD_APP *app, struct avd_si_tag *si); > diff --git a/osaf/services/saf/amf/amfd/include/db_template.h > b/osaf/services/saf/amf/amfd/include/db_template.h > --- a/osaf/services/saf/amf/amfd/include/db_template.h > +++ b/osaf/services/saf/amf/amfd/include/db_template.h > @@ -21,14 +21,14 @@ > #include <string> > #include "ncsgl_defs.h" > > -template <typename T> > +template <typename Key, typename T> > class AmfDb { > public: > - unsigned int insert(T *obj); > - void erase(T *obj); > - T *find(const SaNameT *name); > + unsigned int insert(const Key &key, T *obj); > + void erase(const Key &obj); > + T *find(const Key &name); > > - typedef std::map<std::string, T*> AmfDbMap; > + typedef std::map<Key, T*> AmfDbMap; > typedef typename AmfDbMap::const_iterator const_iterator; > > const_iterator begin() const {return db.begin();} > @@ -38,32 +38,28 @@ class AmfDb { > AmfDbMap db; > }; > > -template <typename T> > -unsigned int AmfDb<T>::insert(T *obj) { > +template <typename Key, typename T> > +unsigned int AmfDb<Key, T>::insert(const Key &key, T *obj) { > osafassert(obj); > - std::string name((const char*)obj->name.value, obj->name.length); > - if (db.insert(std::make_pair(name, obj)).second) { > - return NCSCC_RC_SUCCESS; > + > + if (db.insert(std::make_pair(key, obj)).second) { > + return 0; > } > else { > - return NCSCC_RC_FAILURE; // Duplicate > + return -1; // Duplicate > } > } > > -template <typename T> > -void AmfDb<T>::erase(T *obj) { > - osafassert(obj); > - std::string name((const char*)obj->name.value, obj->name.length); > - db.erase(name); > +template <typename Key, typename T> > +void AmfDb<Key, T>::erase(const Key &key) { > + db.erase(key); > } > > -template <typename T> > -T *AmfDb<T>::find(const SaNameT *dn) { > - osafassert(dn); > - std::string name((const char*)dn->value, dn->length); > - typename AmfDbMap::iterator it = db.find(name); > +template <typename Key, typename T> > +T *AmfDb<Key, T>::find(const Key &dn) { > + typename AmfDbMap::iterator it = db.find(dn); > if (it == db.end()) > - return NULL; > + return 0; > else > return it->second; > } ------------------------------------------------------------------------------ Time is money. Stop wasting it! Get your web API in 5 minutes. www.restlet.com/download http://p.sf.net/sfu/restlet _______________________________________________ Opensaf-devel mailing list Opensaf-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/opensaf-devel