Main Page | Namespace List | Class Hierarchy | Class List | Directories | File List | Namespace Members | Class Members | File Members

MapRepr.hpp

Go to the documentation of this file.
00001 #ifndef MapRepr_HPP
00002 #define MapRepr_HPP
00003 
00004 #include "common.hpp"
00005 #include "common/Edge.hpp"
00006 #include <vector>
00007 #include <iterator>     //for test
00008 
00009 
00010 namespace Bodon
00011 {
00017    class MapRepr : public std::map<item_t,void*>
00018    {
00019       public:
00020 
00021          MapRepr():std::map<item_t,void*>(){}
00022 
00023          std::map<item_t,void*>::iterator erase(
00024             std::map<item_t,void*>::iterator pos)
00025          {
00026             std::map<item_t,void*>::iterator return_it(pos);
00027             ++return_it;
00028             std::map<item_t,void*>::erase(pos);
00029             return return_it;
00030          }
00031          void* find(item_t label) const
00032          {
00033             std::map<item_t,void*>::const_iterator it(std::map<item_t,void*>::find(label)); 
00034             if(it == end() )
00035                return NULL;
00036             else 
00037                return (*it).second;
00038   
00039          }
00040 
00041          void*& findOrCreate(item_t label)
00042          {
00043             return operator[](label);
00044          }
00045          bool lookup(item_t label, void*& subtrie) const;
00046          void insert(const std::vector<Edge>& new_edges);
00047 
00048          static bool isLookupPreferred()
00049          {
00050             return true;
00051          }
00052    };
00053    inline bool MapRepr::lookup(item_t label, void*& subtrie) const
00054    {
00055       if( (*--end()).first < label)
00056          return false;
00057       else
00058       {
00059          std::map<item_t,void*>::const_iterator it(std::map<item_t,void*>::find(label)); 
00060          if( it == end() )
00061             subtrie = NULL;
00062          else 
00063             subtrie = (*it).second;
00064          return true;
00065       }
00066    }
00067 
00068    inline void MapRepr::insert(const std::vector<Edge>& new_edges)
00069    {
00070       for(std::vector<Edge>::const_iterator it = new_edges.begin();
00071           it != new_edges.end(); ++it)
00072          std::map<item_t,void*>::insert( end(), std::map<item_t,void*>::
00073                                          value_type((*it).first, (*it).second));
00074    }
00075 }
00076 
00077 #endif

Generated on Sun Sep 17 17:50:39 2006 for FIM environment by  doxygen 1.4.4