source: tags/ms_r17q1/PRIMER_DESIGN/PRD_Pair.cxx

Last change on this file was 15176, checked in by westram, 10 years ago
  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 2.8 KB
Line 
1// =============================================================== //
2//                                                                 //
3//   File      : PRD_Pair.cxx                                      //
4//   Purpose   :                                                   //
5//                                                                 //
6//   Coded by Wolfram Foerster in February 2001                    //
7//   Institute of Microbiology (Technical University Munich)       //
8//   http://www.arb-home.de/                                       //
9//                                                                 //
10// =============================================================== //
11
12#include "PRD_Pair.hxx"
13#include <arb_mem.h>
14#include <cstdlib>
15
16using namespace std;
17
18//
19// Constructors
20//
21Pair::Pair (Item *one_, Item *two_, double rating_)
22{
23  one    = one_;
24  two    = two_;
25  rating = rating_;
26}
27
28Pair::Pair ()
29{
30  one    = NULL;
31  two    = NULL;
32  rating = -1.0;
33}
34
35const char * Pair::get_primers (const char *sequence_)
36{
37  if (!one || !two) return 0;
38
39  static char *result     = 0;
40  static int   result_len = 0;
41
42  int max_result = (one ? one->length : 6) + (two ? two->length : 6) + 2;
43  if (max_result > result_len) {
44    free(result);
45    result = 0;
46  }
47
48  if (!result) {
49      ARB_alloc(result, max_result+1);
50      result_len = max_result;
51  }
52
53  char *pone = one->getPrimerSequence(sequence_);
54  char *ptwo = two->getPrimerSequence(sequence_);
55
56  sprintf(result, "%s\n%s", pone, ptwo);
57
58  free(ptwo);
59  free(pone);
60
61  return result;
62}
63
64
65const char * Pair::get_result (const char *sequence_,   int max_primer_length, int max_position_length, int max_length_length)
66{
67  static char *result     = 0;
68  static int   result_len = 0;
69  char        *primer;
70
71  int max_result = (one ? one->length : 6) + (two ? two->length : 6) + 200;
72  if (max_result>result_len) {
73    free(result);
74    result = 0;
75  }
76
77  if (!result) {
78      ARB_alloc(result, max_result+1);
79      result_len = max_result;
80  }
81
82  char *r = result;
83
84  r += sprintf(r,   "%7.3f ", rating);
85
86  if (one) {
87    primer  = one->getPrimerSequence(sequence_);
88    r      += one->sprint(r,   primer, " ", max_primer_length, max_position_length, max_length_length);
89    free(primer);
90  }
91  else {
92    r += sprintf(r, "(error),");
93  }
94
95  if (two) {
96    primer  = two->getPrimerSequence(sequence_);
97    r      += two->sprint(r, primer, "", max_primer_length, max_position_length,   max_length_length);
98    free(primer);
99  }
100  else {
101    r += sprintf(r, "(error)");
102  }
103
104  return result;
105}
106
107
108//
109// print pair with the values of the items
110//
111void Pair::print (const char *prefix_, const char *suffix_, const char *sequence_)
112{
113    const char *result = get_result(sequence_, 0, 0, 0);
114    printf("%s[%s]%s", prefix_, result, suffix_);
115}
Note: See TracBrowser for help on using the repository browser.