readmetadata.cpp

Go to the documentation of this file.
00001 //Copyright (C) 2007 Erik Arner, erik.arner@gmail.com
00002 
00003 #include "readmetadata.h"
00004 // #include <map>
00005 #include "trappervector.h"
00006 #include <ostream>
00007 
00008 using namespace std;
00009 
00010 
00011 
00012 ReadMetaData::ReadMetaData( const ReadMetaData& other ) : GeneralData(other)
00013 {
00014   readRecno = other.readRecno;
00015   name_ = other.name_;
00016   mate_ = other.mate_;
00017   matelen_ = other.matelen_;
00018   strand_ = other.strand_;
00019   beginGood_ = other.beginGood_;
00020   endGood_ = other.endGood_;
00021   tc_vec = other.tc_vec;
00022 }
00023 
00024 
00025 ReadMetaData::~ReadMetaData()
00026 {}
00027 
00028 void ReadMetaData::print_debug_info()
00029 {
00030   cerr<<"This is class "<<uniqueName()<<endl;
00031   cerr<<"recno: "<<getRecno()<<endl;
00032 }
00033 
00034 void ReadMetaData::readStream( QDataStream & stream )
00035 {
00036   QIODevice * dev = stream.device();
00037   Q_ASSERT( dev );
00038 //   stream.readRawBytes( ( char * ) &s, sizeof ( StorageData ) );  
00039 
00040   stream>>readRecno;
00041   QString tmp;
00042   stream>>tmp;
00043   name_ = tmp.ascii();
00044   stream>>tmp;
00045   mate_ = tmp.ascii();
00046   stream>>matelen_;
00047   stream>>tmp;
00048   strand_ = tmp.ascii();
00049   stream>>beginGood_;
00050   stream>>endGood_;
00051   tc_vec.stlVector().clear();
00052   stream>>tc_vec;
00053 }
00054 
00055 void ReadMetaData::writeStream( QDataStream & stream )
00056 {
00057   QIODevice * dev = stream.device();
00058   Q_ASSERT( dev );
00059   if ( ! ( IO_WriteOnly & dev->mode() ) )
00060     {
00061       cerr << "data stream should be writeonly" << endl;
00062       exit(1);
00063     }
00064 //   stream.writeRawBytes( ( char * ) &s, sizeof ( StorageData ) );
00065   stream<<readRecno;
00066 
00067   QString tmp;
00068   tmp = name_;
00069   stream<<tmp;
00070   tmp = mate_;
00071   stream<<tmp;
00072   stream<<matelen_;
00073   tmp = strand_;
00074   stream<<tmp;
00075   stream<<beginGood_;
00076   stream<<endGood_;
00077   stream<<tc_vec;
00078 }
00079 
00080 void ReadMetaData::readAttributes( const QXmlAttributes& attr )
00081 {
00082   if ( attr.value("name") != "" ) {
00083     name_ = attr.value("name").ascii();
00084   }
00085   if ( attr.value("mate") != "" ) {
00086     mate_ = attr.value("mate").ascii();
00087   }
00088   if ( attr.value("matelen") != "" ) {
00089     matelen_ = attr.value("matelen").toInt();
00090   }
00091   if ( attr.value("strand") != "" ) {
00092     strand_ = attr.value("strand").ascii();
00093   }
00094   if ( attr.value("beginGood") != "" ) {
00095     beginGood_ = attr.value("beginGood").toInt();
00096   }
00097   if ( attr.value("endGood") != "" ) {
00098     endGood_ = attr.value("endGood").toInt();
00099   }
00100   if ( attr.value("tc") != "" ) {
00101     QString str = attr.value("tc");
00102     tc_vec.readString(str);
00103   }
00104 
00105 }
00106 
00107 void ReadMetaData::writeXml( ostream& stream )
00108 {
00109   stream<<"<ReadMetaData "
00110         <<"name=\""<<name_<<"\" "
00111         <<"mate=\""<<mate_<<"\" "
00112         <<"matelen=\""<<matelen_<<"\" "
00113         <<"strand=\""<<strand_<<"\" "
00114         <<"beginGood=\""<<beginGood_<<"\" "
00115         <<"endGood=\""<<endGood_<<"\"";
00116   if ( tc_vec.stlVector().size() > 0 ) {
00117     stream<<" tc=\"";
00118     for( size_t i = 0; i < tc_vec.stlVector().size(); i++ ) {
00119       stream<<' '<<tc_vec.stlVector()[i];
00120     }
00121     stream<<"\"";
00122   }
00123   stream<<">\n";
00124 }
00125 
00126 TrDb::IndexMap ReadMetaData::getIndexMap()
00127 {
00128 
00129   TrDb::Index i1 = {
00130     &ReadMetaData::bt_compare_name,
00131     &ReadMetaData::getName,
00132     QString("name"),
00133     NULL
00134   };
00135   iMap.insert( make_pair( i1.name.ascii(), i1 ) );
00136   
00137   return iMap;
00138 }
00139 
00140 int ReadMetaData::bt_compare_name( DB * /* not used */, const DBT *dbt1, const DBT *dbt2)
00141 {
00142   /* order after end position */
00143   
00144   char* seqData1 = ( char* ) dbt1->data;
00145   char* seqData2 = ( char* ) dbt2->data;
00146 
00147 //   cerr<<seqData1<<'\t'<<seqData2<<'\t'<<strcmp(seqData1, seqData2)<<endl;
00148   
00149   return strcmp(seqData1, seqData2);
00150 }
00151 
00152 int ReadMetaData::getName(Db * /* not used */, const Dbt * /* not used */,
00153                         const Dbt *pdata, Dbt *skey)
00154 {
00155   
00156   memset(skey, 0, sizeof(Dbt));
00157 
00158   
00159   ReadMetaData tmp;
00160   Database::setFromDbt(pdata, &tmp);
00161   char* name = (char*)malloc(sizeof(char)*(tmp.name().length() + 1));
00162   strcpy(name, tmp.name().c_str());
00163   assert( name[ tmp.name().length() ] == '\0' );
00164   skey->set_flags( DB_DBT_APPMALLOC );
00165   skey->set_data( (void*)name ); 
00166   skey->set_size(sizeof(char)*(strlen(name) + 1) );
00167   
00168 
00169   return 0;
00170 }

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