projects
/
oota-llvm.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Stop APInt::shl from generating llvm.trap
[oota-llvm.git]
/
include
/
llvm
/
ADT
/
IndexedMap.h
diff --git
a/include/llvm/ADT/IndexedMap.h
b/include/llvm/ADT/IndexedMap.h
index 40cf329498293067d39474027a35e85f84f91adc..2ffb5058e5bbcecff7b8515f1f4f8d136903f951 100644
(file)
--- a/
include/llvm/ADT/IndexedMap.h
+++ b/
include/llvm/ADT/IndexedMap.h
@@
-1,13
+1,13
@@
-//===- llvm/ADT/
DenseMap.h - A dense map implmentation ----
------*- C++ -*-===//
-//
+//===- llvm/ADT/
IndexedMap.h - An index map implementation
------*- C++ -*-===//
+//
// The LLVM Compiler Infrastructure
//
// The LLVM Compiler Infrastructure
//
-// This file
was developed by the LLVM research group and is distributed under
-//
the University of Illinois Open Source
License. See LICENSE.TXT for details.
-//
+// This file
is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
//===----------------------------------------------------------------------===//
//
//===----------------------------------------------------------------------===//
//
-// This file implements a
dense map. A dense
map template takes two
+// This file implements a
n indexed map. The index
map template takes two
// types. The first is the mapped type and the second is a functor
// that maps its argument to a size_t. On instantiation a "null" value
// can be provided to be used as a "does not exist" indicator in the
// types. The first is the mapped type and the second is a functor
// that maps its argument to a size_t. On instantiation a "null" value
// can be provided to be used as a "does not exist" indicator in the
@@
-17,22
+17,18
@@
//
//===----------------------------------------------------------------------===//
//
//===----------------------------------------------------------------------===//
-#ifndef LLVM_ADT_
DENSE
MAP_H
-#define LLVM_ADT_
DENSE
MAP_H
+#ifndef LLVM_ADT_
INDEXED
MAP_H
+#define LLVM_ADT_
INDEXED
MAP_H
+#include "llvm/ADT/STLExtras.h"
+#include <cassert>
#include <functional>
#include <vector>
namespace llvm {
#include <functional>
#include <vector>
namespace llvm {
- struct IdentityFunctor : std::unary_function<unsigned, unsigned> {
- unsigned operator()(unsigned Index) const {
- return Index;
- }
- };
-
- template <typename T, typename ToIndexT = IdentityFunctor>
- class DenseMap {
+template <typename T, typename ToIndexT = llvm::identity<unsigned> >
+ class IndexedMap {
typedef typename ToIndexT::argument_type IndexT;
typedef std::vector<T> StorageT;
StorageT storage_;
typedef typename ToIndexT::argument_type IndexT;
typedef std::vector<T> StorageT;
StorageT storage_;
@@
-40,9
+36,9
@@
namespace llvm {
ToIndexT toIndex_;
public:
ToIndexT toIndex_;
public:
-
Dense
Map() : nullVal_(T()) { }
+
Indexed
Map() : nullVal_(T()) { }
- explicit
Dense
Map(const T& val) : nullVal_(val) { }
+ explicit
Indexed
Map(const T& val) : nullVal_(val) { }
typename StorageT::reference operator[](IndexT n) {
assert(toIndex_(n) < storage_.size() && "index out of bounds!");
typename StorageT::reference operator[](IndexT n) {
assert(toIndex_(n) < storage_.size() && "index out of bounds!");
@@
-54,6
+50,14
@@
namespace llvm {
return storage_[toIndex_(n)];
}
return storage_[toIndex_(n)];
}
+ void reserve(typename StorageT::size_type s) {
+ storage_.reserve(s);
+ }
+
+ void resize(typename StorageT::size_type s) {
+ storage_.resize(s, nullVal_);
+ }
+
void clear() {
storage_.clear();
}
void clear() {
storage_.clear();
}
@@
-61,7
+65,11
@@
namespace llvm {
void grow(IndexT n) {
unsigned NewSize = toIndex_(n) + 1;
if (NewSize > storage_.size())
void grow(IndexT n) {
unsigned NewSize = toIndex_(n) + 1;
if (NewSize > storage_.size())
- storage_.resize(NewSize, nullVal_);
+ resize(NewSize);
+ }
+
+ bool inBounds(IndexT n) const {
+ return toIndex_(n) < storage_.size();
}
typename StorageT::size_type size() const {
}
typename StorageT::size_type size() const {