as and alternative to use a global g_app_db you can use a class, e.g.:

h file:
class AmfApplicationDb {
  public:
   static ApplicationMap application_map_db;
   static void add(AmfApplication* application);

   :

};

cc file:

ApplicationMap AmfApplicationDb::application_map_db;

void AmfApplicationDb::add(AmfApplication* application)
{
  application_map_db[application->get_name()] = application;
}

etc.

/BR HansN


On 01/14/14 15:17, Hans Feldt wrote:
>   osaf/services/saf/amf/amfd/app.cc        |  72 
> ++++++++++++-------------------
>   osaf/services/saf/amf/amfd/ckpt_enc.cc   |  12 +---
>   osaf/services/saf/amf/amfd/include/app.h |  13 +++--
>   osaf/services/saf/amf/amfd/util.cc       |  15 +++---
>   4 files changed, 47 insertions(+), 65 deletions(-)
>
>
> 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,35 +24,25 @@
>   #include <imm.h>
>   #include <si.h>
>   
> -static NCS_PATRICIA_TREE app_db;
> +// A map with application instances, key is DN as std:string
> +ApplicationMap *g_app_db;
>   
> -void avd_app_db_add(AVD_APP *app)
> +// TODO(hafe) change this to a constructor
> +static AVD_APP *avd_app_new(const SaNameT *dn)
>   {
> -     unsigned int rc;
> -
> -     if (avd_app_get(&app->name) == NULL) {
> -             rc = ncs_patricia_tree_add(&app_db, &app->tree_node);
> -             osafassert(rc == NCSCC_RC_SUCCESS);
> -     }
> -}
> -
> -AVD_APP *avd_app_new(const SaNameT *dn)
> -{
> -     AVD_APP *app;
> -
> -     app = new AVD_APP();
> -
> +     AVD_APP *app = new AVD_APP();
>       memcpy(app->name.value, dn->value, dn->length);
>       app->name.length = dn->length;
> -     app->tree_node.key_info = (uint8_t *)&(app->name);
> -
>       return app;
>   }
>   
> -void avd_app_delete(AVD_APP *app)
> +// TODO(hafe) change this to a destructor
> +static void avd_app_delete(AVD_APP *app)
>   {
> -     unsigned int rc = ncs_patricia_tree_del(&app_db, &app->tree_node);
> -     osafassert(rc == NCSCC_RC_SUCCESS);
> +     std::string name((const char*)app->name.value, app->name.length);
> +     ApplicationMap::iterator it = g_app_db->find(name);
> +     g_app_db->erase(it);
> +
>       m_AVSV_SEND_CKPT_UPDT_ASYNC_RMV(avd_cb, app, AVSV_CKPT_AVD_APP_CONFIG);
>       avd_apptype_remove_app(app);
>       delete app;
> @@ -60,22 +50,13 @@ void avd_app_delete(AVD_APP *app)
>   
>   AVD_APP *avd_app_get(const SaNameT *dn)
>   {
> -     SaNameT tmp = {0};
> +     std::string name((const char*)dn->value, dn->length);
> +     ApplicationMap::iterator it = g_app_db->find(name);
>   
> -     tmp.length = dn->length;
> -     memcpy(tmp.value, dn->value, tmp.length);
> -
> -     return (AVD_APP *)ncs_patricia_tree_get(&app_db, (uint8_t *)&tmp);
> -}
> -
> -AVD_APP *avd_app_getnext(const SaNameT *dn)
> -{
> -     SaNameT tmp = {0};
> -
> -     tmp.length = dn->length;
> -     memcpy(tmp.value, dn->value, tmp.length);
> -
> -     return (AVD_APP *)ncs_patricia_tree_getnext(&app_db, (uint8_t *)&tmp);
> +     if (it == g_app_db->end())
> +             return NULL;
> +     else
> +             return it->second;
>   }
>   
>   static void app_add_to_model(AVD_APP *app)
> @@ -88,7 +69,11 @@ static void app_add_to_model(AVD_APP *ap
>               goto done;
>       }
>   
> -     avd_app_db_add(app);
> +     if (avd_app_get(&app->name) == NULL) {
> +             std::string name((const char*)app->name.value, 
> app->name.length);
> +             (*g_app_db)[name] = app;
> +     }
> +
>       /* Find application type and make a link with app type */
>       app->app_type = avd_apptype_get(&app->saAmfAppType);
>       osafassert(app->app_type);
> @@ -493,12 +478,11 @@ SaAisErrorT avd_app_config_get(void)
>   
>   void avd_app_constructor(void)
>   {
> -     NCS_PATRICIA_PARAMS patricia_params;
> +     g_app_db = new ApplicationMap;
>   
> -     patricia_params.key_size = sizeof(SaNameT);
> -     osafassert(ncs_patricia_tree_init(&app_db, &patricia_params) == 
> NCSCC_RC_SUCCESS);
> -
> -     avd_class_impl_set(const_cast<SaImmClassNameT>("SaAmfApplication"), 
> app_rt_attr_cb, app_admin_op_cb,
> -             app_ccb_completed_cb, app_ccb_apply_cb);
> +     avd_class_impl_set(const_cast<SaImmClassNameT>("SaAmfApplication"),
> +                                             app_rt_attr_cb,
> +                                             app_admin_op_cb,
> +                                             app_ccb_completed_cb,
> +                                             app_ccb_apply_cb);
>   }
> -
> diff --git a/osaf/services/saf/amf/amfd/ckpt_enc.cc 
> b/osaf/services/saf/amf/amfd/ckpt_enc.cc
> --- a/osaf/services/saf/amf/amfd/ckpt_enc.cc
> +++ b/osaf/services/saf/amf/amfd/ckpt_enc.cc
> @@ -2243,16 +2243,13 @@ static uint32_t enc_cs_node_config(AVD_C
>   static uint32_t enc_cs_app_config(AVD_CL_CB *cb, NCS_MBCSV_CB_ENC *enc, 
> uint32_t *num_of_obj)
>   {
>       uint32_t status = NCSCC_RC_SUCCESS;
> -     SaNameT app_name;
> -     AVD_APP *app;
>       EDU_ERR ederror = static_cast<EDU_ERR>(0);
>       TRACE_ENTER();
>   
> -     /*
> -      * Walk through the entire list and send the entire list data.
> -      */
> -     app_name.length = 0;
> -     for (app = avd_app_getnext(&app_name); app != NULL; app = 
> avd_app_getnext(&app_name)) {
> +     /* Walk through all application instances and encode. */
> +     ApplicationMap::iterator it;
> +     for (it = g_app_db->begin(); it != g_app_db->end(); it++) {
> +             AVD_APP *app = it->second;
>               status = m_NCS_EDU_VER_EXEC(&cb->edu_hdl, 
> avsv_edp_ckpt_msg_app, &enc->io_uba,
>                                           EDP_OP_TYPE_ENC, app, &ederror, 
> enc->i_peer_version);
>   
> @@ -2261,7 +2258,6 @@ static uint32_t enc_cs_app_config(AVD_CL
>                       return NCSCC_RC_FAILURE;
>               }
>   
> -             app_name = app->name;
>               (*num_of_obj)++;
>       }
>   
> 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
> @@ -24,8 +24,13 @@
>   #ifndef AVD_APP_H
>   #define AVD_APP_H
>   
> +#include <map>
> +#include <string>
> +
>   #include <saAmf.h>
>   #include <saImm.h>
> +
> +// TODO(hafe) remove include below when apptype is using map
>   #include <ncspatricia.h>
>   #include <sg.h>
>   #include <si.h>
> @@ -43,7 +48,6 @@ typedef struct avd_app_type_tag {
>   } AVD_APP_TYPE;
>   
>   typedef struct avd_app_tag {
> -     NCS_PATRICIA_NODE tree_node;    /* key is name */
>       SaNameT name;
>       SaNameT saAmfAppType;
>       SaAmfAdminStateT saAmfApplicationAdminState;
> @@ -54,11 +58,10 @@ typedef struct avd_app_tag {
>       struct avd_app_type_tag *app_type;
>   } AVD_APP;
>   
> -extern void avd_app_db_add(AVD_APP *app);
> -extern AVD_APP *avd_app_new(const SaNameT *dn);
> -extern void avd_app_delete(AVD_APP *app);
> +typedef std::map<std::string, AVD_APP*> ApplicationMap;
> +extern ApplicationMap *g_app_db;
> +
>   extern AVD_APP *avd_app_get(const SaNameT *app_name);
> -extern AVD_APP *avd_app_getnext(const SaNameT *app_name);
>   
>   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/util.cc 
> b/osaf/services/saf/amf/amfd/util.cc
> --- a/osaf/services/saf/amf/amfd/util.cc
> +++ b/osaf/services/saf/amf/amfd/util.cc
> @@ -1391,13 +1391,14 @@ void avsv_sanamet_init_from_association_
>   }
>   
>   /**
> - * Call this function from GDB to dump the AVD state. Example
> - * below.
> + * Dumps the director state to file
> + * This can be done using GDB:
> + * $ gdb --pid=`pgrep osafamfd` -ex 'call 
> amfd_file_dump("/tmp/osafamfd.dump")' \
> + *           /usr/local/lib/opensaf/osafamfd
>    *
>    * @param path
>    */
> -/* gdb --pid=`pgrep ncs_scap` -ex 'call      avd_file_dump("/tmp/avd.dump")' 
> /usr/local/lib/opensaf/ncs_scap */
> -void avd_file_dump(const char *path)
> +void amfd_file_dump(const char *path)
>   {
>       SaNameT dn = {0};
>       FILE *f = fopen(path, "w");
> @@ -1422,13 +1423,11 @@ void avd_file_dump(const char *path)
>               node_id = node->node_info.nodeId;
>       }
>   
> -     AVD_APP *app;
> -     dn.length = 0;
> -     for (app = avd_app_getnext(&dn); app != NULL; app = 
> avd_app_getnext(&dn)) {
> +     for (ApplicationMap::iterator it = g_app_db->begin(); it != 
> g_app_db->end(); it++) {
> +             const AVD_APP *app = it->second;
>               fprintf(f, "%s\n", app->name.value);
>               fprintf(f, "\tsaAmfApplicationAdminState=%u\n", 
> app->saAmfApplicationAdminState);
>               fprintf(f, "\tsaAmfApplicationCurrNumSGs=%u\n", 
> app->saAmfApplicationCurrNumSGs);
> -             dn = app->name;
>       }
>   
>       AVD_SG *sg;


------------------------------------------------------------------------------
CenturyLink Cloud: The Leader in Enterprise Cloud Services.
Learn Why More Businesses Are Choosing CenturyLink Cloud For
Critical Workloads, Development Environments & Everything In Between.
Get a Quote or Start a Free Trial Today. 
http://pubads.g.doubleclick.net/gampad/clk?id=119420431&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