/* * BeginToEndIndex.h * * Created on: 5. 11. 2014 * Author: Jan Travnicek */ #ifndef _ARBOLOGY_BEGIN_TO_END_INDEX_H_ #define _ARBOLOGY_BEGIN_TO_END_INDEX_H_ #include <alib/set> #include <tree/properties/SubtreeJumpTable.h> #include <tree/ranked/PrefixRankedBarTree.h> #include <tree/ranked/PrefixRankedTree.h> namespace arbology { namespace transform { /** */ class BeginToEndIndex { public: /** * Search for pattern in linear string. * @return set set of occurences */ template < class SymbolType, class RankType > static ext::set < unsigned > transform ( const tree::PrefixRankedBarTree < SymbolType, RankType > & subject, const ext::set < unsigned > & indexes ); template < class SymbolType, class RankType > static ext::set < unsigned > transform ( const tree::PrefixRankedTree < SymbolType, RankType > & subject, const ext::set < unsigned > & indexes ); }; template < class SymbolType, class RankType > ext::set < unsigned > BeginToEndIndex::transform ( const tree::PrefixRankedBarTree < SymbolType, RankType > & subject, const ext::set < unsigned > & indexes ) { ext::vector < int > subjectSubtreeJumpTable = tree::properties::SubtreeJumpTable::compute ( subject ); ext::set < unsigned > res; for ( unsigned index : indexes ) res.insert ( subjectSubtreeJumpTable[index] ); return res; } template < class SymbolType, class RankType > ext::set < unsigned > BeginToEndIndex::transform ( const tree::PrefixRankedTree < SymbolType, RankType > & subject, const ext::set < unsigned > & indexes ) { ext::vector < int > subjectSubtreeJumpTable = tree::properties::SubtreeJumpTable::compute ( subject ); ext::set < unsigned > res; for ( unsigned index : indexes ) res.insert ( subjectSubtreeJumpTable[index] ); return res; } } /* namespace transform */ } /* namespace arbology */ #endif /* _ARBOLOGY_BEGIN_TO_END_INDEX_H_ */