00001 #include "destroyer.h" 00002 #include "generaldata.h" 00003 #include "featuredata.h" 00004 #include "readdata.h" 00005 #include <iostream> 00006 00007 using namespace std; 00008 00009 Destroyer::Destroyer( TrapperDoc* doc_ ) 00010 : doc(doc_) 00011 { 00012 types = GeneralMaker::listRegistered(); 00013 } 00014 00015 void Destroyer::destroy(db_recno_t recno) 00016 { 00017 // cerr<<"Destroying read with recno "<<recno<<endl; 00018 //First, destroy all features 00019 for( list<string>::iterator type_it = types.begin(); type_it != types.end(); ++type_it ) { 00020 00021 GeneralData * data = GeneralMaker::newData( *type_it ); 00022 FeatureData * fdata = dynamic_cast<FeatureData *>( data ); 00023 if (fdata) { 00024 // Database::Creator<FeatureData> a_creator(doc, *type_it); 00025 Database::SecondaryIterator<FeatureData> featIt( "readRecno", doc, *type_it ); 00026 00027 //Set iterator key read recno 00028 featIt.key()->setReadRecno( recno ); 00029 00030 if ( featIt.set() == 0 ) {//Read has such feature 00031 int ret = featIt.delCurrentInclDups(); 00032 assert( ret == 0 ); 00033 // do { 00034 // //Destroy feature 00035 // cerr<<"\tDestroying "<<*type_it<<endl; 00036 // a_creator.data()->setRecno( featIt.answer()->getRecno() ); 00037 // cerr<<"Recno set"<<endl; 00038 // a_creator.destroy(); 00039 // cerr<<"\tDone"<<endl; 00040 00041 // } while ((ret = featIt.nextdup())== 0); 00042 00043 } 00044 00045 } 00046 00047 00048 delete data; 00049 } 00050 00051 //Destroy read itself 00052 // cerr<<"\tDestroying Actual read"<<endl; 00053 Database::Creator<ReadData> a_creator(doc, "ReadData"); 00054 a_creator.data()->setRecno( recno ); 00055 a_creator.destroy(); 00056 00057 }