File: gnStringSpec.cpp

package info (click to toggle)
libgenome 1.3.1-7
  • links: PTS, VCS
  • area: main
  • in suites: jessie, jessie-kfreebsd
  • size: 2,156 kB
  • ctags: 1,212
  • sloc: cpp: 10,910; sh: 8,264; makefile: 79
file content (89 lines) | stat: -rw-r--r-- 2,543 bytes parent folder | download | duplicates (8)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
/////////////////////////////////////////////////////////////////////////////
// File:            gnStringSpec.cpp
// Purpose:         implements gnContigSpec for strings
// Description:     stores sequence in memory
// Changes:        
// Version:         libGenome 0.5.1 
// Author:          Aaron Darling 
// Modified by:     
// Copyright:       (c) Aaron Darling 
// Licenses:        See COPYING file for details
/////////////////////////////////////////////////////////////////////////////
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif


#include "libGenome/gnStringSpec.h"
#include <string>
#include <cstring>


using namespace std;
namespace genome {


gnStringSpec::gnStringSpec()
{
	gnContigSpec::Clear();
}

gnStringSpec::gnStringSpec( const string& m_string, gnSeqI start, gnSeqI endI, boolean revComp)
{
	m_seqString = m_string;
	m_start = start;
	gnSeqI actual_len = m_seqString.length();

	//reverse comp has the end b.p. first, then start.  switch them.
	m_start = revComp ? endI : start;
	gnSeqI actual_end = revComp ? start : endI;
	//trim start and end down if they are too big.
	actual_end = actual_end < actual_len ? actual_end : actual_len -1;
	m_start = m_start < actual_len ? m_start : actual_len - 1;
	if(actual_len == 0)
		m_start = 0;
	//if start is after end, we're using a circular sequence.
	m_circular = m_start > actual_end ? true : false;
	//if circular, the length will be different.
	m_length = m_circular ? (actual_len - m_start) + actual_end : actual_end - m_start + 1;

	m_reverseComplement = revComp;
	m_SourceContigIndex = ALL_CONTIGS;
}

gnStringSpec::gnStringSpec( const gnStringSpec& s )
{
	m_seqString = s.m_seqString;
	m_sourceName = s.m_sourceName;
	m_name = s.m_name;
	m_start = s.m_start;
	m_length = s.m_length;
	m_reverseComplement = s.m_reverseComplement;
	m_circular = s.m_circular;
	m_SourceContigIndex = s.m_SourceContigIndex;
}
gnStringSpec::~gnStringSpec()
{
	Clear();
}
void gnStringSpec::Clear()
{
	gnContigSpec::Clear();
	m_seqString = "";
}

gnStringSpec* gnStringSpec::CloneRange( const gnSeqI startI, const gnSeqI len ) const{
	gnStringSpec* destSpec = new gnStringSpec();
	destSpec->m_seqString = m_seqString.substr(m_start + startI, len);
	destSpec->m_sourceName = m_sourceName;
	destSpec->m_name = m_name;
	destSpec->m_start = 0;
	destSpec->m_length = destSpec->m_seqString.length();
	destSpec->m_reverseComplement = m_reverseComplement;
	destSpec->m_circular = m_circular;
	destSpec->m_SourceContigIndex = m_SourceContigIndex;
	return destSpec;
}

}	// end namespace genome