Update copyright to LGPL on all files
[dyninst.git] / dyninstAPI / src / BPatch_sourceBlock.C
1 /*
2  * Copyright (c) 1996-2009 Barton P. Miller
3  * 
4  * We provide the Paradyn Parallel Performance Tools (below
5  * described as "Paradyn") on an AS IS basis, and do not warrant its
6  * validity or performance.  We reserve the right to update, modify,
7  * or discontinue this software at any time.  We shall have no
8  * obligation to supply such updates or modifications or any other
9  * form of support to you.
10  * 
11  * By your use of Paradyn, you understand and agree that we (or any
12  * other person or entity with proprietary rights in Paradyn) are
13  * under no obligation to provide either maintenance services,
14  * update services, notices of latent defects, or correction of
15  * defects for Paradyn.
16  * 
17  * This library is free software; you can redistribute it and/or
18  * modify it under the terms of the GNU Lesser General Public
19  * License as published by the Free Software Foundation; either
20  * version 2.1 of the License, or (at your option) any later version.
21  * 
22  * This library is distributed in the hope that it will be useful,
23  * but WITHOUT ANY WARRANTY; without even the implied warranty of
24  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
25  * Lesser General Public License for more details.
26  * 
27  * You should have received a copy of the GNU Lesser General Public
28  * License along with this library; if not, write to the Free Software
29  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
30  */
31
32 #define BPATCH_FILE
33
34 #include <stdio.h>
35 #include "common/h/std_namesp.h"
36 #include "BPatch_sourceBlock.h"
37
38 //constructor
39 BPatch_sourceBlock::BPatch_sourceBlock()
40         : sourceFile(NULL),sourceLines(NULL)
41 {
42 }
43
44 //constructor
45 BPatch_sourceBlock::BPatch_sourceBlock( const char *filePtr,
46                                         BPatch_Set<unsigned short>& lines)
47 {
48         sourceFile = filePtr;
49         sourceLines = new BPatch_Set<unsigned short>(lines);
50 }
51
52 const char*
53 BPatch_sourceBlock::getSourceFileInt(){
54         return sourceFile;
55 }
56
57 void
58 BPatch_sourceBlock::getSourceLinesInt(BPatch_Vector<unsigned short>& lines){
59
60         if(!sourceLines)
61                 return;
62
63         unsigned short* elements = new unsigned short[sourceLines->size()];
64         sourceLines->elements(elements);
65
66         for(unsigned j=0;j<sourceLines->size();j++)
67                 lines.push_back(elements[j]);
68                 
69         delete[] elements;
70 }
71
72 #ifdef IBM_BPATCH_COMPAT
73 bool BPatch_sourceBlock::getAddressRangeInt(void*& _startAddress, void*& _endAddress)
74 {
75   return false;
76 }
77
78 bool BPatch_sourceBlock::getLineNumbersInt(unsigned int &_startLine,
79                                         unsigned int  &_endLine)
80 {
81   if (!sourceLines) return false;
82   if (!sourceLines->size()) return false;
83   _startLine = (unsigned int) sourceLines->minimum();
84   _endLine = (unsigned int) sourceLines->maximum();
85
86   return true;
87 }
88 #endif
89
90 #ifdef DEBUG 
91 //print method 
92 ostream& operator<<(ostream& os,BPatch_sourceBlock& sb){
93
94         os << "{";
95
96         if(sb.sourceFile)
97                 os << sb.sourceFile << " (";
98         else
99                 os << "<NO_FILE_NAME>" << " (";
100                 
101         if(sb.sourceLines){
102                 unsigned short* elements = new unsigned short[sb.sourceLines->size()];
103                 sb.sourceLines->elements(elements);
104                 for(int j=0;j<sb.sourceLines->size();j++)
105                         os << " " << elements[j];
106                 delete[] elements;
107         }
108         else
109                 os << "<NO_LINE_NUMBERS>";
110
111         os << ")}" << endl;
112         return os;
113 }
114 #endif
115
116 #ifdef IBM_BPATCH_COMPAT
117 void BPatch_sourceBlock::getIncPointsInt(BPatch_Vector<BPatch_point *> &vect)
118 {
119 //  nothing here for now...  might need to implement, might not.
120 }
121
122 void BPatch_sourceBlock::getExcPointsInt(BPatch_Vector<BPatch_point *> &vect)
123 {
124  //  for now, they are the same
125  getIncPoints(vect);
126 }
127
128 char *BPatch_sourceBlock::getNameInt(char *buf, int buflen)
129 {
130   if (buflen > strlen("sourceBlock")) {
131     strcpy(buf, "sourceBlock")[strlen("sourceBlock")]='\0';
132     return buf;
133   }
134   return NULL;
135 }
136
137 #endif