add maps and sets to zone containers

R=bmeurer@chromium.org

BUG=

Review URL: https://codereview.chromium.org/889963002

Cr-Commit-Position: refs/heads/master@{#26370}
This commit is contained in:
dcarney 2015-01-31 06:34:51 -08:00 committed by Commit bot
parent 52d4d7de2e
commit bbde91bfc3
2 changed files with 33 additions and 12 deletions

View File

@ -240,13 +240,9 @@ struct PhiData : public ZoneObject {
IntVector operands;
};
typedef std::map<int, PhiData*, std::less<int>,
zone_allocator<std::pair<int, PhiData*>>> PhiMapBase;
class PhiMap : public PhiMapBase, public ZoneObject {
class PhiMap : public ZoneMap<int, PhiData*>, public ZoneObject {
public:
explicit PhiMap(Zone* zone)
: PhiMapBase(key_compare(), allocator_type(zone)) {}
explicit PhiMap(Zone* zone) : ZoneMap<int, PhiData*>(zone) {}
};
struct OperandLess {
@ -271,13 +267,11 @@ class OperandMap : public ZoneObject {
int succ_vreg; // valid if propagated back from successor block.
};
typedef std::map<
const InstructionOperand*, MapValue*, OperandLess,
zone_allocator<std::pair<const InstructionOperand*, MapValue*>>> MapBase;
class Map : public MapBase {
class Map
: public ZoneMap<const InstructionOperand*, MapValue*, OperandLess> {
public:
explicit Map(Zone* zone) : MapBase(key_compare(), allocator_type(zone)) {}
explicit Map(Zone* zone)
: ZoneMap<const InstructionOperand*, MapValue*, OperandLess>(zone) {}
// Remove all entries with keys not in other.
void Intersect(const Map& other) {

View File

@ -7,7 +7,9 @@
#include <deque>
#include <list>
#include <map>
#include <queue>
#include <set>
#include <stack>
#include <vector>
@ -83,6 +85,31 @@ class ZoneStack : public std::stack<T, ZoneDeque<T>> {
};
// A wrapper subclass for std::set to make it easy to construct one that uses
// a zone allocator.
template <typename K, typename Compare = std::less<K>>
class ZoneSet : public std::set<K, Compare, zone_allocator<K>> {
public:
// Constructs an empty set.
explicit ZoneSet(Zone* zone)
: std::set<K, Compare, zone_allocator<K>>(Compare(),
zone_allocator<K>(zone)) {}
};
// A wrapper subclass for std::map to make it easy to construct one that uses
// a zone allocator.
template <typename K, typename V, typename Compare = std::less<K>>
class ZoneMap
: public std::map<K, V, Compare, zone_allocator<std::pair<K, V>>> {
public:
// Constructs an empty map.
explicit ZoneMap(Zone* zone)
: std::map<K, V, Compare, zone_allocator<std::pair<K, V>>>(
Compare(), zone_allocator<std::pair<K, V>>(zone)) {}
};
// Typedefs to shorten commonly used vectors.
typedef ZoneVector<bool> BoolVector;
typedef ZoneVector<int> IntVector;