cprover
unwindset.h
Go to the documentation of this file.
1 /*******************************************************************\
2 
3 Module: Loop unwinding setup
4 
5 Author: Daniel Kroening, kroening@kroening.com
6 
7 \*******************************************************************/
8 
11 
12 #ifndef CPROVER_GOTO_INSTRUMENT_UNWINDSET_H
13 #define CPROVER_GOTO_INSTRUMENT_UNWINDSET_H
14 
15 #include <list>
16 #include <map>
17 #include <string>
18 
19 #include <util/deprecate.h>
20 #include <util/irep.h>
21 #include <util/optional.h>
22 
24 {
25 public:
26  // We have
27  // 1) a global limit
28  // 2) a limit per loop, all threads
29  // 3) a limit for a particular thread.
30  // We use the most specific of the above.
31 
32  // global limit for all loops
33  void parse_unwind(const std::string &unwind);
34 
35  // limit for instances of a loop
36  DEPRECATED(SINCE(2019, 11, 15, "use parse_unwindset(list) instead"))
37  void parse_unwindset(const std::string &unwindset);
38 
39  // limit for instances of a loop
40  void parse_unwindset(const std::list<std::string> &unwindset);
41 
42  // queries
43  optionalt<unsigned> get_limit(const irep_idt &loop, unsigned thread_id) const;
44 
45  // read unwindset directives from a file
46  void parse_unwindset_file(const std::string &file_name);
47 
48 protected:
50 
51  // Limit for all instances of a loop.
52  // This may have 'no value'.
53  typedef std::map<irep_idt, optionalt<unsigned>> loop_mapt;
55 
56  // separate limits per thread
58  std::map<std::pair<irep_idt, unsigned>, optionalt<unsigned>>;
60 
61  void parse_unwindset_one_loop(std::string loop_limit);
62 };
63 
64 #endif // CPROVER_GOTO_INSTRUMENT_UNWINDSET_H
dstringt
dstringt has one field, an unsigned integer no which is an index into a static table of strings.
Definition: dstring.h:37
unwindsett::parse_unwindset_file
void parse_unwindset_file(const std::string &file_name)
Definition: unwindset.cpp:94
thread_id
const std::string thread_id
Definition: java_bytecode_concurrency_instrumentation.cpp:22
optional.h
unwindsett::parse_unwindset
void parse_unwindset(const std::string &unwindset)
Definition: unwindset.cpp:57
unwindsett::thread_loop_map
thread_loop_mapt thread_loop_map
Definition: unwindset.h:59
unwindsett::parse_unwind
void parse_unwind(const std::string &unwind)
Definition: unwindset.cpp:18
unwindsett::get_limit
optionalt< unsigned > get_limit(const irep_idt &loop, unsigned thread_id) const
Definition: unwindset.cpp:73
deprecate.h
unwindsett
Definition: unwindset.h:24
unwindsett::loop_map
loop_mapt loop_map
Definition: unwindset.h:54
SINCE
#define SINCE(year, month, day, msg)
Definition: deprecate.h:26
optionalt
nonstd::optional< T > optionalt
Definition: optional.h:35
unwindsett::loop_mapt
std::map< irep_idt, optionalt< unsigned > > loop_mapt
Definition: unwindset.h:53
unwindsett::thread_loop_mapt
std::map< std::pair< irep_idt, unsigned >, optionalt< unsigned > > thread_loop_mapt
Definition: unwindset.h:58
DEPRECATED
#define DEPRECATED(msg)
Definition: deprecate.h:23
unwindsett::parse_unwindset_one_loop
void parse_unwindset_one_loop(std::string loop_limit)
Definition: unwindset.cpp:24
unwindsett::global_limit
optionalt< unsigned > global_limit
Definition: unwindset.h:49
irep.h