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

Reply via email to