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

Reply via email to