cprover
unified_diff.h
Go to the documentation of this file.
1 /*******************************************************************\
2 
3 Module: Unified diff (using LCSS) of goto functions
4 
5 Author: Michael Tautschnig
6 
7 Date: April 2016
8 
9 \*******************************************************************/
10 
13 
14 #ifndef CPROVER_GOTO_DIFF_UNIFIED_DIFF_H
15 #define CPROVER_GOTO_DIFF_UNIFIED_DIFF_H
16 
17 #include <iosfwd>
18 #include <list>
19 #include <map>
20 #include <vector>
21 
22 #include <util/namespace.h>
23 
25 
26 class goto_functionst;
27 class goto_modelt;
28 class goto_programt;
29 
31 {
32 public:
34  const goto_modelt &model_old,
35  const goto_modelt &model_new);
36 
37  bool operator()();
38 
39  void output(std::ostream &os) const;
40 
41  enum class differencet
42  {
43  SAME,
44  DELETED,
45  NEW
46  };
47 
48  typedef std::list<std::pair<goto_programt::const_targett,
49  differencet> >
51 
52  void get_diff(
53  const irep_idt &function,
54  goto_program_difft &dest) const;
55 
56 protected:
61 
62  typedef std::vector<differencet> differencest;
63  typedef std::map<irep_idt, differencest> differences_mapt;
64 
65  differences_mapt differences_map;
66 
67  void unified_diff(
68  const irep_idt &identifier,
69  const goto_programt &old_goto_program,
70  const goto_programt &new_goto_program);
71 
72  void lcss(
73  const irep_idt &identifier,
74  const goto_programt &old_goto_program,
75  const goto_programt &new_goto_program,
76  differencest &differences) const;
77 
78  void get_diff(
79  const irep_idt &identifier,
80  const goto_programt &old_goto_program,
81  const goto_programt &new_goto_program,
82  const differencest &differences,
83  goto_program_difft &dest) const;
84 
85  void output_diff(
86  const irep_idt &identifier,
87  const goto_programt &old_goto_program,
88  const goto_programt &new_goto_program,
89  const differencest &differences,
90  std::ostream &os) const;
91 
93  const goto_programt::instructiont &ins1,
94  const goto_programt::instructiont &ins2,
95  bool recurse=true) const
96  {
97  return
98  ins1.code==ins2.code &&
99  ins1.function==ins2.function &&
100  ins1.type==ins2.type &&
101  ins1.guard==ins2.guard &&
102  ins1.targets.size()==ins2.targets.size() &&
103  (ins1.targets.empty() ||
105  *ins1.get_target(),
106  *ins2.get_target(),
107  false));
108  }
109 };
110 
111 #endif // CPROVER_GOTO_DIFF_UNIFIED_DIFF_H
const goto_functionst & old_goto_functions
Definition: unified_diff.h:57
std::map< irep_idt, differencest > differences_mapt
Definition: unified_diff.h:63
void output_diff(const irep_idt &identifier, const goto_programt &old_goto_program, const goto_programt &new_goto_program, const differencest &differences, std::ostream &os) const
instructionst::const_iterator const_targett
unified_difft(const goto_modelt &model_old, const goto_modelt &model_new)
std::vector< differencet > differencest
Definition: unified_diff.h:62
TO_BE_DOCUMENTED.
Definition: namespace.h:62
const namespacet ns_old
Definition: unified_diff.h:58
differences_mapt differences_map
Definition: unified_diff.h:65
A specialization of goto_program_templatet over goto programs in which instructions have codet type...
Definition: goto_program.h:24
void output(std::ostream &os) const
void unified_diff(const irep_idt &identifier, const goto_programt &old_goto_program, const goto_programt &new_goto_program)
bool instructions_equal(const goto_programt::instructiont &ins1, const goto_programt::instructiont &ins2, bool recurse=true) const
Definition: unified_diff.h:92
std::list< std::pair< goto_programt::const_targett, differencet > > goto_program_difft
Definition: unified_diff.h:50
void get_diff(const irep_idt &function, goto_program_difft &dest) const
const goto_functionst & new_goto_functions
Definition: unified_diff.h:59
void lcss(const irep_idt &identifier, const goto_programt &old_goto_program, const goto_programt &new_goto_program, differencest &differences) const
Concrete Goto Program.
const namespacet ns_new
Definition: unified_diff.h:60