Update copyright to LGPL on all files
[dyninst.git] / dyninstAPI / h / BPatch_sourceBlock.h
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 #ifndef _BPatch_sourceBlock_h_
33 #define _BPatch_sourceBlock_h_
34
35 #include "BPatch_dll.h"
36 #include "BPatch_Vector.h"
37 #include "BPatch_Set.h"
38 #include "BPatch_eventLock.h"
39
40 #ifdef IBM_BPATCH_COMPAT
41 class BPatch_point;
42 #endif
43
44 /** this class represents the basic blocks in the source
45   * code. The source code basic blocks are calculated according to the
46   * machine code basic blocks. The constructors can be called by only
47   * BPatch_flowGraph class since we do not want to make the user 
48   * create source blocks that does not exist and we do not want the user
49   * to change the start and end line numbers of the source block
50   *
51   * @see BPatch_flowGraph
52   * @see BPatch_basicBlock
53   */
54 #ifdef DYNINST_CLASS_NAME
55 #undef DYNINST_CLASS_NAME
56 #endif
57 #define DYNINST_CLASS_NAME BPatch_sourceBlock
58
59 class BPATCH_DLL_EXPORT BPatch_sourceBlock : public BPatch_eventLock {
60         friend class BPatch_flowGraph;
61         friend std::ostream& operator<<(std::ostream&,BPatch_sourceBlock&);
62
63 private:
64         const char* sourceFile;
65         BPatch_Set<unsigned short>* sourceLines;
66
67 public:
68
69         /** method to return source file name 
70           * @param i the number of source file requested */
71         API_EXPORT(Int, (),
72         const char *,getSourceFile,());
73
74         /** method to return source lines in the
75           * corresponding source file 
76           * @param i the number of source file requested */
77         API_EXPORT_V(Int, (lines),
78         void,getSourceLines,(BPatch_Vector<unsigned short> &lines));
79
80         /** destructor for the sourceBlock class */
81
82         virtual ~BPatch_sourceBlock() {}
83
84 #ifdef IBM_BPATCH_COMPAT
85         API_EXPORT(Int, (_startAddress, _endAddress),
86         bool,getAddressRange,(void*& _startAddress, void*& _endAddress));
87
88         API_EXPORT(Int, (_startLine, _endLine),
89         bool,getLineNumbers,(unsigned int &_startLine, unsigned int  &_endLine));
90
91         API_EXPORT_V(Int, (vect),
92         void,getExcPoints,(BPatch_Vector<BPatch_point *> &vect));
93
94         API_EXPORT_V(Int, (vect),
95         void,getIncPoints,(BPatch_Vector<BPatch_point *> &vect));
96
97         API_EXPORT(Int, (buf, buflen),
98         char *,getName,(char *buf, int buflen));
99 #endif
100
101 private:
102         /** constructor of the class */
103         BPatch_sourceBlock();
104         BPatch_sourceBlock(const char*,BPatch_Set<unsigned short>&);
105        
106 };
107
108 #endif /* _BPatch_sourceBlock_h_ */
109