Please find comments inline with [Praveen]. Thanks, Praveen
On 26-Mar-14 4:57 PM, Hans Nordeback wrote: > osaf/services/saf/amf/amfd/include/db_template.h | 63 > ++++++++++++++++++++++++ > 1 files changed, 63 insertions(+), 0 deletions(-) > > > diff --git a/osaf/services/saf/amf/amfd/include/db_template.h > b/osaf/services/saf/amf/amfd/include/db_template.h > new file mode 100644 > --- /dev/null > +++ b/osaf/services/saf/amf/amfd/include/db_template.h > @@ -0,0 +1,63 @@ > +/* -*- OpenSAF -*- > + * > + * (C) Copyright 2014 The OpenSAF Foundation > + * > + * This program is distributed in the hope that it will be useful, but > + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY > + * or FITNESS FOR A PARTICULAR PURPOSE. This file and program are licensed > + * under the GNU Lesser General Public License Version 2.1, February 1999. > + * The complete license can be accessed from the following location: > + * http://opensource.org/licenses/lgpl-license.php > + * See the Copying file included with the OpenSAF distribution for full > + * licensing terms. > + * > + * Author(s): Ericsson AB > + * > + */ > +#ifndef DB_TEMPLATE_H > +#define DB_TEMPLATE_H > + > +#include <map> > +#include <string> > + > +template <typename T> > +class AmfDb { > + public: > + void insert(T *obj); > + void erase(T *obj); > + T *find(const SaNameT *name); > + > + typedef std::map<std::string, T*> AmfDbMap; > + typedef typename AmfDbMap::const_iterator const_iterator; > + > + const_iterator begin() const {return db.begin();} > + const_iterator end() const {return db.end();} > + > + private: > + AmfDbMap db; > +}; > + > +template <typename T> > +void AmfDb<T>::insert(T *obj) { > + std::string name((const char*)obj->name.value, obj->name.length); > + db[name] = obj; > +} > + [Praveen] Patricia tree returns failure for duplicate entry or if addition itself fails. Don't we require such return code here? We check return code after addition. Also can we make argument as constant. > +template <typename T> > +void AmfDb<T>::erase(T *obj) { > + std::string name((const char*)obj->name.value, obj->name.length); > + typename AmfDbMap::iterator it = db.find(name); > + db.erase(it); > +} [Praveen] If db.find returns NULL then this function should return error otherwise it crashes. something like this: if (it == db.end()) return ERROR; db.erase(it); Also can we make argument as constant. > + > +template <typename T> > +T *AmfDb<T>::find(const SaNameT *dn) { > + std::string name((const char*)dn->value, dn->length); > + typename AmfDbMap::iterator it = db.find(name); > + if (it == db.end()) > + return NULL; > + else > + return it->second; > +} > + > +#endif /* DB_TEMPLATE_H */ ------------------------------------------------------------------------------ _______________________________________________ Opensaf-devel mailing list Opensaf-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/opensaf-devel