Can you please push it asap as we need to rebase our patches on yours. It blocks us.
Thanks -Nagu > -----Original Message----- > From: Hans Nordebäck [mailto:hans.nordeb...@ericsson.com] > Sent: 28 May 2014 16:01 > To: praveen malviya > Cc: hans.fe...@ericsson.com; Nagendra Kumar; opensaf- > de...@lists.sourceforge.net > Subject: Re: [PATCH 1 of 1] amfd: add support for different key types in > db_template, app_db updated [#713] > > Yes I can do that, it will be done next week. > /Regards HansN > On 05/28/14 12:21, praveen malviya wrote: > > 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