00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00012
#ifndef _gnFASSource_h_
00013
#define _gnFASSource_h_
00014
00015
#include "gn/gnDefs.h"
00016
00017
#include <string>
00018
#include <fstream>
00019
#include <vector>
00020
#include "gn/gnFileSource.h"
00021
#include "gn/gnSequence.h"
00022
00023 #define FAS_LINE_WIDTH 80
00024
00032 class GNDLLEXPORT gnFASSource :
public gnFileSource
00033 {
00034
public:
00038 gnFASSource();
00043 gnFASSource(
const gnFASSource& s );
00047 ~gnFASSource();
00051 gnFASSource*
Clone()
const;
00052
00053
uint32 GetContigListLength()
const;
00054
boolean HasContig(
const string& name )
const;
00055
uint32 GetContigID(
const string& name )
const;
00056 string
GetContigName(
const uint32 i )
const;
00057
gnSeqI GetContigSeqLength(
const uint32 i )
const;
00058
gnFileContig* GetContig(
const uint32 i )
const;
00059
00060
boolean SeqRead(
const gnSeqI start,
char* buf,
gnSeqI& bufLen,
const uint32 contigI=ALL_CONTIGS ) ;
00061
00076
static void Write(
gnSequence& sequence,
const string& filename,
boolean write_coords =
true,
boolean enforce_unique_names =
true);
00077
00091
static void Write(
gnSequence& sequence, ostream& m_ostream,
boolean write_coords =
true,
boolean enforce_unique_names =
true);
00092
00099
static boolean Write(
gnBaseSource *source,
const string& filename);
00100
00101
gnGenomeSpec *
GetSpec()
const;
00102
00103
gnFileContig*
GetFileContig(
const uint32 contigI )
const;
00104
private:
00105
boolean SeqSeek(
const gnSeqI start,
const uint32 contigI,
uint64& startPos,
uint64& readableBytes );
00106
boolean SeqStartPos(
const gnSeqI start,
gnFileContig& contig,
uint64& startPos,
uint64& readableBytes );
00107
boolean ParseStream( istream& fin );
00108
00109 vector< gnFileContig* > m_contigList;
00110 };
00111
00112
inline
00113 gnFASSource*
gnFASSource::Clone()
const
00114
{
00115
return new gnFASSource( *
this );
00116 }
00117
00118
inline
00119 uint32 gnFASSource::GetContigListLength()
const
00120
{
00121
return m_contigList.size();
00122 }
00123
00124
#endif
00125