source: branches/profile/PRIMER_DESIGN/PRD_Item.cxx

Last change on this file was 6366, checked in by westram, 14 years ago
  • fixed whitespace (scripted)
  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 2.2 KB
Line 
1#include "PRD_Item.hxx"
2#include "PRD_SequenceIterator.hxx"
3#include <cstdlib>
4#include <cstring>
5
6using namespace std;
7
8//
9// Constructors
10//
11Item::Item(PRD_Sequence_Pos pos_, PRD_Sequence_Pos offset_, int length_, int ratio_, int temperature_, Item *next_)
12{
13    end_pos        = pos_;
14    start_pos      = -1;
15    offset         = offset_;
16    length         = length_;
17    GC_ratio       = ratio_;
18    temperature    = temperature_;
19    next           = next_;
20}
21Item::Item ()
22{
23    end_pos        = -1;
24    start_pos      = -1;
25    offset         = -1;
26    length         = -1;
27    GC_ratio       = -1;
28    temperature    = -1;
29    next           = NULL;
30}
31
32
33//
34// print
35//
36void Item::print (const char *prefix_, const char *suffix_)
37{
38    printf("%s[(%li,%li,%i),(%i,%i)]%s", prefix_, start_pos, offset, length, GC_ratio, temperature, suffix_);
39}
40
41
42//
43// sprint
44//
45int Item::sprint (char *buf, const char *primer, const char *suffix_,   int max_primer_length, int max_position_length, int max_length_length)
46{
47    return sprintf(buf,  "| %-*s %*li %*i %3i %3i%s",
48                   max_primer_length, primer,
49                   max_position_length, start_pos+1, // +1 for biologists ;-)
50                   max_length_length, length,
51                   GC_ratio, temperature, suffix_);
52}
53
54inline char *PRD_strdup(const char *s) {
55    size_t  len    = strlen(s);
56    char   *result = (char*)malloc(len+1);
57    strcpy(result, s);
58    return result;
59}
60
61//
62// getPrimerSequence
63//
64// note : the sequence isn't stored in the Item, therefore must be given
65//
66char* Item::getPrimerSequence(const char *sequence_)
67{
68    char *primer;
69    if (length <= 0) return PRD_strdup("Item::getPrimerSequence : length <= 0 :(");
70
71    primer = (char *)malloc((size_t)length+1);    // allocate memory ( needs to be given back via free() )
72    SequenceIterator *iterator = new SequenceIterator(sequence_, end_pos, SequenceIterator::IGNORE,   length, SequenceIterator::BACKWARD);  // init iterator
73
74    for (int i = length-1; i >= 0; --i)   // grab as many bases as length is
75        primer[i] = iterator->nextBase();
76    primer[length] = '\x00';              // finish string
77
78    start_pos = iterator->pos;
79
80    delete iterator;                      // give up iterator
81
82    return primer;
83}
Note: See TracBrowser for help on using the repository browser.