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; } ------------------------------------------------------------------------------ The best possible search technologies are now affordable for all companies. Download your FREE open source Enterprise Search Engine today! Our experts will assist you in its installation for $59/mo, no commitment. Test it for FREE on our Cloud platform anytime! http://pubads.g.doubleclick.net/gampad/clk?id=145328191&iu=/4140/ostg.clktrk _______________________________________________ Opensaf-devel mailing list Opensaf-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/opensaf-devel