readdata.cpp

Go to the documentation of this file.
00001 /*******************************************************************************
00002  *                                                                             *
00003  *   Copyright (C) 2003  Erik Sjolund,  (<html>Erik Sj&ouml;lund</html>)       *
00004  *                       Center for Genomics and Bioinformatics,               *
00005  *                       Karolinska Institutet,                                *
00006  *                       Stockholm,                                            *
00007  *                       Sweden                                                *
00008  *                                                                             *
00009  *  Author: Erik Sjolund                                                       *
00010  *  Email: erik.sjolund@adivo.se                                               *
00011  *                                                                             *
00012  *******************************************************************************
00013  */
00014 #include "readdata.h"
00015 #include <map>
00016 #include "trappervector.h"
00017 #include <ostream>
00018 
00019 using namespace std;
00020 
00021 ReadData::ReadData( const ReadData& other ) : GeneralData(other)
00022 {
00023   s = other.s;//Works since StorageData is trivial
00024 
00025 //   name_ = other.name_;
00026 //   mate_ = other.mate_;
00027 //   matelen_ = other.matelen_;
00028 //   strand_ = other.strand_;
00029 //   beginGood_ = other.beginGood_;
00030 //   endGood_ = other.endGood_;
00031 //   tc_vec = other.tc_vec;
00032 }
00033 
00034 
00035 ReadData::~ReadData()
00036 {}
00037 
00038 void ReadData::print_debug_info()
00039 {
00040   cerr<<"This is class "<<uniqueName()<<endl;
00041   cerr<<"recno: "<<getRecno()<<endl;
00042   cerr<<"row: "<<row()<<endl;
00043   cerr<<"startPos: "<<startPos()<<endl;
00044   cerr<<"endPos: "<<endPos()<<endl;
00045 }
00046 
00047 void ReadData::readStream( QDataStream & stream )
00048 {
00049   QIODevice * dev = stream.device();
00050   Q_ASSERT( dev );
00051   stream.readRawBytes( ( char * ) &s, sizeof ( StorageData ) );  
00052 
00053 //   QString tmp;
00054 //   stream>>tmp;
00055 //   name_ = tmp.ascii();
00056 //   stream>>tmp;
00057 //   mate_ = tmp.ascii();
00058 //   stream>>matelen_;
00059 //   stream>>tmp;
00060 //   strand_ = tmp.ascii();
00061 //   stream>>beginGood_;
00062 //   stream>>endGood_;
00063 //   tc_vec.stlVector().clear();
00064 //   stream>>tc_vec;
00065 }
00066 
00067 void ReadData::writeStream( QDataStream & stream )
00068 {
00069   QIODevice * dev = stream.device();
00070   Q_ASSERT( dev );
00071   if ( ! ( IO_WriteOnly & dev->mode() ) )
00072     {
00073       cerr << "data stream should be writeonly" << endl;
00074       exit(1);
00075     }
00076   stream.writeRawBytes( ( char * ) &s, sizeof ( StorageData ) );
00077 
00078 //   QString tmp;
00079 //   tmp = name_;
00080 //   stream<<tmp;
00081 //   tmp = mate_;
00082 //   stream<<tmp;
00083 //   stream<<matelen_;
00084 //   tmp = strand_;
00085 //   stream<<tmp;
00086 //   stream<<beginGood_;
00087 //   stream<<endGood_;
00088 //   stream<<tc_vec;
00089 }
00090 
00091 void ReadData::readAttributes( const QXmlAttributes& attr )
00092 {
00093   if ( attr.value("row") != "" ) {
00094     QString rowPosStr = attr.value("row");
00095     s.row = rowPosStr.toLong();
00096   }
00097   if ( attr.value("startPos") != "" ) {
00098     QString startPosStr = attr.value("startPos");
00099     s.startPos = startPosStr.toLong();
00100   }
00101   if ( attr.value("endPos") != "" ) {
00102     QString endPosStr = attr.value("endPos");
00103     s.endPos = endPosStr.toLong();
00104 //     endGood_ = s.endPos - s.startPos;
00105   }
00106 //   if ( attr.value("name") != "" ) {
00107 //     name_ = attr.value("name").ascii();
00108 //   }
00109 //   if ( attr.value("mate") != "" ) {
00110 //     mate_ = attr.value("mate").ascii();
00111 //   }
00112 //   if ( attr.value("matelen") != "" ) {
00113 //     matelen_ = attr.value("matelen").toInt();
00114 //   }
00115 //   if ( attr.value("strand") != "" ) {
00116 //     strand_ = attr.value("strand").ascii();
00117 //   }
00118 //   if ( attr.value("beginGood") != "" ) {
00119 //     beginGood_ = attr.value("beginGood").toInt();
00120 //   }
00121 //   if ( attr.value("endGood") != "" ) {
00122 //     endGood_ = attr.value("endGood").toInt();
00123 //   }
00124 //   if ( attr.value("tc") != "" ) {
00125 //     QString str = attr.value("tc");
00126 //     tc_vec.readString(str);
00127 //   }
00128 
00129 }
00130 
00131 void ReadData::writeXml( ostream& stream )
00132 {
00133   stream<<"<ReadData "
00134         <<"row=\""<<s.row<<"\" "
00135         <<"startPos=\""<<s.startPos<<"\" "
00136         <<"endPos=\""<<s.endPos<<"\" "
00137 //         <<"name=\""<<name_<<"\" "
00138 //         <<"mate=\""<<mate_<<"\" "
00139 //         <<"matelen=\""<<matelen_<<"\" "
00140 //         <<"strand=\""<<strand_<<"\" "
00141 //         <<"beginGood=\""<<beginGood_<<"\" "
00142 //         <<"endGood=\""<<endGood_<<"\"";
00143 //   if ( tc_vec.stlVector().size() > 0 ) {
00144 //     stream<<" tc=\"";
00145 //     for( size_t i = 0; i < tc_vec.stlVector().size(); i++ ) {
00146 //       stream<<' '<<tc_vec.stlVector()[i];
00147 //     }
00148 //     stream<<"\"";
00149 //   }
00150 //   stream<<">\n";
00151         <<">\n";
00152 }
00153 
00154 TrDb::IndexMap ReadData::getIndexMap()
00155 {
00156   TrDb::IndexMap iMap;
00157   TrDb::Index i = {
00158     &ReadData::bt_compare_rowPos,
00159     &ReadData::getRowPos,
00160     QString("pos"),
00161     NULL
00162   };
00163   iMap.insert( make_pair( i.name.ascii(), i ) );
00164   
00165   TrDb::Index i2 = {
00166     &ReadData::bt_compare_end,
00167     &ReadData::getRowPos,
00168     QString("end"),
00169     NULL
00170   };
00171   iMap.insert( make_pair( i2.name.ascii(), i2 ) );
00172 
00173 //   TrDb::Index i3 = {
00174 //     &ReadData::bt_compare_name,
00175 //     &ReadData::getName,
00176 //     QString("name"),
00177 //     NULL
00178 //   };
00179 //   iMap.insert( make_pair( i3.name.ascii(), i3 ) );
00180   
00181   TrDb::Index i4 = {
00182     &ReadData::bt_compare_start,
00183     &ReadData::getRowPos,
00184     QString("start"),
00185     NULL
00186   };
00187   iMap.insert( make_pair( i4.name.ascii(), i4 ) );
00188 
00189   return iMap;
00190 }
00191 
00192 int ReadData::bt_compare_rowPos( DB * /* not used */, const DBT *dbt1, const DBT *dbt2)
00193 {
00194   /* order after row and then after end position */
00195   
00196   ReadData::StorageData * seqData1 = ( ReadData::StorageData *) dbt1->data;
00197   ReadData::StorageData * seqData2 = ( ReadData::StorageData *) dbt2->data;
00198   if ( seqData1->row > seqData2->row )
00199     return 1;
00200   if ( seqData1->row < seqData2->row )
00201     return -1;
00202   if ( seqData1->endPos == seqData2->endPos )
00203     return 0;
00204   if ( seqData1->endPos > seqData2->endPos )
00205     return 1;
00206   if ( seqData1->endPos < seqData2->endPos )
00207     return -1;
00208   
00209   /* should never reach this point */
00210   return 0;
00211 }
00212 
00213 int ReadData::bt_compare_end( DB * /* not used */, const DBT *dbt1, const DBT *dbt2)
00214 {
00215   /* order after end position */
00216   
00217   ReadData::StorageData * seqData1 = ( ReadData::StorageData *) dbt1->data;
00218   ReadData::StorageData * seqData2 = ( ReadData::StorageData *) dbt2->data;
00219   if ( seqData1->endPos > seqData2->endPos )
00220     return 1;
00221   if ( seqData1->endPos < seqData2->endPos )
00222     return -1;
00223   if ( seqData1->endPos == seqData2->endPos )
00224     return 0;
00225   
00226   /* should never reach this point */
00227   return 0;
00228 }
00229 
00230 int ReadData::bt_compare_start( DB * /* not used */, const DBT *dbt1, const DBT *dbt2)
00231 {
00232   /* order after end position */
00233   
00234   ReadData::StorageData * seqData1 = ( ReadData::StorageData *) dbt1->data;
00235   ReadData::StorageData * seqData2 = ( ReadData::StorageData *) dbt2->data;
00236   if ( seqData1->startPos > seqData2->startPos )
00237     return 1;
00238   if ( seqData1->startPos < seqData2->startPos )
00239     return -1;
00240   if ( seqData1->startPos == seqData2->startPos )
00241     return 0;
00242   
00243   /* should never reach this point */
00244   return 0;
00245 }
00246 
00247 // int ReadData::bt_compare_name( DB * /* not used */, const DBT *dbt1, const DBT *dbt2)
00248 // {
00249 //   /* order after end position */
00250   
00251 //   char* seqData1 = ( char* ) dbt1->data;
00252 //   char* seqData2 = ( char* ) dbt2->data;
00253 
00254 // //   cerr<<seqData1<<'\t'<<seqData2<<'\t'<<strcmp(seqData1, seqData2)<<endl;
00255   
00256 //   return strcmp(seqData1, seqData2);
00257 // }
00258 
00259 int ReadData::getRowPos(Db * /* not used */, const Dbt * /* not used */,
00260                         const Dbt *pdata, Dbt *skey)
00261 {
00262   //  memset(skey, 0, sizeof(Dbt));
00263   //  ReadData::StorageData * data = ( ReadData::StorageData * ) pdata->get_data();
00264   //  skey->set_data( ( u_int8_t * ) (& (data->readRecno)) );
00265   // skey->set_size(sizeof( db_recno_t ));
00266   
00267   memset(skey, 0, sizeof(Dbt));
00268   skey->set_data( pdata->get_data() );
00269   skey->set_size(sizeof( struct ReadData::StorageData ));
00270   return(0);
00271 }
00272 
00273 // int ReadData::getName(Db * /* not used */, const Dbt * /* not used */,
00274 //                         const Dbt *pdata, Dbt *skey)
00275 // {
00276   
00277 //   memset(skey, 0, sizeof(Dbt));
00278 
00279 // //   ReadData* tmp = new ReadData();
00280 // //   Database::setFromDbt(pdata, tmp);
00281 
00282 // //   skey->set_data( (void*)tmp->name().c_str() );
00283 // //   skey->set_size(strlen( tmp->name().c_str() ) + 1 );
00284   
00285 //   ReadData tmp;
00286 //   Database::setFromDbt(pdata, &tmp);
00287 //   char* name = (char*)malloc(sizeof(char)*(tmp.name().length() + 1));
00288 //   strcpy(name, tmp.name().c_str());
00289 //   assert( name[ tmp.name().length() ] == '\0' );
00290 //   skey->set_flags( DB_DBT_APPMALLOC );
00291 //   skey->set_data( (void*)name ); 
00292 //   skey->set_size(sizeof(char)*(strlen(name) + 1) );
00293   
00294 
00295 //   return 0;
00296 // }

Generated on Fri Jul 17 20:19:29 2009 for ngsview by  doxygen 1.5.1