00001 #ifndef DoubleRepr_HPP 00002 #define DoubleRepr_HPP 00003 00004 #include "common.hpp" 00005 #include "datastructures/trie/edgelist/OrderedEdgelist.hpp" 00006 #include "datastructures/trie/edgelist/OffsetIndexVector.hpp" 00007 #include <vector> 00008 //#include <iterator> //for test 00009 00010 00011 namespace Bodon 00012 { 00013 template <class VECTOR_OL, class VECTOR_OI> 00014 class DoubleRepr : public OrderedEdgelist<VECTOR_OL> 00015 { 00016 private: 00017 OffsetIndexVector<VECTOR_OI> offsetindexvector; 00018 00019 public: 00020 DoubleRepr() : OrderedEdgelist<VECTOR_OL>(){} 00021 void clear() 00022 { 00023 OrderedEdgelist<VECTOR_OL>::clear(); 00024 offsetindexvector.clear(); 00025 } 00026 typename VECTOR_OL::iterator erase(typename VECTOR_OL::iterator pos) 00027 { 00028 offsetindexvector.quickErase( (*pos).first ); 00029 return OrderedEdgelist<VECTOR_OL>::erase(pos); 00030 } 00031 00032 bool lookup(item_t label, void*& subtrie) 00033 { 00034 /* 00035 if( edgelist.back().first < label) 00036 return false; 00037 else 00038 { 00039 if(edgelist.front().first > label) 00040 subtrie= NULL; 00041 else 00042 subtrie = offsetindexvector.getEdge(label); 00043 return true; 00044 } 00045 */ 00046 return offsetindexvector.lookup(label, subtrie); 00047 } 00048 void insert(const std::vector<Edge>& new_edges) 00049 { 00050 OrderedEdgelist<VECTOR_OL>::insert(new_edges); 00051 offsetindexvector.insert(new_edges); 00052 } 00053 }; 00054 } 00055 00056 #endif