Update copyright to LGPL on all files
[dyninst.git] / symtabAPI / h / LineInformation.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 #if ! defined( LINE_INFORMATION_H )
33 #define LINE_INFORMATION_H
34
35 #include "symutil.h"
36 #include "RangeLookup.h"
37 #include "Serialization.h"
38 #include "Annotatable.h"
39 #include "Module.h"
40
41 namespace Dyninst{
42 namespace SymtabAPI{
43
44 class SourceLineInternalTableWrapper;
45
46 class LineInformation : public AnnotationContainer<Statement>, 
47                         private RangeLookup< Statement, Statement::StatementLess > 
48 {
49         SYMTAB_EXPORT bool addItem_impl(Statement);
50         SYMTAB_EXPORT Serializable *ac_serialize_impl(SerializerBase *, const char * = "lineInformation") THROW_SPEC (SerializerError);
51    public:
52       typedef RangeLookup< Statement, Statement::StatementLess >::const_iterator const_iterator;
53       typedef RangeLookup< Statement, Statement::StatementLess >::AddressRange AddressRange;
54
55       SYMTAB_EXPORT LineInformation();
56
57       /* You MAY freely deallocate the lineSource strings you pass in. */
58       SYMTAB_EXPORT bool addLine( const char * lineSource, 
59             unsigned int lineNo, 
60             unsigned int lineOffset, 
61             Offset lowInclusiveAddr, 
62             Offset highExclusiveAddr );
63
64       SYMTAB_EXPORT void addLineInfo(LineInformation *lineInfo);              
65
66       SYMTAB_EXPORT bool addAddressRange( Offset lowInclusiveAddr, 
67             Offset highExclusiveAddr, 
68             const char * lineSource, 
69             unsigned int lineNo, 
70             unsigned int lineOffset = 0 );
71
72       /* You MUST NOT deallocate the strings returned. */
73       SYMTAB_EXPORT bool getSourceLines( Offset addressInRange, std::vector< Statement *> & lines );
74       SYMTAB_EXPORT bool getAddressRanges( const char * lineSource, unsigned int LineNo, std::vector< AddressRange > & ranges );
75
76       SYMTAB_EXPORT const_iterator begin() const;
77       SYMTAB_EXPORT const_iterator end() const;
78       SYMTAB_EXPORT unsigned getSize() const;
79
80       SYMTAB_EXPORT ~LineInformation();
81
82       // double secret private:
83       SourceLineInternalTableWrapper *getSourceLineNamesW();
84       SourceLineInternalTableWrapper *sourceLineNamesPtr;
85
86    protected:
87       /* We maintain internal copies of all the source file names.  Because
88          both directions of the mapping include pointers to these names,
89          maintain a separate list of them, and only ever deallocate those
90          (in the destructor).  Note that it speeds and simplifies things
91          to have the string pointers be the same. */
92
93       unsigned size_;
94 }; /* end class LineInformation */
95
96 }//namespace SymtabAPI
97 }//namespace Dyninst
98
99 #endif /* ! LINE_INFORMATION_H */