const indri::index::TermList* indri::index::MemoryIndex::termList( lemur::api::DOCID_T documentID ) { int documentIndex = documentID - documentBase(); if( documentIndex < 0 || documentIndex >= (int)_documentData.size() ) return 0; const DocumentData& data = _documentData[documentIndex]; UINT64 documentOffset = data.offset; indri::utility::Buffer* documentBuffer = 0; std::list<indri::utility::Buffer*>::const_iterator iter; for( iter = _termLists.begin(); iter != _termLists.end(); ++iter ) { if( documentOffset < (*iter)->position() ) { documentBuffer = (*iter); break; } documentOffset -= (*iter)->position(); } assert( documentBuffer ); TermList* list = new TermList(); list->read( documentBuffer->front() + documentOffset, data.byteLength ); return list; }