CACAO
IntervalMap.hpp
Go to the documentation of this file.
1 /* src/vm/jit/loop/IntervalMap.hpp
2 
3  Copyright (C) 1996-2012
4  CACAOVM - Verein zur Foerderung der freien virtuellen Maschine CACAO
5 
6  This file is part of CACAO.
7 
8  This program is free software; you can redistribute it and/or
9  modify it under the terms of the GNU General Public License as
10  published by the Free Software Foundation; either version 2, or (at
11  your option) any later version.
12 
13  This program is distributed in the hope that it will be useful, but
14  WITHOUT ANY WARRANTY; without even the implied warranty of
15  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16  General Public License for more details.
17 
18  You should have received a copy of the GNU General Public License
19  along with this program; if not, write to the Free Software
20  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
21  02110-1301, USA.
22 
23 */
24 
25 #ifndef _INTERVAL_MAP_HPP
26 #define _INTERVAL_MAP_HPP
27 
28 #include <iostream>
29 #include <cassert>
30 #include <algorithm>
31 
32 #include "Interval.hpp"
33 #include "DynamicVector.hpp"
34 
35 /**
36  * Maps variable names to intervals.
37  */
39 {
41 
42 public:
43 
44  size_t size() const { return _intervals.size(); }
45 
46  /**
47  * Returns the interval of the specified variable.
48  */
49  Interval& operator[](size_t varIndex);
50 
51  /**
52  * Computes the union set of this map with the specified map.
53  * This object will hold the result.
54  */
55  void unionWith(const IntervalMap&);
56 
57 
58  friend std::ostream& operator<<(std::ostream&, IntervalMap&);
59 };
60 
61 
62 inline Interval& IntervalMap::operator[](size_t varIndex)
63 {
64  return _intervals[varIndex];
65 }
66 
67 inline void IntervalMap::unionWith(const IntervalMap& other)
68 {
70 
71  for (size_t i = 0; i < _intervals.size(); i++)
72  {
73  _intervals[i].unionWith(other._intervals[i]);
74  }
75 }
76 
77 #endif
78 
79 /*
80  * These are local overrides for various environment variables in Emacs.
81  * Please do not remove this and leave it at the end of the file, where
82  * Emacs will automagically detect them.
83  * ---------------------------------------------------------------------
84  * Local variables:
85  * mode: c++
86  * indent-tabs-mode: t
87  * c-basic-offset: 4
88  * tab-width: 4
89  * End:
90  * vim:noexpandtab:sw=4:ts=4:
91  */
92 
Maps variable names to intervals.
Definition: IntervalMap.hpp:38
DynamicVector< Interval > _intervals
Definition: IntervalMap.hpp:40
void unionWith(const IntervalMap &)
Computes the union set of this map with the specified map.
Definition: IntervalMap.hpp:67
An integer interval of the form constant_0 + instruction_0 .
Definition: Interval.hpp:39
size_t size() const
#define min(a, b)
Definition: lsra.hpp:79
MIIterator i
void resize(size_t size)
friend std::ostream & operator<<(std::ostream &, IntervalMap &)
Definition: IntervalMap.cpp:27
size_t size() const
Definition: IntervalMap.hpp:44
Interval & operator[](size_t varIndex)
Returns the interval of the specified variable.
Definition: IntervalMap.hpp:62