int32_t SegmentMerger::mergeFields() { //Func - Merge the fields of all segments //Pre - true //Post - The field infos and field values of all segments have been merged. //Create a new FieldInfos fieldInfos = _CLNEW FieldInfos(); // merge field names //Condition check to see if fieldInfos points to a valid instance CND_CONDITION(fieldInfos != NULL, "Memory allocation for fieldInfos failed"); IndexReader* reader = NULL; int32_t docCount = 0; //Iterate through all readers for (uint32_t i = 0; i < readers.size(); i++) { //get the i-th reader reader = readers[i]; //Condition check to see if reader points to a valid instance CND_CONDITION(reader != NULL,"No IndexReader found"); StringArrayWithDeletor tmp; tmp.clear(); reader->getFieldNames(IndexReader::TERMVECTOR_WITH_POSITION_OFFSET, tmp); addIndexed(reader, fieldInfos, tmp, true, true, true); tmp.clear(); reader->getFieldNames(IndexReader::TERMVECTOR_WITH_POSITION, tmp); addIndexed(reader, fieldInfos, tmp, true, true, false); tmp.clear(); reader->getFieldNames(IndexReader::TERMVECTOR_WITH_OFFSET, tmp); addIndexed(reader, fieldInfos, tmp, true, false, true); tmp.clear(); reader->getFieldNames(IndexReader::TERMVECTOR, tmp); addIndexed(reader, fieldInfos, tmp, true, false, false); tmp.clear(); reader->getFieldNames(IndexReader::INDEXED, tmp); addIndexed(reader, fieldInfos, tmp, false, false, false); tmp.clear(); reader->getFieldNames(IndexReader::UNINDEXED, tmp); if (tmp.size() > 0) { TCHAR** arr = _CL_NEWARRAY(TCHAR*,tmp.size()+1); tmp.toArray(arr); fieldInfos->add((const TCHAR**)arr, false); _CLDELETE_ARRAY(arr); //no need to delete the contents, since tmp is responsible for it } }
int32_t SegmentMerger::mergeFields() { //Func - Merge the fields of all segments //Pre - true //Post - The field infos and field values of all segments have been merged. if (!mergeDocStores) { // When we are not merging by doc stores, that means // all segments were written as part of a single // autoCommit=false IndexWriter session, so their field // name -> number mapping are the same. So, we start // with the fieldInfos of the last segment in this // case, to keep that numbering. assert(readers[readers.size()-1]->instanceOf(SegmentReader::getClassName())); assert(false);//check last...and remove if correct... SegmentReader* sr = (SegmentReader*)readers[readers.size()-1]; fieldInfos = sr->fieldInfos()->clone(); } else { //Create a new FieldInfos fieldInfos = _CLNEW FieldInfos(); // merge field names } //Condition check to see if fieldInfos points to a valid instance CND_CONDITION(fieldInfos != NULL,"Memory allocation for fieldInfos failed"); IndexReader* reader = NULL; //Iterate through all readers for (uint32_t i = 0; i < readers.size(); i++){ //get the i-th reader reader = readers[i]; //Condition check to see if reader points to a valid instance CND_CONDITION(reader != NULL,"No IndexReader found"); if (reader->instanceOf(SegmentReader::getClassName())) { SegmentReader* segmentReader = (SegmentReader*) reader; for (size_t j = 0; j < segmentReader->getFieldInfos()->size(); j++) { FieldInfo* fi = segmentReader->getFieldInfos()->fieldInfo(j); fieldInfos->add(fi->name, fi->isIndexed, fi->storeTermVector, fi->storePositionWithTermVector, fi->storeOffsetWithTermVector, !reader->hasNorms(fi->name), fi->storePayloads); } } else { StringArrayWithDeletor tmp; tmp.clear(); reader->getFieldNames(IndexReader::TERMVECTOR_WITH_POSITION_OFFSET, tmp); addIndexed(reader, fieldInfos, tmp, true, true, true, false); tmp.clear(); reader->getFieldNames(IndexReader::TERMVECTOR_WITH_POSITION, tmp); addIndexed(reader, fieldInfos, tmp, true, true, false, false); tmp.clear(); reader->getFieldNames(IndexReader::TERMVECTOR_WITH_OFFSET, tmp); addIndexed(reader, fieldInfos, tmp, true, false, true, false); tmp.clear(); reader->getFieldNames(IndexReader::TERMVECTOR, tmp); addIndexed(reader, fieldInfos, tmp, true, false, false, false); tmp.clear(); reader->getFieldNames(IndexReader::STORES_PAYLOADS, tmp); addIndexed(reader, fieldInfos, tmp, false, false, false, true); tmp.clear(); reader->getFieldNames(IndexReader::INDEXED, tmp); addIndexed(reader, fieldInfos, tmp, false, false, false, false); tmp.clear(); reader->getFieldNames(IndexReader::UNINDEXED, tmp); if ( tmp.size() > 0 ){ TCHAR** arr = _CL_NEWARRAY(TCHAR*,tmp.size()+1); tmp.toArray_nullTerminated(arr); fieldInfos->add((const TCHAR**)arr, false); _CLDELETE_ARRAY(arr); //no need to delete the contents, since tmp is responsible for it } } }
int main() { Node * head = NULL; FILE * fin = NULL; fin = openFile(); createWordNodes(fin,&head); printf("\n\n-----------Printing Original List-----------\n\n"); printList(head); printf("\n\n\nBREAK\n\n\n"); char temp[6] = "frank"; Word * tempWord = createWordStruct(temp); addOrdered(tempWord, &head); printf("\n\n-----------Printing List Adding Ordered the name \"frank\"-----------\n\n"); printList(head); printf("\n\n\nBREAK\n\n\n"); char temp1[6] = "AAAAA"; tempWord = createWordStruct(temp1); addFirst(tempWord, &head); printf("\n\n-----------Printing List Adding First the word \"AAAAA\"-----------\n\n"); printList(head); printf("\n\n\nBREAK\n\n\n"); char temp2[6] = "ZZZZZ"; tempWord = createWordStruct(temp2); addLast(tempWord, &head); printf("\n\n-----------Printing List Adding Last the word \"ZZZZZ\"-----------\n\n"); printList(head); printf("\n\n\nBREAK\n\n\n"); char temp3[6] = "XXXXX"; tempWord = createWordStruct(temp3); addIndexed(tempWord, &head, 2); char prevWord[MAX], postWord[MAX]; strcpy(prevWord,((Word*)(head->next->data))->wrd); strcpy(postWord,((Word*)(head->next->next->next->data))->wrd); printf("\n\n-----------Printing List Adding at Index #2 the word \"XXXXX\"-----------\n\n"); printf("\n\n-----------It should be between the words \"%s\" and \"%s\"-----------\n\n", prevWord, postWord); printList(head); printf("\n\n\nBREAK\n\n\n"); removeFirst(&head); printf("\n\n-----------Printing List Removing First which will be the word \"AAAAA\"-----------\n\n"); printList(head); printf("\n\n\nBREAK\n\n\n"); removeLast(&head); printf("\n\n-----------Printing List Removing Last which will be the word \"ZZZZZ\"-----------\n\n"); printList(head); printf("\n\n\nBREAK\n\n\n"); printf("\n\n-----------Attempting to remove at index out of bounds-----------\n\n"); removeIndex(&head,-30); char word2Remove[MAX]; strcpy(word2Remove,((Word*)(head->next->next->data))->wrd); printf("\n\n-----------Attempting to remove at index 2 which will be: \"%s\"-----------\n\n", word2Remove); removeIndex(&head, 2); printf("\n\n-----------Printing list having removed %s-----------\n\n", word2Remove); printList(head); printf("\n\n\nBREAK\n\n\n"); printf("\n\n-----------Clearing (freeing) the entire list-----------\n\n"); clearList(&head); printf("\n\n-----------Attempting to print empty list-----------\n\n"); printList(head); printf("\n\n\nBREAK\n\n\n"); printf("\n\n-----------GOODBYE-----------\n\n"); fclose(fin); return 0; }// end main